[英]Excel Performance - INDEX-MATCH combination
我正在使用excel創建稍后在vba應用程序中使用的數據集。 我正在使用這個公式:
=INDEX(BaseData!$L$2:$L$10000;MATCH(DataSet!D5&DataSet!E5&DataSet!K5;INDEX(BaseData!$B$2:$B$10000&BaseData!$C$2:$C$10000&BaseData!$D$2:$D$10000;0);0))
通常范圍從f.ex .: A2 - A10000
,因為我的數據可能不同長,並且在數據選擇上經常會有所不同。
但是,這會使我的excel速度大大降低。 我切換到手動計算,但是隨后再次激活自動時,我的excel實例花費的時間非常長,並且經常崩潰。
我也嘗試粘貼一些數據,但是當創建一個新的數據集時,我不得不再次拉低公式,有時數據集中會出現此錯誤。
我有什么建議可以使INDEX-MATCH
公式更INDEX-MATCH
?
感謝您的答復!
更新
我猜很多性能都會消失,因為索引匹配不會選擇確切的范圍,而是會計入空白行。 如何自動獲得與索引匹配的精確范圍?
正如我在上面的評論中提到的那樣,只要這是一個“常規”公式而不是數組公式,您可能會發現僅將“ A1:A10000”替換為“ A:A”就可以成功。 無論如何,您可以創建一個單元格,該單元格將計算引用所擁有的數據行數,然后使用該單元格間接引用其中包含數據的完整列。
計算所需范圍
為了使下面的示例起作用,我假設:A列僅包括數字形式的索引鍵; A列的標題及其上方沒有數字; 並且索引行是連續的,沒有間斷。 從以下公式開始:
=COUNT(A:A)
如果我的上述假設成立,那么這將返回表中數據元素的數量。 一旦知道了這些數據的起始位置,便可以使用該COUNT來確定其終止位置。 假設標題位於第2行中。(我喜歡包含標題,以便在標題下方插入一行時,Excel會選擇要在公式中包含新行)。記住這一點,此公式將創建Excel樣式的引用,該引用在A列中找到包含數據的最后一個單元格:
=ADDRESS(ROW(A2)+1+COUNT(A:A),COLUMN(A2),1,1)
假設有50行數據(從標題下方的第3行開始),以及上面的所有其他假設,則此公式將返回文本結果“ $ A $ 53”。
如果您想做同樣的事情,而是在存在數據的A列中返回整個范圍(從標頭到第53行),則可以執行以下操作:
=ADDRESS(ROW(A2),COLUMN(A2),1,1)&":"&ADDRESS(ROW(A2)+1+COUNT(A:A),COLUMN(A2),1,1)
這將返回文本字符串結果“ $ A $ 2:$ A $ 53”,該結果是對唯一ID值的完整索引的引用。 如果您插入任何行或列,它將自動按照您通常期望的那樣移動。 現在,假設您要為INDEX提取相同的數據,但是要提取B列。 該公式將完全相同,除了上面有“ COLUMN(A2)”的地方,將其替換為“ COLUMN(B2)”。
參考您的計算范圍
因此,現在您有了適當的有限列的地址-但是您實際上如何在公式中引用這些區域? 通過使用INDIRECT函數。 INDIRECT說:“評估一些特定條件。它將創建一個單元格引用。現在查看該單元格引用。” 最簡單的形式如下所示:
=INDIRECT(A1)
假定A1保持值為“ B5”。 間接將獲取值“ B5”,而不是顯示“ B5”,它將轉到B5,並在那里獲取值。 因此,要將其與上面的代碼一起使用,請將整個內容包裝在INDIRECT函數中。 現在,它實際上將正確地引用該范圍,而不是選擇文本字符串“ $ A $ 1:$ A $ 53”。 像這樣:
=INDIRECT(ADDRESS(ROW(A2),COLUMN(A2),1,1)&":"&ADDRESS(ROW(A2)+1+COUNT(A:A),COLUMN(A2),1,1))
使用命名范圍
但這是一個很長的公式,您不想在特定單元格中使用它來進行簡單的INDEX / MATCH。 建議您不要轉到“功能區”->“名稱管理器”->“新名稱”,而不要在單元格中輸入這些公式(盡管可以)。 調用索引“ A ID_COLUMN”的名稱。 調用索引“ B_COLUMN”的名稱(或更具體的名稱)。
最終公式
現在,如果您想對表格進行INDEX / MATCH,當您更改數據時表格會自動增大/縮小,則公式將如下所示[例如,從B列中選擇行,其中A列具有100]:
=INDEX(ID_COLUMN,MATCH(100, B_COLUMN, 0))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.