我试图遍历两个列表,其中有一些行在第一列中具有相同的数据(人名)。对于匹配的名称,我想将数据从单元格(H,x)中的第二数据集(x)复制到第一数据集的(y)单元格(H,y)。在我的尝试中,我使用了以下代码。为了简单起见,我只是将第二个数据集放在第一个数据集下(从第216行开始),尽管我认为将它放在不同的工作表中会更清晰。
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,因为我无法判断我何时尝试访问可用的数据以外的数据,并且是我对错误的理解。
答案 0 :(得分:1)
这里的问题是您可能在电子表格中引用不存在的单元格,但这取决于您使用的Excel版本。 2010版之前的所有Excel工作表中最多总共256列。无论如何,并且根据上面的评论,您可能会看到向后的行和列参数。它是Cells([row],[column])NOT Cells([column],[row])。当你说'#34;从第216行开始时,你好像已经说明了......" bigCounter遍历行而不是列。
答案 1 :(得分:1)
我注意到可能导致错误的两件事。
首先,列索引应该是引号。
因此.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
现在我的机器运行正常,没有运行时错误,但我不确定它是否会产生你想要的结果。
答案 2 :(得分:1)
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
答案 3 :(得分:0)
Worksheets("Sheet1").Cells(A, counter)
是不正确的我认为对于行“A”来说是Worksheets("Sheet1").Cells(counter, 1)