網友問到一個 Excel 的問題:
根據前一篇文章:Excel-依據日期區間列出各月人員清單(OFFSET,ROW,COLUMN,陣列公式),如果日期有跨年時,該如何處理?
本例以2015年7月~12月、2016年1月~6為週期,來列出各月學員的清單。
【公式設計與解析】
先選取儲存格A1:C23,按 Ctrl+Shift+F3 鍵,勾選「頂端列」,定義名稱:學員、開始、結束。
儲存格E3:
{=IFERROR(OFFSET($A$1,SMALL(IF((DATE(YEAR(開始),MONTH(開始),1)<=
DATE(2015,COLUMN(G:G),1))*(DATE(YEAR(結束),MONTH(結束),1)>=
DATE(2015,COLUMN(G:G),1)),ROW(學員),""),ROW(1:1))-1,0,1,1),"")}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動產生「{}」。
條件一:DATE(YEAR(開始),MONTH(開始),1)<=DATE(2015,COLUMN(G:G),1)
DATE(YEAR(開始),MONTH(開始),1):利用 DATE 函數找出開始的日期陣列中各月的第1天。
DATE(2015,COLUMN(G:G),1):利用 DATE 函數找出 2015 年7月的第1天。
COLUMN(G:G)=7,向右複製公式時,COLUMN(G:G)=7→COLUMN(H:H)=8→...COLUMN(L:L)=12。
條件二:DATE(YEAR(結束),MONTH(結束),1)>=DATE(2015,COLUMN(G:G),1)
複製儲存格E3,貼至儲存格E3:J24。
儲存格K3:
{=IFERROR(OFFSET($A$1,SMALL(IF((DATE(YEAR(開始),MONTH(開始),1)<=
DATE(2016,COLUMN(A:A),1))*(DATE(YEAR(結束),MONTH(結束),1)>=
DATE(2016,COLUMN(A:A),1)),ROW(學員),""),ROW(1:1))-1,0,1,1),"")}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動產生「{}」。
條件一:DATE(YEAR(開始),MONTH(開始),1)<=DATE(2016,COLUMN(A:A),1)
DATE(2016,COLUMN(A:A),1):利用 DATE 函數找出 2016 年1月的第1天。
COLUMN(A:A)=1,向右複製公式時,COLUMN(A:A)=1→COLUMN(B:B)=2→...COLUMN(F:F)=6。
條件二:DATE(YEAR(結束),MONTH(結束),1)>=DATE(2016,COLUMN(A:A),1)
複製儲存格E3,貼至儲存格K3:P24。
詳細說明,可參考前一篇文章:Excel-依據日期區間列出各月人員清單(OFFSET,ROW,COLUMN,陣列公式)。

感謝您快速地回覆,我已將您指導的內容學習並運用於工作之中了,真的很謝謝您!
不客氣!
老師您好~我照著操作,有定義好名稱,但在E3輸入完陣列公式,完全空白,不知道是什麼原因,求解,感謝~
您的Excel版本在輸入完陣列公式後,可能按Ctrl+Shift+Enter鍵。
您好~有Ctrl+Shift+Enter自動產生{},還還是要先key 好月份呢? 謝謝
如果結果是空白,應該是沒查詢到資料。 公式中的「2015」指的是日期中的2015年,如果你的日期是2024年份,則公式中的2015要改為2024。
搞定了!謝謝幫忙及分享~節省很多整理資料的時間~😊
謝謝你光臨我的教學網站。