在 Excel 的資料表中中有一個組別的名冊(如下圖左),有人想要依組別將項目集合在一起(如下圖右),該如何處理?

【準備工作】

選取儲存格A1:C27,按一下 Ctrl+Shift+F3 鍵,定義名稱:序號、組別、姓名。

【輸入公式】

儲存格E2:{=IFERROR(INDEX(姓名,SMALL(IF(組別=E$1,序號,),ROW(1:1)+COUNTIF(組別,"<>"&E$1)),),"")}

這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵。

複製儲存格E2,貼至儲存格E2:I15。

 

【公式原理】

IF(組別=E$1,序號,):找出組別名稱和儲存格E1相同的序號陣列。(結果為:符合者得到其序號值,不符合者得到 0。)

COUNTIF(組別,"<>"&E$1):找出組別名稱和儲存格E1不同的的個數。

SMALL(IF(組別=E$1,序號,),ROW(1:1)+COUNTIF(組別,"<>"&E$1)):找出組別名稱和儲存格E1相同的序號陣列中,排除 0 以外的最小值。(因為會有 COUNTIF(組別,"<>"&E$1) 個結果為 0)

INDEX(姓名,SMALL(IF(組別=E$1,序號,),ROW(1:1)+COUNTIF(組別,"<>"&E$1)),):根據上式的序號值,利用 INDEX 函數在姓名陣列中查表找出對應的姓名。

因為上式如果查不到資料,會顯示錯誤訊息(#NUM!),所以利用 IFERROR 函數,將錯誤訊息顯示為空字串。

 

【補充資料】

相關之詳細函數說明,請參閱微軟網站:

INDEXhttp://office.microsoft.com/zh-tw/excel-help/HP010342608.aspx

INDEX:傳回表格或範圍內的某個值或值的參照。

語法:INDEX(array, row_num, [column_num])

Array:儲存格範圍或陣列常數。

Row_num:選取陣列中傳回值的列。

Column_num:選取陣列中傳回值的欄。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 vincent 的頭像
    vincent

    學不完.教不停.用不盡

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