Excel VBA – 为什么我的输出值比预期的放置一个单元格?

我有一个奇怪的侥幸,可以很容易地修复,但我想知道为什么发生在第一位。 我有一个子程序,正在向下吐出一个小于预期的值。 代码如下:

Sub Reference() On Error Resume Next Dim Output_Row As Long Output_Row = Range("Table1[Output]").Row For Each cl In Range("Table1[ID1]") Range("Table1[Output]").Cells(Output_Row, 1) = Application.WorksheetFunction.Index(Range("Table2[ID2]"), Application.WorksheetFunction.Match(cl, Range("Table2[ID2]"), 0)) Output_Row = Output_Row + 1 Next cl End Sub 

现在,它应该像VLOOKUP一样执行,并且如果它匹配Table1,则从Table2返回相同的ID,否则为空。 但是,每当我运行它时都会发生这种情况

在这里输入图像说明

看看所有的产出是如何从他们应该在哪里的一个细胞? 现在我可以重新定义Output_Row来说:

 Output_Row = Range("Table1[Output]").Row - 1 

这使得输出值在正确的位置重新排列。 但我想知道它是如何得到错误的。 有什么想法吗?

Range.Row总是返回相对于整个表格的行号。 另一方面, Range.Cells取相对值。

所以在这里你传递一个绝对值从Range("Table1[Output]").Row到一个函数期待一个相对值。 Range("Table1[Output]").Cells(Output_Row, 1) 。相对值由表格在表格中的位置和表格标题行Range("Table1[Output]").Cells(Output_Row, 1)

你也可以改变Output_Row增量的位置

Sub Reference()

在错误恢复下一步

Dim Output_Row As Long

对于范围内的每个cl(“Table1 [ID1]”)

Output_Row = Output_Row + 1

Range(“Table1 [Output]”)。Cells(Output_Row,1)= Application.WorksheetFunction.Index(Range(“Table2 [ID2]”),Application.WorksheetFunction.Match(cl,Range(“Table2 [ID2]”) ,0))

下一个cl

结束小组