Excel VBA:For Each循环返回值而不是范围

时间:2016-02-12 17:15:15

标签: excel vba excel-vba foreach excel-2013

我尝试使用For Each循环检查两个单元格范围,查找匹配值。

我的问题是For Each循环似乎在迭代单元格的值(即John Doe,Mark Jones等)而不是范围值(即D3,D4等)。这似乎与我读过的所有文件背道而驰。

lastRowRads = Worksheets("Rads").Range("D3").End(xlDown).Row
lastRowData = Worksheets("Data").Range("D5").End(xlDown).Row
ReferenceRange = "D5:D" & lastRowData
TestRange = "D3:D" & lastRowRads
For Each rcell In Worksheets("Data").Range(ReferenceRange).Cells
    For Each tcell In Worksheets("Rads").Range(TestRange).Cells
        If rcell.Value = tcell.Value Then
           Worksheets("Data").Range(rcell).Offset(0, -1).Value = Worksheets("Rads").Range(tcell).Value
        End If
    Next tcell
Next rcell

我得到的错误是"运行时错误' 1004:应用程序定义或对象定义的错误"并且调试器突出显示If...Then语句中的语句。我的猜测是,它不接受rcelltcell作为范围引用。

我已使用MsgBox进行了一些问题排查,以了解tcellrcell在循环过程中的值是什么,它们应该是什么是rcell.Valuetcell.Value。我在循环之前尝试将它们定义为Dim tcell As RangeDim rcell As Range,但这并没有解决问题。

1 个答案:

答案 0 :(得分:2)

更改此行:

Worksheets("Data").Range(rcell).Offset(0, -1).Value = Worksheets("Rads").Range(tcell).Value 

要:

rcell.Offset(0, -1).Value = tcell.Value 

它们是范围变量,因此已经具有其中固有的表格和范围。