跳到主要內容

自動建立樞紐分析表


樞紐分析表(PivotTable)是交叉分析的好幫手,還可以深入分析(drill-down)與彙總(roll-up)各個維度的資料。建立樞紐分析表也很容易,但有時候應用程式仍然有自動建立樞紐分析表的需求,Excel VBA 建立樞紐分析表的方式之一就是用 Worksheet.PivotTableWizard 方法。以Office範本藝廊的銷售員樞紐分析表來源資料為例:

ActiveSheet.PivotTableWizard xlDatabase, Range(“A1:E800”), Range(“G3”)

即可產生樞紐分析表。如果沒有指定位置(TableDestination)的話,會放在 ActiveCell,如果也沒有 ActiveCell 的話,會放在新的工作表。

樞紐分析表會被加到 PivotTables 集合物件中,可經由 Worksheet.PivotTables 方法取得,例如:

For Each oPvtTable In ActiveSheet.PivotTables
  oPvtTable.TableRange2.Clear
Next


會清除工作表內所有的樞紐分析表[1]

應用程式也可以設定樞紐分析表的屬性,例如透過欄位清單(PivotFields)設定欄位方向(XlPivotFieldOrientation):

Set oPvtTable = ActiveSheet.PivotTableWizard(xlDatabase, Range("A1:E800"))
oPvtTable.PivotFields("國家").Orientation = xl xlPageField
oPvtTable.PivotFields("銷售員").Orientation = xlRowField
oPvtTable.PivotFields("訂單金額").Orientation = xlDataField


此外,Worksheet.PivotTableWizard 可以從不同的資料來源(XlPivotTableSourceType)建立樞紐分析表,以Access 範本資料庫 Northwind.mdb 為例,比照其銷售分析表單建立樞紐分析表:

sQuery = "SELECT 員工.行政區, 員工.姓名, 員工.名" _
  &", 訂貨主檔.送貨日期, 訂貨主檔.訂單號碼" _
  &", 訂貨小計.小計 AS 銷售量, 員工.行政區" _
  &" FROM 員工 INNER JOIN (訂貨主檔 INNER JOIN 訂貨小計" _
  &" ON 訂貨主檔.訂單號碼 = 訂貨小計.訂單號碼)" _
  &" ON 員工.員工編號 = 訂貨主檔.員工編號;"


Set oPvtTable = ActiveSheet.PivotTableWizard(SourceType:=xlExternal _
  ,SourceData:=StringToArray(sQuery) _
  ,Connection:="ODBC;Driver={Microsoft Access Driver (*.mdb)}" _
  &";Dbq=Northwind.mdb;Uid=Admin;Pwd=;")


其中 SourceData 須為字串陣列(an array of strings),且每個字串須少於255個字元,因此用 StringToArray 函數[2]加以轉換;Connection 為 ODBC 連接字串[3]Worksheet.PivotTableWizard 支援 ODBC,但不支援 OLE DB。

[1] http://www.mrexcel.com/forum/excel-questions/518955-visual-basic-applications-delete-pivot-table.html
[2] http://support.microsoft.com/kb/213841/zh-tw
[3] https://www.connectionstrings.com/microsoft-access-odbc-driver/

留言

這個網誌中的熱門文章

WSL 換一種方式安裝

WSL(Windows Subsystem for Linux)的安裝雖然只有一行指令,不過它預設會進行兩個階段的安裝,第一階段會先安裝 WSL 環境,第二階段則會在裡面安裝 Linux 發佈(distribution),是的,”發佈”在這裡就是版本的意思,Windows 有家用版、專業版、伺服器版,Linux 也有不同的發佈,第二階段可以在第一階段安裝的 WSL 環境裡面安裝多個 Linux 發佈(版本),這個後面再說。在 Windows 命令列視窗(命令提示字元或 PowerShell)下達: wsl --list --online 即可列出 WSL 有那些 Linux 版本可以安裝,預設會從 Microsoft Store 下載,如果不順利的話可以換個方式,下達: wsl --install --web-download 即可改由 GitHub 下載進行安裝。預設會安裝 Ubuntu Linux,如果不順利的話可以明確指定要安裝的 Linux 版本,下達: wsl --install --web-download -d Ubuntu 即可明確指定安裝 Ubuntu Linux, 前面 介紹過安裝完成預設就會切換到 Linux 命令列視窗,此外,Windows 應用程式列表中也會出現一個 Ubuntu 項目,用來切換至 Ubuntu Linux 環境,另外,檔案總管也會出現 Linux/Ubuntu 項目,以便從 Windows 環境存取 Ubuntu Linux 環境下的檔案。要移除、安裝其它 Linux 版本,或是安裝多個 Linux 版本可以繼續下一篇  WSL 安裝不同的 Linux 版本 。

WSL 與檔案存取

WSL(Windows Subsystem for Linux)提供雙向檔案存取,可以從 Windows 環境存取 Linux 環境的檔案,也可以從 Linux 環境存取 Windows 環境的檔案,在 Windows 執行框或是檔案總管的網址列下達: \\wsl$ 即可存取 WSL 共用資料夾(以及裡面各版本 Linux 環境的檔案)。 前面 介紹過 Linux 版本安裝完成後,檔案總管也會出現該 Linux 版本的項目,以便從 Windows 環境存取 Linux 環境的檔案,這些項目也是經由 Windows UNC 路徑進行存取,在 Linux 命令列視窗下達: explorer.exe . 即可開啟目前所在資料夾的 Windows UNC 路徑。另外,Linux 環境中只要認得檔案系統,都可以掛載進來使用,在 Linux 命令列視窗下達: mount 即可發現 Windows 磁碟機(C:)已經掛載至 Linux 環境裡的 /mnt/c 直接當一般的資料夾存取就可以。