逆向查詢 你還不會逆向查詢?這三個小技巧分享給你

2021-10-12 21:44:46 字數 1830 閱讀 7367

作為一名資料分析師,工作中打交道最多的就是資料,大部分都是用excel處理,很早之前覺得資料匹配查詢只用vlookup函式就夠了,但是vlookup函式有個弊端,就是無法反向查詢。

如下圖所示,用姓名去查詢工號,單獨用vlookup函式是無法完成的;

平時遇到這種情況,個人最常用的方法就是將資料來源中的b列姓名複製到a列工號之前,在利用vlookup函式匹配,但是在遇到**資料較多,或者**操作空間較少,這種方法較為耗時,可操作性差。

那麼有其它辦法嗎?下面分享三個可以逆向查詢的小技巧,希望對大家有所幫助!

下圖的示例中,用姓名去匹配個人工號,在f2單元格輸入公式:

=vlookup(e2,if(,b:b,a:a),2,0)
公式下拉,核對資料,可以發現公式可以正確返回結果。

vlookup第二個引數表示要匹配的區域,這裡用if(,b:b,a:a)代替,if函式的引數1是個陣列,其中1代表true,0代表false;

true返回if第二個引數,即b:b列內容,false返回if第三個引數,即a:a列內容,這樣,if(,b:b,a:a)相當於重新組合出乙個虛擬陣列,陣列形式為b(姓名)a(工號),這個虛擬陣列組成vlookup函式的引數2,這樣給vlookup才能返回正確的結果。

小結:

if(,b:b,a:a)構建了乙個虛擬陣列,也就是將查詢列與匹配列正向化,使vlookup功能能夠正常使用。

這裡也可以利用vlookup+choose方法,公式如下:"=choose(,b:b,a:a)",原理同vlookup+if相似,這裡就不在贅述。

這兩個函式組合使用功能還是蠻強大的,容易理解,更方便掌握。

第一步,先找出"小天"在b列中的行位置,f2單元格輸入:"=match(e2,b:b,0)",函式返回5,核對資料來源,小天的確處在b列中的第5行;

=index(a:a,match(e2,b:b,0))
函式返回正確的結果。

注:此法index()有三個引數,這裡只用到前兩個引數,第三個引數忽略。

原則上lookup可以替代vlookup函式,因為lookup函式可以實現vlookup函式的所有功能,只不過vlookup足夠應付大部分的資料匹配被大家熟知。

在f2單元格輸入:

=lookup(1,0/(e2=b:b),a:a)
公式下拉,完成匹配。

公式:lookup(查詢的值,查詢區域,返回區域)

第二個引數"查詢區域"的資料必須按公升序排列,為了解決公升序問題,引入了lookup(0,0/條件,返回區域)來解決這一問題。

覺得麻煩的小夥伴,直接套用公式即可!

以上就是關於excel逆向查詢的三個小技巧,選擇記憶一種方法即可,貴精不貴多,如果覺得有用,歡迎關注我,每日分享資料小技巧!

mysql 三個表連線查詢

許可權表 permission 10 欄位名稱 型別約束 描述authorityid integer pk not null 許可權流水號id pk usernameid intnot null 使用者名稱idfk functionid integer not null 功能 idfk lookpe...

mysql鏈結三個表查詢 Mysql查詢連線三個表

嘗試這個 select a.sales id,d.bus title,s.cat id from tbl sales a inner join tb sales category s on a.sales id s.sales id inner join tbl business d on a.bu...

提高MySQL查詢效率的三個技巧

mysql由於它本身的小巧和操作的高效,在資料庫應用中越來越多的被採用.我在開發乙個p2p應用的時候曾經使用mysql來儲存p2p節點,由於p2p的應用中,結點數動輒上萬個,而且節點變化頻繁,因此一定要保持查詢和插入的高效.以下是我在使用過程中做的提高效率的三個有效的嘗試.使用statement進行...