在 Excel 裡,如果要計算今天起的日期區間中,某個星期幾的數量,該如何處理?

例如,下圖中要計算今天起的90天裡星期五的數量。

如果利用輔助欄位來協助,先利用C欄取得星期幾的資料,再利用D欄判斷是否為星期五。最後計算D欄中的「V」數量,即可求得結果(本例為13)。

如果你是想在一個儲存格裡解決這麼複雜的過程,你必須用到 SUMPRODUCT、WEEKDAY、INDIRECT、ROW、TODAY 等函數。

Excel-利用SUMPRODUCT、WEEKDAY、INDIRECT計算今天起的日期區間中特定星期幾的數量

【公式設計與解析】

公式:=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。

Excel-利用SUMPRODUCT、WEEKDAY、INDIRECT計算今天起的日期區間中特定星期幾的數量

(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,表示日期是星期日。

Excel-利用SUMPRODUCT、WEEKDAY、INDIRECT計算今天起的日期區間中特定星期幾的數量

(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-常用指令SUMPRODUCT函數

Excel-互通陣列公式、SUM+IF、SUMIF、SUMIFS、SUMPRODUCT

Excel-使用SUMPRODUCT函數執行陣列資料運算

Excel-使用SUMPRODUCT函數處理統計分析

Excel-利用SUMPRODUCT、SUBSTITUTE計算儲存格裡包含數值和單位的數值總和

學不完.教不停.用不盡文章列表

arrow
arrow

    vincent 發表在 痞客邦 留言(0) 人氣()