農林漁牧網

您現在的位置是:首頁 > 畜牧業

Excel VBA 之常規資料樣式的工作薄批次合併

2022-06-27由 楊sir說科學 發表于 畜牧業

怎麼批次合併資料夾

前景提要

好了,透過前面幾節課的學習,我們也是學會了批次合併工作薄中如何開啟,如何關閉工作薄,這幾個都是常規的操作,相信有很多的小夥伴早就已經等到的不耐煩了,說了那麼多,重點的合併工作薄呢?

來來來,今天就來說

方法分析

我們先來想想看,如果人手手工操作的話,想要實現這樣的效果,我們應該如何操作呢?

首先我們人工操作的話,第一步就是開啟工作薄,然後選擇當前的活動區域,活動區域的選擇我們可以使用UsedRange來選擇,因為我們已經提前輸入了標頭,所以我們在複製其他的資料的時候,就不需要再次複製標頭了,因為本案例中標頭只有一行,我們就需要向下移動一行,移動要如何實現呢?之前我們學習過移動單元格用offset,至於複製貼上,就是copy啦,這個非常簡單,基礎程式碼的框架我們前面已經寫好了,今天我們繼續補充彙總資料的程式碼。

場景模擬

我們在之前模擬的資料的基礎上,繼續複雜化資料,假設我們現在有不同的銷售員在不同的商城的訂單銷售情況,同時也有香港以及部分海外地區的銷售情況,如下圖

Excel VBA 之常規資料樣式的工作薄批次合併

這些資料我們都是放在一個資料夾內的,方便我們遍歷,我們現在要做的就是遍歷這個資料夾,將資料夾內的所有的工作薄的資料都彙總在test。xlsm這個工作薄內,那麼要如何實現呢?

程式碼區

Sub test()

Dim pathn, sth As Workbook, rng As Range, rng1 As Range, sbook As Workbook

pathn = ThisWorkbook。Path

Set sbook = ThisWorkbook

f = Dir(pathn & “\”)

Do While f <> “”

l = Cells(Rows。Count, 1)。End(xlUp)。Row

If f <> “test。xlsm” Then

For Each sth In Workbooks

If sth。Name = f Then

GoTo line

End If

Next sth

Workbooks。Open (pathn & “\” & f)

‘=====彙總工作薄的程式碼======

Set rng = ActiveSheet。UsedRange

Set rng1 = rng。Offset(1, 0)

rng1。Copy sbook。Worksheets(1)。Cells(l + 1, 1)

’=====彙總工作薄的程式碼======

ActiveWorkbook。Close True

End If

line:

f = Dir()

Loop

End Sub

我們來看看最終的效果

Excel VBA 之常規資料樣式的工作薄批次合併

非常的完美

這裡我們成功的將所有的資料的彙總在了一個工作薄中,為了驗證資料的正確性,我隨意開啟其中一個工作薄,我們的開啟購物天堂香港的工作薄

許志安,馬國明等知名演員都在這裡,當然這是虛構的啦,我們來看看資料

Excel VBA 之常規資料樣式的工作薄批次合併

再看看總表的資料

Excel VBA 之常規資料樣式的工作薄批次合併

一個不多一個不少,完美的實現了資料的彙總,怎麼樣,小夥伴們,現在還覺得資料彙總很難嘛?

程式碼分析

Set sbook = ThisWorkbook

定義一個新的工作薄的變數,方面我們後面的呼叫,本案例中,他就等於是test這個工作薄

Set rng = ActiveSheet。UsedRange

將當前的活動單元格複製給一個rng物件,活動區域是哪裡呢?

我們來除錯下

Excel VBA 之常規資料樣式的工作薄批次合併

usedrange就是代表了當前活動工作表的所有被使用的資料區域的區間,注意這裡是一個區間

我們因為已經設定好了標頭,所以這裡我們不需要再次複製標頭了,這裡我們將我們所需要的區域往下移動一行,用offset實現,來看看效果

Excel VBA 之常規資料樣式的工作薄批次合併

成功的避開了標頭行,然後就是複製貼上了。

rng1。Copy sbook。Worksheets(1)。Cells(l + 1, 1)

這裡就非常的簡單了,因為我們之前已經獲得了test的最後一個非空單元格,所以我們直接呼叫,在最後一個非空單元格貼上資料就好 。

後面的關閉遍歷框架在之前我們就已經寫好 。