✔ 最佳答案
當用VLOOKUP()只會傳回一個事項,而非同一日內所有事項。其他方法之一是用陣列公式(array formula) 。假設用作篩選關鍵欄位是儲存格S14的日期,在「約會」表上有999項資料放於A2:C1000(可自行修改1000至該表最後列數),那麼:
1. 在儲存格R15的陣列公式是:
{=IF(ISERROR(INDEX(約會!$A$2:$C$1000,SMALL(IF(約會!$A$2:$A$1000=$S$14,ROW(約會!$A$2:$A$1000)),ROW(1:1))-1,2),"",INDEX(約會!$A$2:$C$7,SMALL(IF(約會!$A$2:$A$1000=$S$14,ROW(約會!$A$2:$A$1000)),ROW(1:1))-1,2))}
2. 在儲存格S15的陣列公式是:
{=IF(ISERROR(INDEX(約會!$A$2:$C$1000,SMALL(IF(約會!$A$2:$A$1000=$S$14,ROW(約會!$A$2:$A$1000)),ROW(1:1))-1,3)),"",INDEX(約會!$A$2:$C$1000,SMALL(IF(約會!$A$2:$A$1000=$S$14,ROW(約會!$A$2:$A$1000)),ROW(1:1))-1,3))}
留意輸入公式時不要輸入頭和尾的大括號,而是在打完公式後不按Enter鍵、改按Ctrl+Shift+Enter,Excel便會自行加上頭尾大括號,識別這是陣列公式。然後複製R15:S15的公式至R16:S24(可自行修改24至該表最後列數)即可。
陣列公式操作說明如下:
•SMALL(array,k) 功能可在陣列裡找出第k個最小的數值。如果k是1就是找最小的數值,如果k是2就是找次小的數值,如此類推。
•第二個引用的ROW 功能是要找出公式裡的k,如上例是1,但當此公式複製至R16:S16或以下的儲存格時,會自動調整成為2、3、4、... 等,從而可參考順序找出同一日內多筆資料。
•IF 功能查看S14的數值(日期)是否在表裡出現,如果沒找到會傳回null值,因此添加了IF+SERROR功能來處理錯誤。當IF 功能在表裡找到S14的數值,第一個引用的ROW 功能便傳回該列於工作表上的號碼。