Excel VBA - 为什么我的输出值比预期的低一个单元格?

时间:2014-10-10 21:34:56

标签: excel vba 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,否则为空。但每当我运行它时都会发生这种情况:

enter image description here

了解所有输出是如何从它们应该的位置向下的一个单元格?现在我可以重新定义Output_Row来说:

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

将输出值重新排列在正确的位置。但我想首先知道它是如何出错的。有什么想法吗?

2 个答案:

答案 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