Excel VBA:匯總多個工作簿每個工作表名稱包含指定關鍵詞的數據

2021-01-08 Excel教案

今天再分享下匯總指定文件夾下每個工作簿中工作表名稱包含某個指定關鍵詞的小代碼(當不指定關鍵詞時,則默認匯總所有工作表數據)。

舉個慄子。假設有一文件夾,內有十幾個工作簿,每個工作簿又各有多個不等數量的工作表,現在我們只想匯總每個工作簿中工作表名稱包含「看見星光」的數據,那就可以使用我們今天分享的小代碼了。

如果是想把所有工作表的數據一股腦全部匯總呢?不管它什麼「看見星光」還是「看見月光」的——也可以使用今天的代碼,程序運行中彈出的輸入關鍵詞對話框什麼都不填直接確定就可以了。

小貼士:

1、(重複說明)如果需要匯總所有工作表的數據,關鍵詞對話框什麼都不填直接確定就可以了、另外關鍵詞不區分字母大小寫。

2、如果需要匯總的工作表含有多個不同的關鍵詞……也是可以的,由於代碼匯總後的數據後增加一個「來源工作表」的欄位,表親們可以先把所有工作表的數據匯總,然後根據「來源工作表」欄位對數據明細進行篩選刪除操作。

代碼如下:

Sub Collectwks()

Dim Sht As Worksheet, rng As Range, Sh As Worksheet

Dim Trow&, k&, arr, brr, i&, j&, book&, a&

Dim p$, f$, Headr, Keystr

'

With Application.FileDialog(msoFileDialogFolderPicker)

'取得用戶選擇的文件夾路徑

.AllowMultiSelect = False

If .Show Then p = .SelectedItems(1) Else Exit Sub

End With

If Right(p, 1) <> "\" Then p = p & "\"

'

Keystr = InputBox("請輸入需要合併的工作表所包含的關鍵詞:", "提醒")

If StrPtr(Keystr) = 0 Then Exit Sub

'如果點擊了inputbox的取消或者關閉按鈕,則退出程序

Trow = Val(InputBox("請輸入標題的行數", "提醒"))

If Trow < 0 Then MsgBox "標題行數不能為負數。", 64, "警告": Exit Sub

Set Sht = ActiveSheet

Application.ScreenUpdating = False '關閉屏幕更新

Cells.ClearContents

Cells.NumberFormat = "@"

'清空當前表數據並設置為文本格式

ReDim brr(1 To 200000, 1 To 2)

'定義裝匯總結果的數組brr,最大行數為20萬行,2列是臨時的

'

f = Dir(p & "*.xls*") '開始遍歷工作簿

Do While f <> ""

If f <> ThisWorkbook.Name Then '避免同名文件重複打開出錯

With GetObject(p & f)

'以'只讀'形式讀取文件時,使用getobject方法會比workbooks.open稍快

For Each Sh In .Worksheets '遍歷表

If InStr(1, Sh.Name, Keystr, vbTextCompare) Then

'如果表中包含關鍵詞則進行匯總(不區分關鍵詞字母大小寫)

Set rng = Sh.UsedRange

If rng.Count > 1 Then

'如果rng的單元格數量大於1……

book = book + 1 '標記一下是否首個Sheet,如果首個sheet,BOOK=1

a = IIf(book = 1, 1, Trow + 1) '遍歷讀取arr數組時是否扣掉標題行

arr = rng.Value '數據區域讀入數組arr

If UBound(arr, 2) + 2 > UBound(brr, 2) Then

'動態調整結果數組brr的最大列數,避免明細表列數不一的情況。

ReDim Preserve brr(1 To 200000, 1 To UBound(arr, 2) + 2)

End If

For i = a To UBound(arr) '遍歷行

k = k + 1 '累加記錄條數

brr(k, 1) = f '數組第一列放工作簿名稱

brr(k, 2) = Sh.Name '數組第二列放工作表名稱

For j = 1 To UBound(arr, 2) '遍歷列

brr(k, j + 2) = arr(i, j)

Next

Next

End If

End If

Next

.Close False '關閉工作簿

End With

End If

f = Dir '下一個表格

Loop

If k > 0 Then

Sht.Select

[a1].Offset(IIf(Trow = 0, 1, 0)).Resize(k, UBound(brr, 2)) = brr '放數據區域

[a1].Resize(1, 2) = [{"來源工作簿名稱","來源工作表名"}]

MsgBox "匯總完成。"

End If

Application.ScreenUpdating = True '恢復屏幕更新

End Sub

相關焦點

  • Excel小技巧:使用VBA,10秒鐘搞定拆分工作表(內附代碼)
    前面我們發布過將多個工作簿中的工作表合併到一個工作表簿中,就有網友提了一個問題,如何講一個工作表拆分成多個工作表,其實實現的方法很多,如果數據少的話,我們直接採用篩選後複製粘貼就可以了,如果數據比較多,或者是日常工作的話,每天這樣複製粘貼,就很麻煩~,或者我們使用透視表也可以。。
  • Excel如何批量提取全部工作表名稱公式
    在使用公式查詢或匯總多工作表數據時經常需要用到整個工作簿所有工作表的名稱,下面介紹如何用宏表函數GET.WORKBOOK來提取工作表名稱。 提取工作表名稱過程:  Ctrl+F3調出定義名稱對話框,或者點擊【公式】-【定義名稱】調出定義名稱對話框
  • pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
    人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(「文件路徑文件名」),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!
  • 用excel製作文件管理器,所有版本皆可使用
    ,它是vba的前身,現在已經被vba完全取代了,但是我們仍然可以使用它,只不過需要通過定義名稱來使用。我們只做文件管理器需要用到FILES這個宏表函數FILES函數:返回指定目錄下的文件名第一參數:path,文件路徑他僅僅只有這一個參數,在函數的參數中我們可以使用通配符,excel中的通配符有兩個?
  • Excel用多重合併計算數據區域把多個表合併到數據透視表並匯總
    在 Excel 中,如果要把某種產品1到12月的銷量匯總,而每個月的銷量為一個獨立的工作表,這就需要用多重合併計算數據區域把多個表合併到數據透視表。把多個表合併到數據透視表比較簡單,麻煩的是調整出想要的匯總結果。需要調整的項通常包括頁、行和列,另外還需要把頁下的項改名和調整順序等。
  • 如何跨 Excel 多個工作表求平均值?各數據表的行標題還不一致
    關於跨工作表的數據匯總,之前我曾詳細講解過用 indirect 函數的經典方法,詳細可參閱 可是還是有些同學覺得公式難度有點高,理解不了,希望能有更簡單的方式。 那麼,今天就教大家點點滑鼠就能跨工作表求平均值。
  • --excel的學習
    如果你已經用excel很長時間了,那麼您一定聽過宏這個名稱,很多人都不知道宏是用來幹什麼的,今天我們就來了解一下excel中宏的作用與幫助,如果您經常在excel中重複一個任務,那就可以用宏來自動執行該任務了。
  • Excel中多個工作表不同位置數據,如何進行求和?
    最近收到一個典型案例,Excel中多個工作表不同位置數據,如何進行求和。 具體如下: 一個Excel文件中,有多個sheet工作表,「一月」,「二月」,「三月」。
  • 如何快速比較核對兩工作簿數據的差異?
    在工作中有時候需要對比二張工作簿的數據,比如將表格做好了,發給領導,領導稍做修改後又發過來,只是說了一聲「個別地方做了微調」,而你又想知道到底是修改了哪些地方,這時又不好去問領導,只有自己核對。遇到這種情況,該如何快速找出修改了哪些地方呢?
  • 懂Excel就能輕鬆入門Python數據分析包pandas(十六):合併數據
    隨著需求複雜度提高,很多時候已經不能用 excel 自帶功能實現了,不過 pandas 中許多概念與 excel 不謀而合案例1公司的銷售系統功能不全,導出數據時只能把各個部門獨立一個Excel文件,此時你需要對整體數據做分析,最好的方式當然是先把各個文件統一匯總起來:注意看,雖然每個表的標題一樣,但是他們的順序可能出現不一致這裡有3個關鍵點:
  • Excel進階:怎樣實現多表求和、多重合併計算
    工作中常常會將不同類別的數據放在不同的工作表或工作簿中,然後需要將這些數據匯總到一個表中。怎樣實現多表求和呢?實例1下面有3個表格,需要將3個表格的銷量匯總到一張表上。解決辦法1:很簡單啊,才三個表格而已嘛。
  • 使用pandas和openpyxl處理複雜Excel數據
    關於Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕鬆地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。
  • 辦公室必備的Excel工作表技巧,簡單易學,效率優先!
    在實際的辦公中,經常要對表格數據進行處理,如果自己的Excel工作表技巧不到位,那別人下班,自己就只能加班呢……如果想要提早下班,就要掌握一定量的辦公室必備Excel工作表技巧。一、Excel工作表技巧:批量修改工作表。
  • Jupyter Notebooks嵌入Excel並使用Python替代VBA宏
    在這兩者之間共享數據,甚至可以從Excel工作簿調用Jupyter筆記本中編寫的Python函數!  首先,要在Excel中運行Python代碼,你需要使用PyXLL包。 PyXLL使我們可以將Python集成到Excel中,並使用Python代替VBA。
  • Excel高效率辦公快捷鍵,高手快捷鍵一覽匯總
    平常只是偶爾使用下Excel的朋友來講,用滑鼠點點還算能湊合用下,但對於小編我這樣一天要製作大量數據報表,數據運算的人來說,一定會被一直用滑鼠重複點某個菜單功能煩死,效率又會低了很多。工作中要想有效率,又不被煩死,我們得學習掌握軟體提供給我們的功能快捷鍵,下面就講講平常幾個最平凡用到的快捷鍵,是工作中最最最常用、最實用的,對於好多新手可能還不一定知道,哪我們就一起來掌握一下吧。
  • excel數據透視表:善用這些功能,提高工作效率!
    ② 同樣在「設計」選項卡下,點擊「分類匯總」,選擇「不顯示分類匯總」 ③ 點擊「數據透視表工具」欄下的「分析」選項卡,點擊 「+/-按鈕」,關閉透視表裡的組合按鈕。 操作步驟見動圖: 接著,在「數據透視表工具」欄下的「分析」選項卡下,點擊「選項」,勾選「合併且居中排列帶標籤的單元格」,單擊「確定」。
  • 快速搞定excel多sheet匯總,表頭順序不一樣也能匯總數據
    hello,大家好,在日常工作中我覺得最令我們抓狂,也是最讓人害怕的excel工作莫過於數據匯總了,當匯總的表格數量比較多,表格的格式又不統一的時候,加班到深夜都有可能,今天就跟大家分享一種多sheet匯總的方法,即使表頭的順序不一致也能匯總數據,堪稱數據匯總神奇,話不多說,讓我們直接開始吧
  • 給Excel添加一個可以跳轉到指定單元格位置的按鈕
    如果一個Excel工作簿中包括了多個工作表,而且表格的內容都比較多,那麼在編輯一個工作表中的內容時如果想查看另一個工作表中的數據,就需要先點擊下方的對應的工作表標籤,再滑動滑鼠滾輪或者拖動滑塊去定位表格位置後查看。多次重複這種操作,會花費一定的時間,降低工作效率。
  • Python數據分析:pandas讀取和寫入數據
    names:array,指定列名index_col:int,sequence或False。表示索引列的位置,取值為sequence則代表多重索引usecols:array,指定讀取的列skiprows:從文件開頭算起,需要跳過的行數先在當前工作目錄下創建csv文件,如下圖可以看到這個csv文件包含三列數據,列名為studentNo,name,age。
  • Microsoft Excel怎麼按條件快速將總表數據拆分成多個工作表?
    在使用Microsoft Excel統計數據時,一般情況下會將各類數據匯總到一個工作表中。當需要分類數據時,使用【篩選】功能的話重複性操作太多,還需要將篩選後的數據進行複製粘貼,有什麼辦法能夠按條件快速的將總表數據拆分成多個工作表?這個時候就需要用到強大的Visual Basic for Applications(VBA)了。