前幾天睡前老婆突然問了一個Excel的問題,她朋友想要寫一個工作表,需要進行時間的判斷。第一欄輸入時間,第二欄要顯示資訊。若是8:00到11:29要顯示早餐,11:30到下午15:29則是午餐,15:30到17:59是下午茶,18:00到21:59是晚餐,至於其他時段都是休息。
因為那時昏昏欲睡,實在不想動腦思考,就直接寫了一個巢狀IF函數交差了事,內容如下。
尋找資料的過程中,不經意瞄到一段文字:
VLOOKUP可以運用在區間搜尋。
啥米,VLOOKUP不是都是用來做精確搜尋或是近似值搜尋,為何可以用來查詢時間、日期,或數值範圍咧,看到這裡真的是滿臉黑人問號❔❔❔。
打開Excel再仔細看一次VLOOKUP的說明。
那到底祕密在哪裡???
繼續往下看,原來祕密是在是下面這句。
VLOOKUP會返回精確匹配值或近似匹配值。如果找不到精確匹配值,則返回小於查詢內容的最大值。
這樣就能理解了,若把搜尋範圍訂為
00:00 休息
08:00 早餐
11:30 午餐
15:00 下午茶
18:00 晚餐
22:00 休息
若查詢08:11,就會傳回小於查詢內容的最大值,也就是「08:00 早餐」那列資料。而公式也很簡單,只要第二欄打入並分別複製以下內容,就能順利帶出相關資訊了。
終於完成老婆交派的任務了,而且寫出的公式也沒太離譜,巢狀IF實在不是一個好的方法,
因為判斷式太長,導致公式的可讀性與維護性不佳。而VLOOKUP其實是一個常常使用的函數,只不過從來沒有想過可以應用在數值的範圍查詢上。
Excel的應用真的常有許多意料之外的驚喜,多看別人設計的工作表、從網路上挖掘別人分享的心得與創意,是精進Excel技術的不二法門。
因為那時昏昏欲睡,實在不想動腦思考,就直接寫了一個巢狀IF函數交差了事,內容如下。
IF(AND(A1>=TIME(8,0,0),A1<TIME(11,30,0)),"早餐", IF(AND(A1>=TIME(11,30,0),A1<TIME(15,30,0)),"午餐", IF(AND(A1>=TIME(15,30,0),A1<TIME(18,00,0)),"下午茶", IF(AND(A1>=TIME(18,00,0),A1<TIME(22,00,0)),"晚餐","休息"))不過心中對於提出這樣的解決方案實在覺得有些羞愧,這麼醜陋的公式基本上是在踐踏專業資訊人員的自尊(不過趕案子時程式設計師往往也會適時的放下自尊😜),早上醒來後就開始思考有沒有其他方法可以解決上述問題。想了老半天也沒個結論,最後還是用老方法開電腦開始搜尋咕狗大神。
尋找資料的過程中,不經意瞄到一段文字:
VLOOKUP可以運用在區間搜尋。
啥米,VLOOKUP不是都是用來做精確搜尋或是近似值搜尋,為何可以用來查詢時間、日期,或數值範圍咧,看到這裡真的是滿臉黑人問號❔❔❔。
打開Excel再仔細看一次VLOOKUP的說明。
= VLOOKUP (查閱值, 包含查閱值的範圍,範圍中包含傳回值的欄號, 大約符合(TRUE)或完全符合(FALSE))。以往的經驗都是把這個函數用在字串或是精確數字的搜尋,第4個參數通常都指定為FALSE做精確搜尋(若不指定,預設值一律為TRUE或稱為大約符合值)。
那到底祕密在哪裡???
繼續往下看,原來祕密是在是下面這句。
VLOOKUP會返回精確匹配值或近似匹配值。如果找不到精確匹配值,則返回小於查詢內容的最大值。
這樣就能理解了,若把搜尋範圍訂為
00:00 休息
08:00 早餐
11:30 午餐
15:00 下午茶
18:00 晚餐
22:00 休息
若查詢08:11,就會傳回小於查詢內容的最大值,也就是「08:00 早餐」那列資料。而公式也很簡單,只要第二欄打入並分別複製以下內容,就能順利帶出相關資訊了。
=VLOOKUP(A1,參數!$A$1:$B$6,2)
終於完成老婆交派的任務了,而且寫出的公式也沒太離譜,巢狀IF實在不是一個好的方法,
因為判斷式太長,導致公式的可讀性與維護性不佳。而VLOOKUP其實是一個常常使用的函數,只不過從來沒有想過可以應用在數值的範圍查詢上。
Excel的應用真的常有許多意料之外的驚喜,多看別人設計的工作表、從網路上挖掘別人分享的心得與創意,是精進Excel技術的不二法門。
留言
張貼留言