
我正在嘗試在 Excel 中設定一個公式,該公式將查看 c7:c30 中指定日期的一系列數據,以及 L7:L30 中的“活動”-“A”和“已完成”-“C”類別。我試圖讓 Excel 單獨查看每一行,並比較日期是否在 1/1/12 (B38) 和 3/31/12 (C38)(一年的第一季)指定的季度日期之間,如果滿足此條件,然後對標有“A”的活動進行計數。
我提出了以下不起作用的方法,因為它只查看指定的第一個日期,併計算所有標有“A”的日期(如果第一個日期與第一季的規格相符)。
{=(IF(($C$7:$C30>=$B$39)*($C$7:C$30<=$C$39),COUNTIF($L$7:$L30,"a"),0)) }
請幫我弄清楚這個公式有什麼問題,它不會單獨查看每一行,而是如果第一個日期與所提供的 if 語句相符,則計算所有用 A 指示的日期。
抱歉,不太擅長 Excel,非常感謝您的幫助。
謝謝!
答案1
我認為您建立數組公式的方式可能有問題。只需解壓縮您的語句,您將建立一個包含盡可能多行的數組,如果滿足日期條件,則每行包含 COUNTIF($L$7:$L30,"a") 的結果,或 0。
由於您沒有應用任何計數函數來包裝整個數組,因此該函數將返回整個數組,但您只會看到單元格中的第一個結果,這就是為什麼它似乎完全由一個單元格控制。
解決這個問題的另一種方法如下:
您的三個測試(每行)是:
- 日期 >= B38
- 日期 <= C38
- 條件=“a”
你只想計算這三個都正確的地方。
很方便,真值的計算結果為 1,假值的計算結果為 0,因此我們可以使用乘法運算來得到您想要的結果。
因此,對於單行,您需要執行以下操作
(C7 >= B38) * (C7 <= C38) * (L7="a")
(顯然,將其擴展到 C7:C30 等以涵蓋您感興趣的行)
然後,要將其折疊為單一值,您需要將整個資料包裝在 SUM() 語句中,該語句將僅遍歷列表並將所有值加在一起。
SUM( (C7:C30>B39) * (C7:C30<=C39) * (L7:L30="a") )
另外,如果您想看看,請返回原始公式,並用 sum() 語句將其包裝起來,您將得到顯示為狀態設定為「a」的次數的結果,乘以滿足日期條件的行數。
(注意:數組公式一開始有點讓人頭疼,但是一旦你了解它們,它們就可以很好地工作。我最初在以下位置閱讀它們:http://www.cpearson.com/excel/ArrayFormulas.aspx如果仍然令人困惑的話,這仍然是一個很好的解釋..)