我有一个可以很容易修复的怪异侥幸,但我想知道为什么它首先发生。我有一个子程序,它将一个单元格的值吐出比预期的低。这是代码:
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
将输出值重新排列在正确的位置。但我想首先知道它是如何出错的。有什么想法吗?
答案 0 :(得分:2)
Range.Row
始终返回相对于ENTIRE表的行号。
另一方面,Range.Cells
取相对值。
所以在这里你将绝对值从Range("Table1[Output]").Row
传递给期望相对值的函数。相对值由工作表和表头标题行Range("Table1[Output]").Cells(Output_Row, 1)
上的表位置抵消。
答案 1 :(得分:0)
您还可以更改 Output_Row 增量
的位置Sub Reference()
On Error Resume Next
Dim Output_Row As Long
对于每个cl In范围(“Table1 [ID1]”)
Output_Row = Output_Row + 1
范围(“Table1 [输出]”)。单元格(Output_Row,1)= Application.WorksheetFunction.Index(Range(“Table2 [ID2]”),Application.WorksheetFunction.Match(cl,Range(“Table2 [ID2] ]“),0))
下一个cl
End Sub