2017-04-24 72 views
0

我意識到這個標題有很多問題,但我不明白它們的答案,或者它與我的問題沒有直接關係。Google Spreadsheet:ArrayFormula and Filter

我試圖避免手動「拖動」一個公式來複制它的每一行。

公式如下

=IF(ISBLANK(A6), 
    "", 
    COUNT(FILTER(Data!C$2:C, 
       Data!A$2:A = A6, 
       Data!B$2:B >= B$2, 
       Data!B$2:B <= B$3, 
       Data!C$2:C >= E$3, 
       Data!C$2:C <= E$2))) 

我不知道使用ARRAYFORMULA時,需要所有的錨。

A列是我想要「interate」的一列,其餘範圍應該評估它們現在正在評估的任何值。

我已經試過這樣:

=ARRAYFORMULA(IF(ISBLANK(A6:A), 
       "", 
       COUNT(FILTER(Data!C$2:C, 
          Data!A$2:A = A6:A, 
          Data!B$2:B >= B$2, 
          Data!B$2:B <= B$3, 
          Data!C$2:C >= E$3, 
          Data!C$2:C <= E$2)))) 

其中A6:A似乎正確評價在A列中的每個單元格。但是,Data表的範圍似乎也只是評估爲單個值,而不是範圍。

我錯過了什麼或者我不明白ARRAYFORMULA是如何工作的?

+0

這只是 '空白''0'訴?將''''改爲'0',除了陣列版本持續「永遠」以外,我得到的結果相同,而非陣列版本在我停止拖動時停止 – pnuts

+0

不幸的是,似乎並沒有這麼做。 – altschuler

+0

對不起,*將'''''改成'0' *只是爲了使比較公平 - 而不是爲了解決問題(因爲我沒有看到任何需要修復的東西)。 – pnuts

回答

1

filter本身是一個數組形式→它不能在另一個arrayFormula中使用,因爲Sheets無法處理數組數組。

解決方法

您正在尋找countifs ARRAYFORMULA,它解決了mmult

=arrayformula(TRANSPOSE(MMULT(TRANSPOSE((Data!B$2:B>=B2)*(Data!B$2:B<=B3)*(Data!C$2:C<=E2)*(Data!C$2:C>=E3)),--(Data!A$2:A=TRANSPOSE(A6:A10)))))


說明

=arrayformula(TRANSPOSE(MMULT(...,...) ^^^^^ mmult will count for 1's and 0's in intersection of conditions

...TRANSPOSE((Data!B$2:B>=B2)*(Data!B$2:B<=B3)*(Data!C$2:C<=E2)*(Data!C$2:C>=E3))... ^^^^ any number of 'plain' conditions goes here

...--(Data!A$2:A=TRANSPOSE(A6:A10)... ^^^^ all 'filter' conditions go here, you have only 1 of those