2016-05-14 40 views
3

我有下面的公式,我會在下面解釋:加快數組公式

{=SUM(IF(($G$1:$L$1=$O$1)*($G$2:$L$2=$O$2)*($G$3:$L$3=$O$3)*($G$4:$L$4=$O$4)*($G$5:$L$5=$O$5)*($G$6:$L$6=$O$6)*($G$7:$L$7=$O$7);G21:L21))} 

這裏是工作的樣子:

enter image description here

列摹L -我們有一個所有數據的「數據庫」。這些列將每季度累計增加(每季度約30列)。所以幾年後,我們最終得到了一堆數據庫列(1000 +列的原始數據)。爲了演示,我只包含了這6列。

正如您所見,每列包含特定參數,行1 - 7,允許識別特定的CountryCode +項目代碼+類別+會計年度,+ ...(等)。這使我們能夠追蹤一個獨特的特定項目並檢索其數據。

我們事後對列Ø什麼是我們想要檢索值(你可以看到行1一個具體的項目 - 7是一樣的下G列(我們正在努力檢索值這個特定的項目)。

enter image description here

這裏談到我們的公式。我在上面附着。這裏是什麼樣子,當我按下F2 。正如你所看到的IF陳述首先簡單地檢查特定列是否符合列O下的預定義標準,並且它將與行1-7之間的所有標準相匹配的所有列相加。

現在是這個問題。我們有一個工作表,其中包含20個項目(如O列),我們正在使用此數組公式來檢索值。問題是用這種方式檢索數據需要很多時間。我們還通過VBA採用了一種通過遍歷所有單元格的原理,然後插入一個公式,計算數組單元格,然後我們複製&將結果值粘貼到裏面(這樣我們就不會結束整列數組公式)。然而,它仍然需要長時間計算(1分鐘左右)。

我想知道,如果有更好的解決方案如何檢索已經提到的格式的數據(這意味着我們有一個特定的標準,我們試圖找到)? SUMIFS可能會更好嗎?或者是產品?甚至是完全不同的解決方案?

我願意接受任何可以加快流程的提案。

+0

O列中有多少行包含此公式? – BrakNicku

+0

你綁定了標準的SUMIFS(); '= SUMIFS(G21:L21; $ G $ 1:$ L $ 1; $ø$ 1,$ G $ 2:$ L $ 2; $ö$ 2; $ G $ 3:$ L $ 3; $ö$ 3; $ G $ 4:$ L $ 4; $ O $ 4; $ G $ 5:$ L $ 5; $ O $ 5; $ G $ 6:$ L $ 6; $ O $ 6; $ G $ 7:$ L $ 7; $ O $ 7)' –

回答

1

我在2周前遇到了類似的問題。起初我使用一個幫手列/行。幫助器列將連接每列中的7個字符串。那麼只能使用IF函數來檢查連接的文本是否匹配。如,假設輔助行是8行每您的樣品,細胞G8公式將是

=CONCATENATE(G1,"|",G2,"|",G3,"|",G4,"|",G5,"|",G6,"|",G7) 

和用於其餘做同樣包括O列

=CONCATENATE(O1,"|",O2,"|",O3,"|",O4,"|",O5,"|",O6,"|",O7) 

然後做一個HLOOKUP

=HLOOKUP(O8,G8:L21,14,0) 

在我的情況下,計算時間從10分鐘減少到幾秒鐘!

另外我還發現了一種不使用輔助柱做,再次使用陣列,但這個想法是幾乎相同的,

在O21公式按你的樣品是

=SUM(IF(CONCATENATE(G1:L1,G2:L2,G3:L3,G4:L4,G5:L5,G6:L6,G7:L7)=CONCATENATE(O1,O2,O3,O4,O5,O6,O7),G21:L21)) 

(我沒有在此公式的「|」分隔符中添加,但最好這樣做)

但最後我更喜歡幫助列方法。

供您參考

enter image description here

HTH

+0

肯定會試試這個並會讓你知道速度測試如何進行! –

+0

的表現從17〜25秒增加到不到10秒。謝謝 –

+0

很高興聽到:) – Rosetta

1

爲了提高性能,避免reapeating相同的計算多次。

這使我們能夠追蹤一個獨特的特定項目並檢索其數據。

如果7個值的組合是唯一的,計算所選擇的項目的位置僅一次在輔助細胞(例如O15)與陣列式(與Ctrl鍵 + 移證實 + 輸入

=MATCH(1;(G1:L1=O1)*(G2:L2=O2)*(G3:L3=O3)*(G4:L4=O4)*(G5:L5=O5)*(G6:L6=O6)*(G7:L7=O7);0) 

使用下列公式O21並拖累:

=INDEX(G21:L21;1;$O$15)