用商品名稱的一部分查價格(VLOOKUP 萬用字元)
題目
題目說明
POS 匯出的商品名稱很長——Arabica Coffee Beans 1kg——但搜尋框裡永遠只有一個關鍵字。關鍵字在 D2,價目表在 A2:B5。請在 Price 儲存格 F2 寫出公式,讓輸入 Coffee 也能命中第一個名稱含它的商品。
部分比對需要在關鍵字兩側加萬用字元,而且必須用精確比對——若用近似比對(TRUE),星號會被忽略,還會挑到別列。
題目資料
用表格檢視整份資料(可選取、可複製)
| A | B | D | F | |
|---|---|---|---|---|
| 1 | Product | Price | Keyword | Price |
| 2 | Arabica Coffee Beans 1kg | 18 | Coffee | |
| 3 | Decaf Coffee 500g | 15 | ||
| 4 | Green Tea 250g | 12 | ||
| 5 | Cold Brew Coffee 1L | 21 |
觀念解析
樣式是「拼」出來的:"*" & D2 & "*" 把 Coffee 變成 *Coffee*,就能在名稱中的任何位置命中。萬用字元只在精確比對(FALSE)下有效。若有多列符合,回傳的是由上往下第一個。
解題思路
答案寫在 F2。送出時我們會換 3 組輸入重跑你的公式,寫死數字一定過不了 —— 公式必須跟著儲存格走。
- 目標儲存格是 F2
- 關鍵字在 D2;名稱在 A2:A5、價格在 B2:B5
- 在關鍵字兩側加星號,讓它可以在名稱中間命中
- 公式形狀:=VLOOKUP(?, ?, ?, FALSE)——樣式放在第一個參數
官方解法
展開 2 種解法(建議先自己試一次)
解法 1:VLOOKUP 搭配萬用字元樣式
=VLOOKUP("*"&$D$2&"*",$A$2:$B$5,2,FALSE)
星號代表「前面後面都可以有字」,所以 *Coffee* 會命中 Arabica Coffee Beans、Decaf Coffee 與 Cold Brew Coffee。VLOOKUP 取第一個命中的列,再讀第 2 欄。
解法 2:INDEX + MATCH 用同樣的樣式
=INDEX($B$2:$B$5,MATCH("*"&$D$2&"*",$A$2:$A$5,0))
MATCH 也支援萬用字元,而且回傳位置、不受欄號限制。當要取的值在名稱欄左邊時特別好用。
函數指南
常見問題
VLOOKUP 可以只比對儲存格裡的一部分嗎?
可以,用萬用字元:把樣式拼成 "*"&關鍵字&"*",並把最後一個參數保持 FALSE(精確比對)。星號代表任意字元,所以關鍵字可以在名稱的任何位置。
為什麼要用 & 拼樣式,而不是直接寫 "*Coffee*"?
寫死關鍵字等於這條公式只會回答一個問題。"*"&D2&"*" 會讀 D2 的內容,同一個公式今天查 Coffee、明天查 Tea(案例 2)。
有多列符合時 VLOOKUP 會回傳哪一列?
由上往下第一個。案例 1 有三個商品含 Coffee,答案是 Arabica 那一列。如果你需要全部符合的結果,VLOOKUP 不是對的工具——那要用 FILTER。