EXCEL 日曆

2015-04-05 7:28 am
小弟正在設計一個EXCEL日曆,
想在表一設置一個每月事項,來源在表二中的資料,
表二中記錄所有事項

經過多次研究,假設表二有4個事項,要傳回4個事項去表一

VLOOKUP
最只可以找到表二中最底(4)的一個值,
如果可以在算式中減ROW(4)+1

請問有其他方法可以LOOKUP(找到資料)之餘
又可以ROW/COLUMN(控制該資料傳回的儲存格)

下圖左邊是表一,右下是表二
https://drive.google.com/file/d/0B-X6LXLhy7EJd18wYjVwTXIyZ0k/view?usp=sharing

回答 (1)

2015-04-07 3:44 pm
✔ 最佳答案
當用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 功能便傳回該列於工作表上的號碼。


收錄日期: 2021-04-11 21:02:49
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20150404000051KK00104

檢視 Wayback Machine 備份