前兩天我寫過一個帖子,討論Excel表格中,要計算的數據的多個欄位在同一個單元格裡,該如何處理,詳見《Excel中,銷售數據都在一個單元格裡,該如何統計計算?》。
在另一篇帖子中,我還用小學生都會的Excel公式分步驟地解決了這個難題,詳見《Excel公式越複雜越好?這是很多小白都會犯的一個錯誤》。
但是今天遇到的這個例子的需求是相反的:如何把分散在Excel表格不同行的數據按照一定規則合併到同一個單元格。
我們以班級學生為例:
很簡單的一個需求:每個班有幾十名學生,按照規範的Excel數據表格形式填寫好了,現在要列印班級學生名單,如果按照左邊的表格列印,就太浪費紙張了,一點都不環保,我們需要把同一個班的學生合併到一個單元格,然後進行列印,就像右表中的那樣。
企業中的話,也會經常遇到要把規範的部門成員表格列印出名單來,也要用到同樣的思路。
如果是多個活動的報名表,同樣有類似的需求。
既然需求場景這麼多,那麼,如何快速將左表變為右表呢?
抱歉這次我給不出Excel公式了(因為我沒找到),有知道的小夥伴麻煩補充下,謝謝。
解決這個問題的最佳工具,我認為還是我最心愛的PowerQuery。而且它的解決方法也非常優雅,就一行(假設數據源已經引入PowerQuery了):
= Table.Group(源, {"班級"}, {{"學生", each Text.Combine(_[學生],",")}})
如果把上述公式抽象下,就是:把【班級】換成你的班級所在列、部門所在列、單位所在列,品類所在列、類別所在列,等等之類;把【學生】換成你要合併的數據所在的列。
01在ExcelPowerQuery中的具體操作步驟
那麼,如何引入源呢?
由於PowerQuery可以引入多種多樣的源,多達100多種,幾乎你能想到的和想不到的源,它都能引入。
我們這次假設就引入來自同一個Excel表格(區域)的數據到PowerQuery的源。
1.在Excel2016及以上版本中,將滑鼠放置在任意一行數據上,點擊【數據】選項卡,選擇【自表格/區域】:
2.這時就PowerQuery就會直接跳轉到查詢編輯頁面,這也意味著我們引入成功了:
3.點擊地址欄的【fx】圖標,新增一個步驟,把我們前面列的公式輸入進去,也可以點擊查詢編輯窗口的【轉換】選項卡,選擇【分組依據】,然後如圖設置:
確定後,再改地址欄中的公式紅框部分為:
Text.Combine(_[學生],",")
因為Table.Group()函數比較複雜,所以剛開始接觸PowerQuery,最好是通過界面來實現分組操作,然後根據需要在PowerQuery自動生成的公式基礎上進行調整。
Table.Group()函數第一個參數是要進行分組的表格名稱(這個例子中叫【源)。
第二個參數是分組依據,就是基於這個列的值進行分組(這個例子中叫【"班級"】),【{}】是PowerQuery中list的符號。
第三個參數具體的分組操作,是一個包含list的list,每一個子list中的第一個參數是列名稱(這個例子中是【"學生"】),之後是一個英文逗號【,】;再之後是一個函數,其中【each】代表要對【"學生"】列的每一行進行同樣的操作,each後面就是具體的操作函數【 Text.Combine(_[學生],",")】,Text.Combine()是將文本用分隔符連接起來,這個例子中我們用的是中文的逗號【,】。
估計很多童鞋看到這裡就已經頭暈得不要不要的了。這是因為您可能對PowerQuery不熟,熟了之後就很容易明白這個分組函數了。
4.分組完畢後,將結果加載到表格就ok了。點擊查詢編輯窗口【主頁】選項卡上的【關閉並上載】按鈕,選擇將結果加載到當前表格空白位置,完成。
5.以後有同樣的數據要合併到同一行,只需要在sheet1中替換掉原始數據,然後點擊【數據】選項卡上的【全部刷新】,最新結果就出來了:
02總結
是不是很簡單?(雖然步驟看起來比較多,這是因為我要詳細演示,其實實際操作第一次就一兩分鐘的事情,以後的數據刷新就是10來秒的事情)
我們舉一反三一下:假設我們要將同一個單元格的數據進行拆分,怎麼辦呢?就拿這個例子中來說,我要把右邊的表格變為左邊的表格,該如何操作呢?
其實也是簡單得不要不要的:在PowerQuery中對右邊表格的【學生】列用【,】拆分列:
PowerQuery會自動找到用於拆分的符號;當原始數據中符號太多的時候,PowerQuery找的可能不符合需要,這時我們可以自己選擇。然後直接點擊確定就行了。PowerQuery會自動幫我們拆分出想要的列數。
接下來選擇【班級】列,然後在【轉換】選項卡,選擇【逆透視】-【逆透視其他列】,就得到了下圖中的表格:
刪除【屬性】列,將【值】列重命名為【學生】列(也可以直接修改Table.UnpivotOtherColumns),就還原成我們最初左邊的表格了。
如果你想提高Excel處理數據的效率,除了保證原始數據規範之外,PowerQuery一定是你提高工作效率、避免996、無休止加班的利器,建議抽點時間結合實際工作需求演練下,很快就能入門,比Excel簡單多了。