和工作表函數VLOOKUP有什么差異?
在Excel中要比對兩列數據,我們最常用的是vlookup函數,估計很多人已經對這個函數用得滾瓜爛熟了。
既然vlookup函數如此好用,又有什么理由去用PowerQuery呢?
且聽我慢慢道來。
如果只是偶爾一次的數據比對,請用vlookup函數最常見的是偶爾比對一下班級中有哪些學員沒報名參加某活動,或比對同一個客戶是否在多個表中出現。
在這種情況下,比對只是偶爾發生。很顯然,用vlookup函數是最簡單最快捷的。
如果經常需要比對數據,請用PowerQuery來比對比如每天都要比對兩個表乃至N個表,或者每周都要比對,這種重復工作就交給PowerQuery來處理好了。
如果原始數據非常重要,需要盡量保證無損操作,還是建議用PowerQuery有時候原始數據太重要,我們要避免對原始數據的任何有損操作,以免誤操作之后破壞了原始數據,那么,我還是建議用PowerQuery,因為PowerQuery可以對原始數據進行無損操作——連它所在的位置都不用動一分一毫,更不用說直接在它上面進行有損操作了。
當然,用vlookup函數也能進行無損操作,比如復制原始數據到新的文件,或用公式引用原始數據文件的內容到新的文件,但操作起來比較復雜。
一個PowerQuery比對數據的例子由于vlookup的教程實在太多,我就不再拾人牙慧重復一遍了。直接給出一個PowerQuery比對數據的例子。
假設:我們有一份《班級學員名單》,
班級學員表名單
還有一份《報名表》,
報名表
這是兩個獨立的Excel文件,分別放在不同文件夾下。
需求是找到哪些班級學員還沒報名,并且,把《報名表》里不是本班的人標記出來進行下一步處理。
首先,分別引入《班級學員表》和《報名表》兩個Excel文件到PowerQuery。
操作:新建一個Excel文件,目的是不對原始文件本身進行任何改動。然后在Excel中點擊【數據】選項卡,選擇【新建查詢】-【從文件夾】-【從工作簿】引入原始文件。
在彈出窗口中找到需要引入的《班級學員表》,然后直接點“編輯”,
對它進行簡單操作:在“查詢設置”的“屬性”下修改“名稱”為“班級學員表“,免得和后面引入的報名表搞混;并將第一行提升為標題。
同樣的操作,引入《報名表》。最后結果類似于下面這樣:
PowerQuery中處理兩個表格數據比對的思路。
當我們對兩個表格進行數據比對時,可以把這兩個表格看作兩個集合,這樣,對兩個表格的比較就變成尋找兩個集合的關系:
我們把班級學員名單想象為左邊的綠色部分,報名表想象為放在右邊的藍色部分,這樣,沒報名的學員,我們可以簡單理解我們能看得見的綠色部分。在PowerQuery中,用Table.NestedJion()函數的"JoinKind.LeftAnti"參數來表示這種關系。
新建一個空白查詢,直接輸入下面的代碼即可得到未報名的學員:
= Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.LeftAnti)
那么,反過來,Table.NestedJion()函數的"JoinKind.RightAnti"就表示只存在于右邊表(報名表)的元素:
= Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.RightAnti)
其實,我們可以通過變換【= Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.LeftAnti)】中“班級學員表”和“報名表”的位置,就直接得出了不在班級學員表中的報名人員:
= Table.NestedJoin(報名表,{"姓名"},班級學員表,{"姓名"},"報名表",JoinKind.LeftAnti)
加載數據到Excel表格。
接下來把生成的結果加載到Excel表格,選中要加載的查詢,點擊“加載到”按鈕,
在彈出窗口中選擇加載到“表”:
然后再重命名下加載數據的sheet名稱,免得搞混,即完成。
辛苦了一次,怎么終生輕松呢?
用PowerQuery處理表格數據比對的最大理由是可以辛苦一次,終生輕松,這樣遇到同樣的比對工作,就不用重復的步驟走了一遍又一遍了。
假設我這個比對工作要天天做、周周做、月月做。
現在我完成了今天的比對工作。
明天,新的報名表來了,我要怎么做呢?
我只需要把今天的報名表刪除,把明天的報名表放到同樣的位置(比如桌面),然后打開我剛才建立好的模型文件,刷新一下即可:
而班級學員表因為不會經常變動,所以我根本不用管它,保持在原位即可。就算有新增班級學員,我編輯該文件將其新增進去即可。
甚至還有更簡單的辦法:如果我有很多班級和報名表,每個班有個單獨的文件夾,下面有班級學員表和報名表,我只需要借助PowerQuery的參數表格結合Excel的Cell()函數,建立來自于文件夾的數據源。
然后,每次需要某個班級的最新結果,就把該模型文件丟到該班級所在的文件夾,打開刷新,即可獲取到最新結果。
結語如果只是偶爾比對一下數據,直接用vlookup函數,便宜又實惠;如果經常要比對數據,那么可以試試看“辛苦一次,終生輕松”的PowerQuery大法。
當然,PowerQuery還有很多很多絕技。
有興趣的不妨試試看,如果您嘗試過程中遇到問題,請隨時留言。