VLookup Range在Vlookup函数范围内移动和删除列时更改

时间:2016-02-18 16:09:23

标签: excel vba vlookup

我有以下搜索功能:

=ALS((VERT.ZOEKEN(B6;'Raw Data'!$H$1:$BB$3000;21;ONWAAR))=100;"Winkel";
ALS((VERT.ZOEKEN(B6;'Raw Data'!$H$1:$BB$3000;21;ONWAAR))=400;"Woning";
ALS((VERT.ZOEKEN(B6;'Raw Data'!$H$1:$BB$3000;21;ONWAAR))=500;"Parkeerplaats";
ALS((VERT.ZOEKEN(B6;'Raw Data'!$H$1:$BB$3000;21;ONWAAR))=200;"Kantoor";
ALS((VERT.ZOEKEN(B6;'Raw Data'!$H$1:$BB$3000;21;ONWAAR))=600;
"Antenne";"Overig")))))

但是,当我使用宏更改和删除Vlookup搜索范围内的某些列时(Vert.Zoeken = Vlookup的Dutch),公式中指定的范围会更改。

为什么会这样做,我该怎么做呢?我无法在其他任何地方找到明确的答案。

(宏代码只删除了一些列,并没有真正做其他事情)

1 个答案:

答案 0 :(得分:1)

小区ID与小区位置

Excel的主要机制之一是每个单元格都有自己的“ID”,表示该单元格在引用时的位置。当列和列表时,该单元格的位置可以改变。行被操纵。

例如:在A1中,制作公式

=B5+D3

然后在第3行上方插入一行,在B的左侧插入一列。您的公式现在将显示为:

=C6+E3

您会注意到,由于唯一单元格的位置发生了变化,因此公式可以解释这一点。此功能非常有用,否则,如果在某些数字上方插入新标题,即使只需要完全重写公式。

如果您希望引用的位置是“绝对的”,因为它始终指向相同的位置而不是相同的单元ID ,那么您有几个选择:

忽略此功能的VBA解决方案

就其本质而言,当单元格引用发生更改时,VBA代码不会自动调整。如果你有一个引用Range(“B5”)的公式,那么在你向B的左边插入一个新列之后它仍然会说Range(“B5”)。这样,你可以使用VBA来构建公式你的工作表。即:VBA可以重新编写公式以引用您想要的列。

忽略此功能的Excel解决方案

要在没有VBA的情况下解决此问题,这意味着您的VBA代码不需要重新编写公式,您可以使用INDIRECT函数。 INDIRECT允许您根据构建位置的文本字符串动态确定单元格引用的内容。例如:

=VLOOKUP(A1,INDIRECT("B"&5+10&":D100"),2,0)

这将创建文本字符串“B15:D100”,这将是VLOOKUP引用的范围。因为你已进入“B”和“D”作为文本值,插入行/列时不会更改。