在 Excel 裡,如果要計算今天起的日期區間中,某個星期幾的數量,該如何處理?
例如,下圖中要計算今天起的90天裡星期五的數量。
如果利用輔助欄位來協助,先利用C欄取得星期幾的資料,再利用D欄判斷是否為星期五。最後計算D欄中的「V」數量,即可求得結果(本例為13)。
如果你是想在一個儲存格裡解決這麼複雜的過程,你必須用到 SUMPRODUCT、WEEKDAY、INDIRECT、ROW、TODAY 等函數。
【公式設計與解析】
公式:=SUMPRODUCT((WEEKDAY(ROW(INDIRECT(N(TODAY())&":"&
N(TODAY())+90)),2)=5)*1)
1. WEEKDAY 函數:傳回對應於日期的星期數值
2. INDIRECT 函數:傳回字串所指定的參照位址(字串轉換為位址)
3. TODAY 函數:傳回今天的日期
4. N 函數:傳回轉換為數字的值
5. ROW 函數:傳回儲存格列號
公式意義:(參考下圖)
(1) INDIRECT(N(TODAY())&":"&N(TODAY())+90)
N(TODAY()=44399、N(TODAY())+90=44488
INDIRECT(N(TODAY())&":"&N(TODAY())+90):產生「44399:44488」
註:今天是2021/7/22,所以 TODAY 函數傳回 44399。
(2) ROW(INDIRECT(N(TODAY())&":"&N(TODAY())+90))
ROW(44399:44488),其作用為產生44399,44400,44401,…,44487,44488數列。
(這個作法,請好好記住,來日必然會再用到。)
(3) WEEKDAY(ROW(INDIRECT(N(TODAY())&":"&N(TODAY())+90)),2)
在 WEEKDAY 函數中使用參數「2」,作用為:
傳回 1,表示日期是星期一。
傳回 2,表示日期是星期二。
…
傳回 7,表示日期是星期日。
(4) SUMPRODUCT((WEEKDAY(第(3)式=5)*1)
條件:WEEKDAY(第(3)式=5
判斷 WEEKDAY 函數傳回值是否為 5,傳回 TRUE/FALSE 陣列。
其中「*1」運算,可以將 TRUE/FALSE 陣列轉換為 1/0 陣列。
最後由 SUMPRODUCT 函數將傳回的 1/0 陣列予以加總,即為所求。
【延伸練習】
儲存格C3:=RIGHT(TEXT(B3,"[$-zh-TW]aaa;@"),1)
儲存格D3:=IF(C3="五","V","")
複製儲存格C3,貼至存格C3:D92。
其中 TEXT 函數的參與「[$-zh-TW]aaa;@」,可以顯示日期格式為「周三」。
透過 RIGHT 函數取得最右一個字元。
【小小叮嚀】
對於初學者,看不懂那麼長的公式,完全不需要氣餒。因為學習本來就要按部就班,一步一步往上累積的。等到會用的函數多了,公式應用心得累積夠了,很多公式就會水到渠成,自然而然就會了解了。改天再回來看或是換另一篇看的懂的來學就好了。可以看看以下幾篇:
Excel-互通陣列公式、SUM+IF、SUMIF、SUMIFS、SUMPRODUCT
留言列表