Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VLookup函数范围内移动和删除列时,VLookup范围发生变化_Excel_Vba_Vlookup - Fatal编程技术网

Excel 在VLookup函数范围内移动和删除列时,VLookup范围发生变化

Excel 在VLookup函数范围内移动和删除列时,VLookup范围发生变化,excel,vba,vlookup,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

我有以下搜索功能:

=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")))))
但是,当我使用宏(Vert.Zoeken=Dutch代表Vlookup)更改和删除Vlookup搜索范围内的一些列时,公式中指定的范围会更改

为什么会这样,我该如何阻止它?我在其他任何地方都找不到明确的答案


(宏代码只是删除一些列,实际上不做任何其他事情)

单元格ID与单元格位置

Excel的一个主要机制是,每个单元格实际上都有自己的“ID”,该ID由引用该单元格时该单元格的位置表示。当操作列和行时,该单元格的位置可以更改

例如:在A1中,使公式

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

=C6+E3
您会注意到,由于唯一单元格的位置已更改,因此公式对此进行了解释。此功能非常有用,否则,如果在某些数字上方插入新标题,即使是简单的公式也需要完全重新编写

如果希望引用的位置是“绝对”的,即它总是指向相同的位置而不是相同的单元格ID,则有几个选项:

忽略此功能的VBA解决方案

就其性质而言,VBA代码不会在单元格引用更改时自动调整。如果您有一个引用范围(“B5”)的公式,那么在B的左侧插入一个新列后,它仍然会显示范围(“B5”)。这样,您可以使用VBA在工作表中构建公式。ie:VBA可以重新编写公式以引用您希望它引用的列

忽略此功能的Excel解决方案

若要在没有VBA的情况下解决此问题,即VBA代码不需要重新编写公式,可以使用间接函数。间接允许您基于构建位置的文本字符串动态确定单元格引用是什么。例如:

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

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

请注意,间接函数是一个昂贵的函数;每当工作簿更新时,它都会重新运行,因为Excel无法自动判断其先例是什么。我建议您通常动态重建工作簿,并尽可能利用Excel自动参考调整的好处。否则,VBA可能是最干净的解决方案,因为您已经在使用它了。