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
结束小组