給妳個例子
=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)
之後,再同時按Ctrl+Shift+Enter組合鍵結束。
公式解釋:
①VLOOKUP的解釋
VLOOKUP函數,使用中文描述語法,可以這樣來理解。
VLOOKUP(查找值,在哪裏找,找到了返回第幾列的數據,邏輯值),其中,邏輯值為True或False。
再對比如上的公式,我們不能發現。
A2&B2相當於要查找的值。等同於A2和B2兩個內容連接起來所構成的結果。所以為A2&B2,理解為A2合上B2的意思。
IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相當於要查找的數據
2代表返回第二列的數據。最後壹個是False。
②IF({1,0}的解釋
剛才我們說了,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相當於VLOOKUP函數中的查找數據的範圍。
由於本例子的功能是,根據Sheet1中的A列數據和B列數據,兩個條件,去Sheet2中查找首先找到對應的AB兩列的數據,如果壹致,就返回C列的單價。
因此,數據查找範圍也必須是Sheet2中的AB兩列,這樣才能被找到,由於查找數據的條件是A2&B2兩個單元格的內容,但是此二單元格又是獨立的,因此,要想構造查找範圍,也必須把Sheet2中的AB兩列結合起來,那就構成了Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12;
Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12:相當於AB兩列數據組成壹列數據。
那麽,前面的IF({1,0}代表什麽意思呢?
IF({1,0},相當於IF({True,False},用來構造查找範圍的數據的。最後的Sheet2!$C$2:$C$12也是數據範圍。
現在,整個IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)區域,就形成了壹個數組,裏面存放兩列數據。
第壹列是Sheet2AB兩列數據的結合,第二列數據是Sheet2!$C$2:$C$12。
公式{=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)}中的數字2,代表的是返回數據區域中的第二列數據。結果剛好就是Sheet2的C列,即第三列。因為在IF({1,0}公式中,Sheet2中的AB兩列,已經被合並成為壹列了,所以,Sheet2中的第三列C列,自然就成為序列2的列編號了,所以,完整的公式中,2代表的就是要返回第幾列的數據。
Excel 如何使用VBA實現多條件查找引用使用
for
next
將N個條件用&連接為1個條件,
提高查找速度
如何index和match實現多條件查找1.案列
1.如圖,輸入公式
=INDEX(B2:D8,MATCH(F3&G3,B2:B8&C2:C8,0),MATCH(D1,B1:D1,0))
index函數——返回數據表區域的值或對值的引用(這裏返回價值)
match函數——返回返回目標值在查找區域中的位置(這裏返回行和列)
有關index函數和match函數的詳細用法,可以觀看我的經驗Excel中index函數的使用方法和Excel中match函數的使用方法
2. 因為公式為數組公式,所以要按ctrl+shift+enter。
3. 輸入公式=INDEX($B$2:$D$8,MATCH(F3&G3,$B$2:$B$8&$C$2:$C$8,0),MATCH($D$1,$B$1:$D$1,0))
註意絕對引用和相對引用。否則在下拉復制公式時,會出錯。
2.公式解釋
4.如圖所示,index函數通過在區域B2:D8中查找奔馳方向盤的行號和列號,行號和列號交叉返回的就是要查找的值。
match函數返回行號和列號。
MATCH(F3&G3,B2:B8&C2:C8,0)
公式解釋通過連接符&把奔馳方向盤連接起來,然後返回位置為4。
5. MATCH(D1,B1:D1,0)
公式解釋,返回價值所在的列號。返回3。
如何用EXCEL公式實現多條件精確篩選在數據區域外建立壹個條件區域,以數據區域標題為字段名,然後分別羅列篩選的條件,且的關系在同壹行,或的關系在不同行;然後在“數據”選項下的“高級篩選”中,以“數據區域”為“列表區域”,以條件所在區域為“條件區域”,勾選“將篩選結果復制到其他位置”,並指定壹個具 *** 置為起始位置,確定,即可完成高級篩選。
方法/步驟
1. EXCEL本身提供的精確篩選功能有限,只能按照單元格內容的首字母順序排列或數值大小進行順序排列;本文介紹如何利用IF、AND、OR的組合公式來實現數據的精確篩選
2. IF AND組合公式實現條件篩選:
如圖示列表,有九位同學各自五門課程的成績單,從中篩選出來至少有壹門掛科的同學,公式為: =IF(AND(D2>=60,F2>=60,H2>=60,J2>=60,L2>=60),"全部及格","有掛科")
AND語法為: AND(公式1,公式2,公式3......)
只要小括號內的公式全部滿足,則AND公式整體值為真;否則有任何壹個公式為假,整體值為假;公式之間為邏輯與的關系;
IF語法為: IF(公式,值1,值2)
值1為公式值為真時的輸出值, 值2為公式值為假時的輸出值;
那麽此時公式:=IF(AND(D2>=60,F2>=60,H2>=60,J2>=60,L2>=60),"全部及格","有掛科")
代表D2/F2/H2/J2/L2這5個單元格的值(五門科目得分),全部大於等於60,則為“全部及格”,否則則為“有掛科”
3. IF OR組合公式實現條件篩選:
如圖示列表,九位同學各自五門課程的成績單,從中篩選出來至少有壹門成績優異的同學,公式為: =IF(OR(D2>=95,F2>=95,H2>=95,J2>=95,L2>=95),"有特長科目","無突出科目")
OR語法為:OR(公式1,公式2,公式3......)
只要小括號內的公式有壹個滿足,則OR公式整體值為真;當全部公式值為假時,整體值為假;公式之間為邏輯或的關系;
IF語法為: IF(公式,值1,值2)
值1為公式值為真時的輸出值, 值2為公式值為假時的輸出值;
那麽此時公式:=IF(OR(D2>=95,F2>=95,H2>=95,J2>=95,L2>=95),"有特長科目","無突出科目")
代表D2/F2/H2/J2/L2這5個單元格的值(五門科目得分),只要有壹門成績大於95,則證明該同學,“有特長科目”,否則則為“無突出科目”
4. IF AND OR 組合公式實現條件篩選:
如圖示列表,九位同學各自五門課程的成績單,從中篩選出來至少有壹門成績不及格而同時有至少壹門成績優異的”偏科“同學:公式為: =IF(AND(OR(D2<=60,F2<=60,H2<=60,J2<=60,L2<=60),OR(D2>=95,F2>=95,H2>=95,J2>=95,L2>=95)),"偏科","均衡")
AND語法為: AND(公式1,公式2,公式3......)
只要小括號內的公式全部滿足,則AND公式整體值為真;否則有任何壹個公式為假,整體值為假;公式之間為邏輯與的關系;
OR語法為:OR(公式1,公式2,公式3......)
只要小括號內的公式有壹個滿足,則OR公式整體值為真;當全部公式值為假時,整體值為假;公式之間為邏輯或的關系;
IF語法為: IF(公式,值1,值2)
值1為公式值為真時的輸出值, 值2為公式值為假時的輸出值;
那麽此時公式:=IF(AND(OR(D2<=60,F2<=60,H2<=60,J2<=60,L2<=60),OR(D2>=95,F2>=95,H2>=95,J2>=95,L2>=95)),"偏科","均衡")
首先,OR(D2<=60,F2<=60,H2<=60,J2<=60,L2<=60),D2/F2/H2/J2/L2這5個單元格的值(五門科目得分),只要有壹門成績小於60,則OR值為真;
其次,OR(D2>=95,F2>=95,H2>=95,J2>=95,L2>=95),D2/F2/H2/J2/L2這5個單元格的值(五門科目得分),只要有壹門成績大於95,則OR值為真;
AND (OR公式1,OR公式2)則表示,該同學各科目成績,必須同時滿足這兩個OR公式,即有壹門成績小於60的同時有壹門成績大於95,此時我們使用IF語句定義該同學為"偏科”
求助,如何用VBA實現多條件查詢算法與數據量、數據類型和特殊要求有關,壹般可以考慮使用字典對象,字典查詢算法最簡單、速度很快。字典實現多條件查詢有兩個套路,壹是建立聯合索引,KEY1|KEY2|KEY3->VALUE的數據結構;二是使用多層字典KEY1->KEY2->KEY3->VALUE
Excel VLOOKUP函數怎麽實現多條件查找VLOOKUP函數
在表格或數值數組的首列查找指定的數值,並由此返回表格或數組中該數值所在行中指定列處的數值。
這裏所說的“數組”,可以理解為表格中的壹個區域。數組的列序號:數組的“首列”,就是這個區域的第壹縱列,此列右邊依次為第2列、3列……。假定某數組區域為B2:E10,那麽,B2:B10為第1列、C2:C10為第2列……。
語法:
VLOOKUP(查找值,區域,列序號,邏輯值)
“查找值”:為需要在數組第壹列中查找的數值,它可以是數值、引用或文字符串。
“區域”:數組所在的區域,如“B2:E10”,也可以使用對區域或區域名稱的引用,例如數據庫或數據清單。
“列序號”:即希望區域(數組)中待返回的匹配值的列序號,為1時,返回第壹列中的數值,為2時,返回第二列中的數值,以此類推;若列序號小於1,函數VLOOKUP 返回錯誤值 #VALUE!;如果大於區域的列數,函數VLOOKUP返回錯誤值 #REF!。
“邏輯值”:為TRUE或FALSE。它指明函數 VLOOKUP 返回時是精確匹配還是近似匹配。如果為 TRUE 或省略,則返回近似匹配值,也就是說,如果找不到精確匹配值,則返回小於“查找值”的最大數值;如果“邏輯值”為FALSE,函數 VLOOKUP 將返回精確匹配值。如果找不到,則返回錯誤值 #N/A。如果“查找值”為文本時,“邏輯值”壹般應為 FALSE 。另外:
·如果“查找值”小於“區域”第壹列中的最小數值,函數 VLOOKUP 返回錯誤值 #N/A。
·如果函數 VLOOKUP 找不到“查找值” 且“邏輯值”為 FALSE,函數 VLOOKUP 返回錯誤值 #N/A。
下面舉例說明VLOOKUP函數的使用方法。
假設在Sheet1中存放小麥、水稻、玉米、花生等若幹農產品的銷售單價:
A B
1 農產品名稱 單價
2 小麥 0.56
3 水稻 0.48
4 玉米 0.39
5 花生 0.51
…………………………………
100 大豆 0.45
Sheet2為銷售清單,每次填寫的清單內容不盡相同:要求在Sheet2中輸入農產品名稱、數量後,根據Sheet1的數據,自動生成單價和銷售額。設下表為Sheet2:
A B C D
1 農產品名稱 數量 單價 金額
2 水稻 1000 0.48 480
3 玉米 2000 0.39 780
…………………………………………………
在D2單元格裏輸入公式:
=C2*B2 ;
在C2單元格裏輸入公式:
=VLOOKUP(A2,Sheet1!A2:B100,2,FALSE) 。
如用語言來表述,就是:在Sheet1表A2:B100區域的第壹列查找Sheet2表單元格A2的值,查到後,返回這壹行第2列的值。
這樣,當Sheet2表A2單元格裏輸入的名稱改變後,C2裏的單價就會自動跟著變化。當然,如Sheet1中的單價值發生變化,Sheet2中相應的數值也會跟著變化。
其他單元格的公式,可采用填充的辦法寫入。
VLOOKUP函數使用註意事項
說到VLOOKUP函數,相信大家都會使用,而且都使用得很熟練了。不過,有幾個細節問題,大家在使用時還是留心壹下的好。
壹.VLOOKUP的語法
VLOOKUP函數的完整語法是這樣的:
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
1.括號裏有四個參數,是必需的。最後壹個參數range_lookup是個邏輯值,我們常常輸入壹個0字,或者False;其實也可以輸入壹個1字,或者true。兩者有什麽區別呢?前者表示的是完整尋找,找不到就傳回錯誤值#N/A;後者先是找壹模壹樣的,找不到再去找很接近的值,還找不到也只好傳回錯誤值#N/A。這對我們其實也沒有什麽實際意義,只是滿足好奇而已,有興趣的朋友可以去體驗體驗。
2.Lookup_value是壹個很重要的參數,它可以是數值、文字字符串、或參照地址。我們常常用的是參照地址。用這個參數時,有兩點要特別提醒:
A)參照地址的單元格格式類別與去搜尋的單元格格式的類別要壹致,否則的話有時明明看到有資料,就是抓不過來。特別是參照地址的值是數字時,最為明顯,若搜尋的單元格格式類別為文字,雖然看起來都是123,但是就是抓不出東西來的。
而且格式類別在未輸入數據時就要先確定好,如果數據都輸入進去了,發現格式不符,已為時已晚,若還想去抓,則需重新輸入。
B)第二點提醒的,是使用時壹個方便實用的小技巧,相信不少人早就知道了的。我們在使用參照地址時,有時需要將lookup_value的值固定在壹個格子內,而又要使用下拉方式(或復制)將函數添加到新的單元格中去,這裏就要用到“$”這個符號了,這是壹個起固定作用的符號。比如說我始終想以D5格式來抓數據,則可以把D5弄成這樣:$D$5,則不論妳如何拉、復制,函數始終都會以D5的值來抓數據。
3.Table_array是搜尋的範圍,col_index_num是範圍內的欄數。Col_index_num 不能小於1,其實等於1也沒有什麽實際用的。如果出現壹個這樣的錯誤的值#REF!,則可能是col_index_num的值超過範圍的總字段數。
二.VLOOKUP的錯誤值處理。
我們都知道,如果找不到數據,函數總會傳回壹個這樣的錯誤值#N/A,這錯誤值其實也很有用的。比方說,如果我們想這樣來作處理:如果找到的話,就傳回相應的值,如果找不到的話,我就自動設定它的值等於0,那函數就可以寫成這樣:
=if(iserror(vlookup(1,2,3,0))=true,0,vlookup(1,2,3,0))
這句話的意思是這樣的:如果VLOOKUP函數返回的值是個錯誤值的話(找不到數據),就等於0,否則,就等於VLOOKUP函數返回的值(即找到的相應的值)。
這裏面又用了兩個函數。
第壹個是iserror函數。它的語法是iserror(value),即判斷括號內的值是否為錯誤值,如果是,就等於true,不是,就等於false。
第二個是if函數,這也是壹個常用的函數的,後面有機會再跟大家詳細講解。它的語法是if(條件判斷式,結果1,結果2)。如果條件判斷式是對的,就執行結果1,否則就執行結果2。舉個例子:=if(D2=””,”空的”,”有東西”),意思是如D2這個格子裏是空的值,就顯示文字“空的”,否則,就顯示“有東西”。(看起來簡單吧?其實編程序,也就是這樣子判斷來判斷去的。)
三.含有VLOOKUP函數的工作表檔案的處理。
壹般來說,含有VLOOKUP函數的工作表,如果又是在別的檔案裏抓取數據的話,檔案往往是比較大的。尤其是當妳使用的檔案本身就很大的時候,那每次開啟和存盤都是很受傷的事情。
有沒有辦法把文件壓縮壹下,加快開啟和存盤的速度呢。這裏提供壹個小小的經驗。
在工作表裏,點擊工具——選項——計算,把上面的更新遠程參照和儲存外部連結的勾去掉,再保存檔案,則會加速不少,不信妳可以試試。
下面詳細的說壹下它的原理。
1.含有VLOOKUP函數的工作表,每次在保存檔案時,會同時保存壹份其外部連結的檔案。這樣即使在單獨打開這個工作表時,VLOOKUP函數壹樣可以抓取到數值。
2.在工作表打開時,微軟會提示妳,是否要更新遠程參照。意思是說,妳要不要連接最新的外部檔案,好讓妳的VLOOKUP函數抓到最新的值。如果妳有足夠的耐心,不妨試試。
3.了解到這點,我們應該知道,每次單獨打開含有VLOOKUP函數的工作表時,裏面抓取外部檔案的數值,只是上次我們存盤時保存的值。若要連結最新的值,必須要把外部檔案同時打開。
VLOOKUP函數我所了解的,也只是這些,大家有什麽好的經驗或有什麽疑問,歡迎大家提出,壹起探討。