2016-02-18 66 views
1

我有以下搜索功能:VLOOKUP檔改變換擋和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的荷蘭語)公式中指定的範圍更改。

它爲什麼這樣做,我該如何阻止它?我無法在其他地方找到明確的答案。

(宏代碼只是刪除了一些列,並沒有做任何事情真的)

回答

1

小區ID VS小區定位

一個Excel的初級技工的是,每個單元有效地都有自己的「ID」,由該單元在被引用時的位置表示。當處理列&行時,該單元格的位置可能會更改。

例如:在A1,使式

=B5+D3 

然後插入上述3行的行,以及B的左側的列公式現在將讀取:

=C6+E3 

你會注意到,因爲獨特細胞的位置發生了變化,所以公式就是這個原因。這個功能非常有用,否則,即使簡單的公式需要被完全重寫,如果一個新的頭被插入到某些數字之上。

如果你想有一個參考的位置是「絕對」,在這個意義上,它總是指向同一位置而不是同一小區ID,那麼你有幾種選擇:

VBA解決方案忽略此功能

就其性質而言,VBA代碼在單元格引用更改時不會自動調整。如果您有一個引用範圍(「B5」)的公式,那麼在您向B的左側插入一個新列後,它仍然會說Range(「B5」)。這樣,您可以使用VBA在內部構建公式你的工作表。即:VBA可以重寫公式以引用您想要的列。

Excel中的解決方案忽略這個功能

爲了解決這個問題,而不VBA,這意味着你的VBA代碼將不需要重新編寫公式,你可以使用間接功能。基於構建位置的文本字符串,INDIRECT允許您動態確定單元格引用的內容。例如:

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

這將創建一個文本字符串「B15:D100」,這將是由VLOOKUP引用的範圍。由於您輸入了「B」&「D」作爲文本值,因此插入行/列時它們不會更改。

+1

請注意,INDIRECT是一個昂貴的功能;只要工作簿更新,它就會重新運行,因爲Excel無法自動判斷它的先例。我建議您通常動態重建您的工作簿,並儘可能利用Excel自動參考調整的優勢。否則,由於您已經在使用VBA,因此VBA可能是最乾淨的解決方案。 –