如下圖,在 Excel 的工作表裡,如何依日期在資料表中篩選指定對象(隊長和和第1,2,3隊員)?

在下圖中,是依日期和姓名列出每天值班的代碼,也列出職務是隊長者,現在要依指定日期日和當班代號來篩選人員。其中要注意:

第1人要是隊長、第1,2,3人為隊員,並且分別是當日和當班除了隊長以外依序的第1,2,3人。

Excel-篩選資料並指定對象和第幾人(FILTER,INDIRECT)

【設計與解析】

定義儲存格名稱

選取儲存格A3:L25,按 Ctrl+Shift+F3 鍵,勾選「頂端列」,定義名稱:職務、姓名、1日、2日、3日、4日、5日、6日、7日、8日、9日、10日。

當定義名稱時,因為第一個字是數字,則系統會自動加上「_」。

Excel-篩選資料並指定對象和第幾人(FILTER,INDIRECT)

 

1. 篩選當日當班的隊長

隊長:=FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務="隊長"))

(1) INDIRECT("_"&O3)

先利用串接 "_" 儲存格O3,可以形成定義名稱所有的名稱。

再利用 INDIRECT 函數將名稱字串轉換為儲存格範圍。例如:儲存格O3為「5日」,先轉為「_5日」,即代表儲存格G4:G25。

(2) LEFT(INDIRECT("_"&O3),1)

利用 LEFT 函數取出第(1)式傳回值的第一個字元。因為本例是為值班代號的第一碼為篩選依據。

(3) FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務="隊長"))

在 FILTER 函數中利用雙條件來篩選:

LEFT(INDIRECT("_"&O3),1)=O4 和 職務="隊長"

其中運算式「*」,相當於執行邏輯 AND 運算。

最後,在 FILTER 函數中利用條件篩選並列出符合的「姓名」。

 

2. 篩選當日當班的第1隊員

第1隊員:=INDEX(FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務<>"隊長")),1)

(1) FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務<>"隊長"))

在此要篩選不是隊長者,因為條件變為「職務<>"隊長"」

(2) INDEX(第(1)式,1)

藉由 INDEX 指定第1列資料,即為第1隊員。

同理:

第2隊員:=INDEX(FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務<>"隊長")),2)

藉由 INDEX 指定第2列資料,即為第2隊員。

第3隊員:=INDEX(FILTER(姓名,(LEFT(INDIRECT("_"&O3),1)=O4)*(職務<>"隊長")),3)

藉由 INDEX 指定第3列資料,即為第3隊員。

【參考資料】

 FILTER 函數參考微軟提供的說明:FILTER 函數
 INDIRECT 函數參考微軟提供的說明:INDIRECT 函數
 INDEX 函數參考微軟提供的說明:INDEX 函數
【延伸學習】

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

arrow
arrow
    文章標籤
    Excel 篩選 FILTER INDIRECT
    全站熱搜

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