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

我有以下searchfunction:

=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"))))) 

但是,当我用macros(Vert.Zoeken = Dutch for Vlookup)更改和删除Vlookupsearch范围中的某些列时,公式中指定的范围发生变化。

为什么这样做,我该怎么办呢? 我无法在其他地方find明确的答案。

(macros代码只是删除了一些列,并没有做任何事情)

小区ID与小区位置

Excel的主要机制之一是每个单元格有效地拥有自己的“ID”,这个ID就是该单元格被引用时的位置。 当操纵列和行时,该单元格的位置可能会更改。

例如:在A1中,做公式

 =B5+D3 

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

 =C6+E3 

你会注意到,因为独特单元格的位置发生了变化,所以公式就是这个原因。 这个function是非常有用的,否则,即使简单的公式需要被完全重写,如果一个新的头插入一些数字之上。

如果你希望引用的位置是“绝对的”,那么它总是指向相同的位置而不是相同的单元ID ,那么你有几个select:

VBA解决scheme忽略此function

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

Excel解决scheme忽略此function

要解决这个没有VBA,意味着你的VBA代码不需要重写公式,你可以使用INDIRECT函数。 INDIRECT允许您基于构build位置的文本string来dynamic确定单元格引用的内容。 例如:

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

这将创build文本string“B15:D100”,这将是VLOOKUP引用的范围。 由于您input了“B”和“D”作为文本值,因此在插入行/列时它们不会更改。