根據 Excel 中的資料表(參考下圖),想要根據三個條件(零件編號、外形、尺寸)來求得售價,利用 INDEX 函數應是不錯的選擇。由於條件有三個,所以得藉助陣列公式才能求得結果。
【準備工作】
1. 選取儲存格A1:D19,按一下 Ctrl+Shift+F3 鍵,建立名稱:零件編號、外形、尺寸。
2. 選取儲存格A2:D19,建立名稱:資料。
【公式說明】
儲存格D22:{=INDEX(資料,MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0),4)}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵。
(零件編號=A22)*(外形=B22)*(尺寸=C22):公式中的「*」乃將三個條件做 AND 運算,條件完全成立時會傳回 True (運算時視為1),反之傳回 False (運算時視為0)。
MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0):找尋「1」(符合條件者)在第幾列。
透過 INDEX 函數查詢在第4欄中對應的結果。
如果查詢不到任何符合條件的資料會傳回錯誤值,稍加修改公式,利用 IFERROR 函式,讓其傳回「無此零件」訊息。修改如下:
儲存格D23:{=IFERROR(INDEX(資料,MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0),4),"無此零件")}
使用資料驗證方式設計下拉式清單,可以讓輸入資料時不會因為輸入錯誤而查詢不到資料。
【補充資料】
關於詳細函數說明,請參考微軟網站:
INDEX:http://office.microsoft.com/zh-tw/excel-help/HP010342608.aspx
|
INDEX:傳回表格或範圍內的某個值或值的參照。 |
|
語法:INDEX(array, row_num, [column_num]) Array:儲存格範圍或陣列常數。 Row_num:選取陣列中傳回值的列。 Column_num:選取陣列中傳回值的欄。 |
MATCH:http://office.microsoft.com/zh-tw/excel-help/HP010342679.aspx
|
MATCH:搜尋某儲存格範圍內的指定項目,然後再傳回該項目在範圍內的相對位置。 |
|
語法:MATCH(lookup_value, lookup_array, [match_type]) lookup_value:在 lookup_array 中尋找比對的值。 lookup_array:要搜尋的儲存格範圍。 match_type:這是一個數字,其值有三種可能:(預設值為 1) 1 或省略:找到等於或僅次於 lookup_value 的值。lookup_array 引數內的值必須以遞增次序排列。 0:找第一個完全等於 lookup_value 的比較值。lookup_array 引數內的值可以依任意次序排列。 -1:找到等於或大於 lookup_value 的最小值。lookup_array 引數內的值必須以遞減次序排序。 |
IFERROR:http://office.microsoft.com/zh-tw/excel-help/HA010342587.aspx
|
IFERROR:如果公式計算錯誤,會傳回指定的值;否則,會傳回公式的結果。 |
|
語法:IFERROR(value, value_if_error) value:檢查此引數是否有錯誤。 value_if_error:公式計算錯誤時要傳回的值。 使用 IFERROR 函數,可以捕捉並處理公式中的錯誤。會評估下列錯誤類型:#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? 或 #NULL!。 |

Hello~不好意思我想請問:假設的我要下的條件是欄位顧訂條件但是列位的條件非固定,這樣我的公式該如何寫才可以傳回質呢? 還是我寄檔案請你幫我看看呢?謝謝!!
非常喜歡你的文章, 受用無窮, 問題請教: 從以下陣列中, 我想根據特定日期, 項目, 回傳敘述值, 是否能簡述, 公式寫法, 好像搜尋到您的部落格, 未找到合適方法, 煩請受教,謝謝! 日期 項目 敘述 1/11 吃飯 跟家人 2/11 吃飯 跟朋友 2/33 睡覺 熬夜 3/11 運動 籃球 盼覆
因為你的日期不會重覆,所以你的要求: (1) 查詢特定日期,列出項目和敘述。 (2) 查詢特定日期和項目(AND運算),列出敘述。 以上二種的做法,有所不同。 你要那一種?
非常感謝你的回覆, 我的需求應該是比較接近下面, (2) 查詢特定日期和項目(AND運算),列出敘述。 日期 項目 敘述 金額 1/11 吃飯 跟家人 50 1/15 吃飯 跟摯友 100 1/31 吃飯 跟老闆 120 2/11 吃飯 跟朋友 100 2/33 睡覺 熬夜 300 3/11 運動 籃球 500 實際需求是這樣, 由於希望從類似上述資料中之SHOW出, 在給定之"月份"(但參照的日期格式為"1月5日")及給定"項目"條件文字(如吃飯), 列出再1月, 所有符合吃飯的, 敘述及金額, 希望能帶出下表 日期: 1月 項目: 吃飯 敘述 金額 跟家人 50 跟摯友 100 跟老闆 120 謝謝!
請參考:http://isvincent.pixnet.net/blog/post/46975354
列隊 來源 日期 姓名 ----------------------------------- 小學 A 7/3 陳大明 小學 B 8/3 XXX 中學 A 9/3 YYY 想自動傳回以下條件 小學 A 最早的日期 小學 B 最早的日期 中學 A 最早的日期 ↑ 公式要怎設..謝謝
請參考:http://isvincent.pixnet.net/blog/post/47143816
不好意思: 請問網頁教學中,以下式子,D23是否應改成D22才對? ------------------------------------------------------------------------------------------------------------ 儲存格D23:{=INDEX(資料,MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0),4)} ------------------------------------------------------------------------------------------------------------ 是否改成 儲存格D22:{=INDEX(資料,MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0),4)} 謝謝! 您的教學真是棒! 不知是否有出書?
謝謝你!已更正,有你真好。 沒有出書!因為例子永遠寫不完,而且書本會受限於篇幅,不容易表達。
您這網站真是寶庫!
這些例子都相當實用! 感覺市面上找不到如此豐富的例子。 我正苦惱垂直表格與水平表格互相轉置。(而且分別在不同工作表) 有此寶庫,可先研究一下。 感謝!感恩!
謝謝你常常光臨我的網站。
請問如圖 https://goo.gl/JSYv9S 如何將A[直式姓名]工作表中之每一輪的對手號找出, 對應到B[成績計算]工作表? 以1號劉錦和而言(A[直式姓名]工作表):目前是2、4、9(尚有兩輪未定;C15、C18) 亦即,將「直式姓名」之對手號, 對應到B[成績計算]工作表,每個對手號,往下移三格(或三列)。 不知該用INDEX或用OFFER?
檔案如下: 106-04-30-彰化交流賽(瑞士制個人賽).xlsx https://goo.gl/hxQUvu 謝謝!
請問如圖: https://goo.gl/JSYv9S 如何將A[姓名直式]工作表中,每一人每一輪的對手號找出且對對應到 B[成績計算]工作表第1~5輪對手號。 以號碼1號劉錦和而言,第1~3輪對手號為:2、4、9(另2輪目前未知) 號碼2號呂明德而言,第1~3輪對手號為:1、3、7 每人每一輪之對手號都在該輪,對手號都隔3格(或列)。 不知該用INDEX或用OFFER? 謝謝! ------------------------------------- 檔案如下: 106-04-30-彰化交流賽(瑞士制個人賽).xlsx https://goo.gl/hxQUvu
(原先你的留言被Pixnet判定為廣告留言,所以無法顯示。) 在成績計算工作表的儲存格E2:=OFFSET(直式姓名!$C$6,(COLUMN(A:A)-1)*3,ROW(1:1)-1)&"" 複製儲存格E2,貼至儲存格E2:H19。
站長實在是利害! 我原本以為怎麼重複刊登幾次,都沒出現。 第一次有出現,後來想補充正完整一點(因為無法上傳圖片畫面,所以才想採用google雲端硬碟形式,刊登圖片。後來又發覺:與其刊登畫面,倒不如直接上傳檔案,更為直接操作。),但再刊登第二次,卻發現第一次留言不見。 因此多刊登幾次(保持完整性),卻一直都沒出現,有點氣餒。 還好站長英名! -------------------------------------------- 站長之解法真是利害,就是我想要的。 我有這種構想,就是想不出,由原參考儲存格如何一次跳3格,又如何可逐次右移? (絞盡腦汁仍想不出公式如何寫..)版主之解法真是高明、神妙。 在下有幾點疑問: ①參考儲存格是否應以「直式姓名!$C$7」為起始點,才對? 亦即 =OFFSET(直式姓名!$C$7,(COLUMN(A:A)-1)*3,ROW(1:1)-1)&"" 且貼至儲存格E2:I19(第5輪對手號) 改成如此,就完全正確了。 ②另外有一點想請問:公式最後多用&"",是有何功能嗎? 謝謝! ③後來我的另一個作法,是以[直式姓名]工作表的「橫式」觀點,先解決每一輪每一人的對手號 ,您的解法是用「直式」觀點(也是我原本之意圖) 後來,我發覺用「橫式」觀點,似乎更直覺,更不用動腦筋(尤其公式之設計) 如下: =INDEX(直式姓名!$C$7:$T$7,,ROW(A1)) 不過,我認為您的解法更高超、神妙,公式之設法,我難以想到。 但,這就是我想要的!就是它!(明明會用中文表達,可是公式寫不出來...) 真是感謝、感恩!
公式是邏輯思維(演算法)的表現,不同演算法可以得到相同結果。能解決問題的方法都是可用的方法。有些的確是比較高明,原因是只要改參數,結果就可以改變,不用再改公式。謝謝你光臨我的網站。
抱歉,更新網址如下: 106-04-30-彰化交流賽(瑞士制個人賽).xlsm https://goo.gl/zqt8T4
=OFFSET(直式姓名!$C$7,(COLUMN(A:A)-1)*3,ROW(1:1)-1)&"" ②另外有一點想請問:公式最後多用&"",是有何功能嗎? 謝謝!
公式中的&"",用以將傳回的0顯示為空白。(因為原始為空白,但查詢結果卻顯示為0)
你好, 我有以下表格: 老師名 一 二 三 四 五 伊 1A. 1C. 1B 嬋。 1B. 1A 當我入完資料後 我可以用什麼公式即時做到以下效果? 班別。 一。 二。 三。 四。 五 1A. 伊。 嬋 1B. 嬋。 伊 1C. 伊
請參考:http://isvincent.pixnet.net/blog/post/47493795
shih wenhsien 先生你好, 本人叫阿po 在做一些統計/ 分類工作, https://drive.google.com/file/d/0B0if3obZ8CFbbUV5cmlESE53QkE/view?usp=sharing 如以上情況, 零件編號有重複的時候, 下拉式選單會重複顯示, 如何避免? 而且, 如果我的資料範圍設定到第33 行,好讓我之後加上新項目, 但是這樣會做成下拉式選單有空格, 如何避免? 謝謝你!
Dear 站長, 我按你的方式, 製作了個報價表單, 但是有些資料撈不到, 請問是甚麼問題~ http://swallow0000.pixnet.net/album/photo/694488624-excel01.jpg http://swallow0000.pixnet.net/album/photo/694488627-excel02.jpg 謝謝你
站長:您真的很厲害,跟您學習了很多。不好意思,再請問一個複合的問題。 如果要找材質為ZD and 值為5 (範圍2.1~6) 的價格,該怎麼寫呢? (p.s. answer = 265) 材質 min max price AB 50.9 85 195 AB 10 50.8 190 AB 4.1 45.0 190 AB 1.0 4.0 195 ZD 25.1 40 265 ZD 6.1 25 260 ZD 2.1 6 265 ZD 0 2 285
請參考:http://isvincent.pixnet.net/blog/post/47670321
請問上方所寫"資料驗證方式設計下拉式清單", 如何取零件編號唯一的值而非每一個值? 如果資料驗證取$A$2:$A$19會取出18個包含重複的零件編號, 但唯一的值只有6個, 謝謝
可以使用輔助欄位建立不重覆的清單,參考:http://isvincent.pixnet.net/blog/post/47320812 再用以建立下拉式清單
您好,看到您的網站,真的幫助很多,太謝謝你了,願意分享, 在此想請教您個問題 就是想要有多個條件取交集,判斷資料欄位內是否有符合的資料,有多個符合就列出多筆 條件可輸入三個 例如下列三行(輸入的條件,不一定每一個條件都要輸入,但是只要有輸入的,就到資料table內找尋對應有哪些資料): 姓名: 住處城市: 性別: 資料的table為 姓名 住處城市 性別 電話 小明 新竹 男 09123456789 小美 台北 女 0228456352 大王 新竹 男 09876543212 小千 台南 女 053846928 1.如果條件輸入住處城市為新竹,性別為男,要顯示的為 姓名 住處城市 性別 電話 小明 新竹 男 09123456789 大王 新竹 男 09876543212 2.如果輸入條件為性別為女,要顯示的為 姓名 住處城市 性別 電話 小美 台北 女 0228456352 小千 台南 女 053846928 3.如果輸入的姓名為大王,性別男,住處為新竹,要顯示的為 姓名 住處城市 性別 電話 大王 新竹 男 09876543212 還請站長幫我解惑
老師您好 有兩個問題想要向您請益 1. 依照老師的方式做了這題,也成功運算出結果了 不過我好奇的想要解析運算過程,於是將它拆開來看 當單獨拆到這一段時,不加MATCH函數 ={(零件編號=A22)*(外形=B22)*(尺寸=C22)} 時 發現只有第二列 LM843 、圓、中 這個條件會顯示TRUE 從第三列開始皆為FALSE 請問是是什麼原因呢?(陣列公式認知不足?) 2.請問是否有推薦的書籍或是數學上、邏輯上的學科需要加強研習 才能更加懂函數的意義? 再麻煩老師了,謝謝。
老師您好 第一個問題我搞懂了原理了,打開公式稽核,並詳讀了MATCH函數的特性,之後就想通了。 謝謝~~您的文章真的很棒,給了我很多啟發
章苦你了!謝謝你光臨我的教學部落格。
想請教vincent,不知是否願意解惑。如何利用公式從A欄資料取得(紅字字體中所示"各月份的起始日期和結束日期)。試著利用if,max,min,month和陣列公式均無法取得正確值。期望能獲得你的指教解惑。萬分感謝! 資料連結如下:https://photos.app.goo.gl/8VHLaKHB9VbUoVBf8
請參考:https://isvincent.pixnet.net/blog/post/48910059
*****
謝謝站長,完全是我要的教學 幫了我一個大忙m(_ _)m
謝謝你光臨我的教學部落格。
*****
*****
站長您好, 總是在您的網站上學到很多。 最近有一個製作查詢零件價格的表格需求 型號標示如:XXX-a-b-c-d 價格是依a跟b的尺寸作區分,c跟d的尺寸不影響價格 a b 價格 1 1~50 100 1 51~100 200 2 1~50 300 2 51~100 400 請問有辦法只要符合前半型號如輸入XXX-1-20-5-10,就查詢出價格為100元嗎?
請參考:https://isvincent.pixnet.net/blog/post/49524661
對這MATCH(1,(零件編號=A22)*(外形=B22)*(尺寸=C22),0)段公式中的" 1 "不解其意。且與MATCH(lookup_value, lookup_array, [match_type]) 的語法 "lookup_value:在 lookup_array 中尋找比對的值"不同,可否解釋一下。 第一次在您部落格留言,謝謝!
請參考:https://isvincent.pixnet.net/blog/post/49618407
非常謝謝,完全了解了。
謝謝你光臨我的教學網站。