EXCEL破冰 - 如何為透視表組織資料

wait4friend發表於2018-05-11

背景

我會把一些原來部落格中比較好的文章轉移到這裡來。

EXCEL用於日常資料分析的工具中,最便利並且最強大的莫屬透視表了。因為透視表對原始資料有一定的要求,所以本次的破冰之旅也將把焦點放在如何整理基礎資料這個方面。

1.1 初識透視表

如果有人告訴你,下面這兩個看起來很高大上的報表,其實只需要在EXCEL裡面用滑鼠點幾下就完成了。你是不是就已經感受到透視表的強大了?

clip_image002[4]

clip_image004[4]

1.2 透視表的資料要求

其實資料透視表對原始資料的要求並不苛刻,只要不是奇形怪狀的資料就已經滿足要求了。比如剛才的兩個透視表,原始資料片段如下圖。

clip_image006[4]

簡單的說,原始資料在格式上需要滿足:

Ø 第一行必須是標題,且不能有空白標題或重複標題;

Ø 單元格格式正確,特別是日期和數字,不能用文字型別替代;

Ø 橫平豎直,不能有合併單元格等異形樣式;

Ø 一般情況下,所有資料都包含在一個工作表內;且使用簡單的一維表格式;

那麼,如果你的原始資料不滿足上面的要求,就需要進行一些轉換。下面,我們就介紹一些常用的資料轉換方法。

2 格式化時間

使用Excel處理資料的一個基本原則是,“單元格格式正確”。當我們需要分析的資料中包括日期或者時間的時候,這個原則尤其重要,一定不要使用文字或者數字格式來替代。因為Excel內部提供了很多針對日期的函式,可以極大的簡化資料分析工作。但是,如果我們用了文字格式來儲存日期,那麼這些函式將無法使用。

clip_image008[4]

理想是豐滿的,現實是骨感的。在我們處理資料的過程中,大量的原始資料因為各種各樣奇葩的原因,選擇了用文字或者數字的方式儲存日期資料。常見的幾種格式如下圖所示:

clip_image010[4]

2.1 資料分列

如果只是需要對日期部分進行格式化,那簡單的資料分列功能就可以實現我們的需求。在選中原始資料列的前提下,依次點選資料 – 分列 – 分隔符號 – 下一步,如下圖:

clip_image012[4]

在文字分列嚮導第3步,選中日期YMD格式,然後點選完成,如下圖:

clip_image014[4]

最終結果已經成功轉換為日期格式,如下圖:

clip_image016[4]

2.2 公式轉換

資料分列的方法,僅能處理日期格式的資料。如果我們需要格式化日期時間的資料,可以使用公式來實現格式化。下面是一個常用的公式,可以把yyyymmddhhmiss格式的原始文字(或科學計數法)轉換成yyyy-mm-dd hh:mi:ss日期時間格式,效果如下圖:

=TEXT(G2,"0000-00-00 00!:00!:00")+0

clip_image018[4]

為了能夠正確的顯示日期時間格式,還需要把單元格的格式設定成我們需要的日期時間格式,如下圖:

clip_image020[4]

3 拆分合並單元格

有時候,資料錄入人員為了視覺效果會進行單元格的合併。這種合併過的資料表格,是沒辦法直接用來生成資料透視表的。

clip_image022[4]

如上圖,左邊的業務員欄位進行了合併單元格處理,我們必須把這個欄位轉換成右邊這種格式才方便進行進一步分析。

怎麼破?難道取消合併單元格後一個一個的拷貝嗎?當然不用,只需要簡單幾個操作,就能實現這個要求。

在保證G列(業務員欄位)被選中的前提下,依次點選開始 – 取消單元格合併,如下圖

clip_image024[4]

取消單元格合併之後的資料如下圖,每個業務員的名字僅在第一行內出現,其他行是空白。

clip_image026[4]

在保證G列(業務員欄位)被選中的前提下,按快捷鍵F5,彈出“定位”視窗,點選“定位條件。。。”按鈕,在彈出的視窗中,依次點選空值 – 確定,如下圖

clip_image028[4]

不要點選任何其他地方,直接在公式編輯框裡面輸入G3單元格的公式 =G2,最關鍵的步驟,同時按下 Ctrl + Enter,如下圖

clip_image030[4]

空白單元格自動複製了對應的資料。如下圖,完成資料轉換。

clip_image032[4]

4 查詢單個值(VLOOKUP函式)

有如下圖的原始訂單資訊,以及業務人員的ID/名稱對應關係表。

clip_image034[4]

希望得到下圖的結果,要求是:

1) 根據業務員ID查詢對應的名字;

2) 把銷售金額進行分段標示;

clip_image036[4]

這樣的需求,可不能傻乎乎的一個一個人肉查詢替換。用一個函式簡單搞定。

VLOOKUP是一個查詢函式,給定一個查詢的目標,它就能從指定的查詢區域中查詢返回想要查詢到的值。它的基本語法為:

VLOOKUP(查詢目標,查詢範圍,返回值的列數,精確OR模糊查詢)

4.1 精確查詢

如圖,實現對業務員ID和名稱的精確查詢

clip_image038[4]

公式C2=VLOOKUP(B2,$J$1:$K$4,2,0)

引數說明:

Ø 查詢目標VLOOKUP(B2,$J$1:$K$4,2,0):就是你指定的查詢的內容或單元格引用。圖中B列的業務員ID就是查詢目標。我們要根據“業務員ID”在J列進行查詢。

Ø 查詢範圍VLOOKUP(B2,$J$1:$K$4,2,0):指定了查詢目標,如果沒有說從哪裡查詢,EXCEL肯定會很為難。所以下一步我們就要指定從哪個範圍中進行查詢。VLOOKUP的這第二個引數可以從一個單元格區域中查詢,也可以從一個常量陣列或記憶體陣列中查詢。本例中要在J1:K4這個區域中進行查詢,並且使用了$J$1這樣的絕對引用方式,保證公式在縱向進行復制的時候保持不變。

Ø 返回值的列數VLOOKUP(B2,$J$1:$K$4,2,0):這是VLOOKUP第3個引數。它是一個整數值。它怎麼得來的呢。它是“返回值”在第二個引數給定的區域中的列數。本例中我們要返回的是“業務員”,它是第二個引數查詢範圍J1:K4的第2列。這裡一定要注意,列數不是在工作表中的列數(不是第K列),而是在查詢範圍區域的第幾列。

Ø 精確OR模糊查詢VLOOKUP(B2,$J$1:$K$4,2,0):,最後一個引數是決定函式精確和模糊查詢的關鍵。精確即完全一樣,模糊即包含的意思。引數如果指定值是0或FALSE就表示精確查詢,而值為1 或TRUE時則表示模糊。

4.2 模糊查詢

模糊查詢最主要的一個場景是,對金額這一類的資料進行分段。如下圖,要把銷售金額分成幾個區間,然後對區間內的資料進行彙總。

clip_image040[4]

公式E2=VLOOKUP(D2,$M$1:$N$6,2,1)。

最後一個引數指定為1 或TRUE時表示模糊查詢。

重要:在進行模糊查詢時,查詢範圍必須進行升序排列。

5 查詢多個值(JOIN操作)

如下圖,原始資料存放在兩個sheet裡面。左邊的是訂單資料,只記錄了產品ID;右邊的是產品資訊,包含了產品的詳細資訊。

clip_image042[4]

現在想得到如下圖的結果,即兩個sheet的資料組合在一起,把產品的詳細資訊追加在訂單資訊之後。如果是在資料庫裡面用SQL語句,這個是很簡單的任務,但是如果是在Excel裡面又如何實現?

clip_image044[4]

5.1 VLOOKUP的擴充套件

回憶一下VLOOKUP函式的第三個引數是什麼?第三個引數是“返回值在查詢範圍內的列數”。

一般情況下,我們用一個固定的數字來指定這個列數。但是在我們這個案例中,如果用固定數字的話,就需要編寫多個VLOOKUP函式才能返回多個值。有沒有變通的辦法,只寫一次公式?有,具體思路是用變數代替常量。

clip_image046[4]

如上圖,獲得產品名稱的公式寫成這樣D2=VLOOKUP($B2,join_2!$A$1:$C$6,COLUMN(B1),0)

上述公式的兩個變動,解釋如下

Ø $B2是查詢目標(產品ID),因為這個公式要在橫向和縱向都進行復制,所以用了$符號指定B列的絕對引用,表示在橫向複製的時候B列引用不變;

Ø COLUMN函式用於返回指定的列數,因為產品名稱在查詢範圍的B列(第2列),所以用B1來指示。當進行橫向複製的時候,這個相對引用會自適應變化;

把D2的函式公式進行橫向和縱向複製之後,結果如下,滿足了這個案例的需求。

clip_image048[4]

5.2 Microsoft Query

剛才的辦法很好很強大,但是有點麻煩並且不夠靈活,有沒有更方便的辦法?既然這樣問,那就肯定是有的啦。一個可能你沒有聽說過,但是非常強大的EXCEL功能,名字就很高大上。Microsoft Query,主要作用就是在EXCEL裡面實現SQL語句的功能。

這個功能藏在哪裡?請按圖索驥,依次點選:資料 –- 自其他來源 – 來自Microsoft Query

clip_image050[4]

在彈出的視窗中選擇Excel作為資料來源,如圖依次點選:Excel Files* -- 確定

clip_image052[4]

在彈出的視窗中選擇包含了原始資料的Excel檔案,然後確定

clip_image054[4]

在彈出的視窗中,依次把包含原始資料(訂單資訊,產品資訊)的sheet新增到查詢中,如下圖。

clip_image056[4]

把兩個sheet都新增完成後,點選關閉按鈕,如下圖

clip_image058[4]

訂單資訊和產品資訊,是通過產品ID來進行關聯的,所以我們把這兩個欄位關聯起來。先選擇左邊的“產品ID”然後拖到右邊的“產品ID”上,如下圖

clip_image060[4]

把我們需要保留的欄位拖到下面的視窗,這個例子中,我們選擇左邊的所有欄位,和右邊的產品名稱和單價欄位,完成之後如下圖

clip_image062[4]

這裡可以對join進行調整,EXCEL提供了left join, right join, inner join 三種連線模式。本例中使用的是預設的inner join模式。查詢完成之後,可以選擇把查詢結果返回Excel中,操作如下圖:

clip_image064[4]

clip_image066[4]

新工作表的內容如下圖:

clip_image067[4]

6 多維錶轉換一維表

資料錄入人員很多時候為了視覺效果,會使用二維/多維結構的資料表格。這種格式的資料,肉眼看起來比較清晰,但是不利於進一步資料處理。如下圖,業務人員錄入的多個運營商提供的不同套餐在不同地區的費率資訊表。

clip_image069[4]

上圖的多維表必須轉換成簡單的一維表,才能用於後續的資料處理中。一維表格式如下圖:

clip_image071[4]

資料量比較大的時候,人肉拷貝耗時耗力,這個時候就要用下面介紹的“多重合並計算資料區域”技巧來實現自動轉換了。

依次按下組合鍵 Alt + D + P,開啟資料透視表嚮導。然後選中“多重合並計算資料區域”,如下圖

clip_image073[4]

接下來選中“自定義頁欄位”,如下圖

clip_image075[4]

在嚮導第三步中,依次進行這些操作:選定區域(選中具體資料部分) – 新增(把選定區域新增到所有區域) -- 設定頁欄位數目為1 – 給這個區域設定頁欄位為“移動”,如下圖:

clip_image077[4]

重複上面的步驟,把其他兩部分原始資料都加入,並且分別設定頁欄位為“聯通”和“電信” ,如下圖

clip_image079[4]

選擇在新工作表中生成一個資料透視表,如下圖

clip_image081[4]

新生成的資料透視表如下圖。如果對透視表的結構進行一下調整,看起來就更像是原始資料的結構了。最關鍵的步驟,雙擊紅色的總計單元格,如下圖:

clip_image083[4]或者

clip_image085[4]

雙擊總計單元格之後,會在新的工作表中生成一維表的資料,對錶頭內容和位置進行調整之後,就得到我們需要的最終格式。

clip_image087[4]

7 參考資料

《Excel 2010資料透視表應用大全》item.jd.com/11154634.ht…

《誰說菜鳥不會資料分析》item.jd.com/11123672.ht…


相關文章