在VBA中使用嵌套的For循环运行时错误“9”

我试图循环两个列表,其中有一些行在第一列中有相同的数据(人的名字)。 对于匹配的名称,我想复制单元格(H,x)中的第二个数据集(x)到第一个数据集(y)单元格(H,y)的数据。 在我的尝试中,我使用了下面的代码。 为了简单起见,我只在第一个数据集(从第216行开始)处插入第二个数据集,尽pipe我认为把它放在不同的工作表中会更清晰。

Private Sub CommandButton1_Click() Dim counter As Integer Dim bigCounter As Integer For counter = 2 To 214 For bigCounter = 216 To 428 If Worksheets("Sheet1").Cells(A, counter).Value = Worksheets("Sheet1").Cells(A, bigCounter) Then Worksheets("Sheet1").Cells(H, counter).Value = Worksheets("Sheet1").Cells(H, bigCounter) Exit For End If Next bigCounter Next counter End Sub 

我不明白为什么我得到一个运行时错误9,因为我不知道什么时候我试图访问可用的数据之外的数据,这是我对错误的理解。

我注意到两件事情可能会导致你的错误。

首先,列索引应该在报价中。

所以.Cells(A, counter)应该是.Cells("A", counter)

但即使如此,这也不是完全正确的,因为.Cells期望行首先跟着列索引,而你在这里说的是去A行,这是没有意义的(它期望一个数字,而不是一个字母) 。

更改这两个问题导致下面的代码

 Private Sub CommandButton1_Click() Dim counter As Integer Dim bigCounter As Integer For counter = 2 To 214 For bigCounter = 216 To 428 If Worksheets("Sheet1").Cells(counter, "A").Value = Worksheets("Sheet1").Cells(bigCounter, "A").Value Then Worksheets("Sheet1").Cells(counter, "H").Value = Worksheets("Sheet1").Cells(bigCounter, "H") Exit For End If Next bigCounter Next counter End Sub 

这在我的机器上运行正常,没有更多的运行时错误,但我不知道它是否产生你以后的结果。

Cells方法通常先取行,再取列。 列字母也应该在语音标记中。

在比较单元格中的值时,应明确使用.Value属性。

 Public Sub CommandButton1_Click() Dim counter As Integer Dim bigCounter As Integer For counter = 2 To 214 For bigCounter = 216 To 428 If Worksheets("Sheet1").Cells(counter, "A").Value = Worksheets("Sheet1").Cells(bigCounter, "A").Value Then Worksheets("Sheet1").Cells(counter, "H").Value = Worksheets("Sheet1").Cells(bigCounter, "H").Value Exit For End If Next bigCounter Next counter End Sub 

这里的问题是,您可能会在电子表格中引用不存在的单元格,但这取决于您使用的是哪个版本的Excel。 2010版之前,所有Excel工作表中最多有256列。 无论如何,并且在上面给出您的评论之后,您会看到您的行和列参数是向后的。 它是单元格([行],[列])不是单元格([列],[行])。 你似乎已经指出,当你说“从第216行开始……”bigCounter迭代行而不是列。

  1. 确保工作表中有“Sheet1”
  2. 像约书亚说Worksheets("Sheet1").Cells(A, counter)是不正确的我认为它喊是Worksheets("Sheet1").Cells(counter, 1)Worksheets("Sheet1").Cells(counter, 1)行“A”