(有待排版) 利用函數合併多個工作表的內容

(有待排版) 利用函數合併多個工作表的內容

Feb 27, 2024

🔶情境

  • 有數個工作表、每個工作表代表一個月份

  • 每個工作表都記載了不同產品和對應的數值

  • 以最新月份為依據,把每個月份的數據合併在一起(非加總)

  • 最新的月份是在B欄開始排列(倒序)

  • 商品排序亦以最新月份的排序為依據


🔶方法1

前提︰每個月份的工作表名稱是有規律的,例如以合併後的欄標題命名,如「2月份銷售數量」等

  1. 在B2的儲存格輸入下記公式,再拉滿整個範圍便可

=VLOOKUP($A2,INDIRECT("'"&B$1&"'!A:B"),2,0)

🏴 INDIRECT("'"&B$1&"'!A:B")

由於B1的文字與工作表的名稱相同,所以可以直接當成工作表名稱,並同Indirect來連接,出來的效果就是︰'3月份銷售數量'!A:B

※如果工作表的名稱只有月份(3月),那就把B$1改成 SUBSTITUTE(B$1,"份銷售數量","")
利用Substitute,把多餘的文字去除便可以得到只有月份的名字,再用這個名字找到相應的工作表

🏴 VLOOKUP($A2,...,2,0)

把上面的範圍套用在Vlookup裡,便可以得到相應的結果


🔶方法2

前提︰這個方法是考慮到工作表名稱沒有規律,必須強行找出工作表的名字時才使用。
後設︰由於需要用到巨集函數,所以完成後需要用.xlsx(巨集)的方式儲存檔案。

  1. 先選擇公式>(已定義之名稱)定義名稱

  1. 在彈出的視窗裡輸入如下︰

名稱︰可以隨意輸入,會成為函數的名字,為了方便使用,這次會寫作「sheetname」

參照到︰=GET.WORKBOOK(1)

  1. 接下來和方法1的步驟1相同,輸入下記公式︰

=VLOOKUP($A2,INDIRECT("'"&MID(INDEX(sheetname,COUNTA($1:$1)-COLUMN()+1),FIND("]",INDEX(sheetname,COUNTA($1:$1)-COLUMN()+1))+1,255)&"'!A:B"),2,0)

唯一不同的是粗體的部分。

🏴 sheetname

定義名稱後,它可以讀取了這個活頁簿內的所有工作表。

🏴 COUNTA($1:$1)-COLUMN()+1)

由於輸出的欄是倒序(即3月、2月、1月),但工作表是順序(即1月、2月、3月),所以利用了Counta($1:$1),計算標題的數量,減掉儲存格的欄數,再+1(用以補回A欄不是月份的部分)

🏴 INDEX(sheetname,COUNTA...)

得知儲存格的欄數,就可以利用這個數字來找回相應的工作表數值(3月是B欄,即是2,但總欄數是4,4-2+1=3,就代表3月的工作表是第3張工作表),利用Index尋找第3張工作表的名稱。

🏴 FIND("]",...)

由於找出來的結果會把檔案名也一併輸出(即[活頁簿名稱.xlsx]工作表1名稱),所以把上面Index的部分放在Find,再找出「]」的位置

🏴 MID(INDEX(...),FIND(...)+1,255)

再用MID從中間開始擷取工作表名稱,由於要從「]」之後開始數起,所以要在FIND的部份加1來表示「]」之後的字元開始,而255是一個虛數,一般工作表不會有很長的字串。

🏴 VLOOKUP(...)

最後這部分與方法1相當,就是利用VLOOKUP和INDIRECT的方法,找出相應的工作表和對應的數值。


🔶方法3

這個方法是利用了Excel的合併彙算功能,再配合少許函數來輔助的。

  1. 開新的工作表,這個工作表是預備放彙算好的內容

  2. 選取A1(輸出結果的時候就會從A1開始)

  3. 選攝資料>(資料工具)合併彙算

  1. 在參照位址選擇每個工作表的每個範圍,並按下新增
    ※留意工作表的排序是按工作表名稱排序,輸出的時候也會按這個排序欄位

    (所以我的工作表名稱是按欄位排序命名,即是3月=1,2月=2,1月=1)

    不想改變工作表名稱的話,可以在後面的步驟再用排序修改。

    ※加在彙算後才修改工作表名稱的話,由於排序不會改變,也不會有影響。

  1. 由於要用欄標題和列標題計算,所以要勾選頂讀列和最左欄

  1. 按下確定,就會跑出結果

  1. 輸出結果像這樣,會有兩個問題

第一是欄位沒有依計劃,由3月倒序排列,第二是最左欄的商品名並沒有依3月份的排序排序。

先解決第一個問題。(步驟8至13)

  1. 選取B欄至D欄,即是月份的欄位

  1. 選擇常用>(編輯)排序與篩選>自訂排序

  1. 在彈出的視窗裡,按下「選項」

  1. 選取「循列排序」後按確定

  1. 這時候,最左邊的排序方式應該可以選擇「列1」(即是欄標題的部分),右邊的順序則選擇「Z到A」

  1. 按下確定後就會看到欄位自動排列成倒序

現在解決最左欄的商品名並沒有依3月份的排序排序這個問題。

  1. 在旁邊的欄位輸入下記公式

=MATCH(A2,'3月'!A:A,0)

這個公式就是直接找出A欄的商品名在3月的工作表裡的排序。

把這個公式往下拉,令到每個商品的排序都跑出來。

  1. 再用這欄排序便可以。

具體的步驟可以從右上→左下,或者右下→左上選取,令到「白色」的選取儲存格是在E欄,選取時也不需要把標題選取。(這是因為我的E欄並沒有標題)

再按下排序與篩選,選擇由小到大排序

  1. 最後把用來查排序的這欄刪掉就可以了


題外話,如果商品名的排序沒有影響,還可以考慮同樞紐分析表來做,需要為每一頁的內容轉換成表格(如方法3有相似點),樞紐後要再勾選各個表格的內容這部分有點複雜。

Enjoy this post?

Buy 從社畜變成Excel畜 a coffee

More from 從社畜變成Excel畜