Excel VBA 之常規資料樣式的工作薄批次合併
2022-06-27由 楊sir說科學 發表于 畜牧業
怎麼批次合併資料夾
前景提要
好了,透過前面幾節課的學習,我們也是學會了批次合併工作薄中如何開啟,如何關閉工作薄,這幾個都是常規的操作,相信有很多的小夥伴早就已經等到的不耐煩了,說了那麼多,重點的合併工作薄呢?
來來來,今天就來說
方法分析
我們先來想想看,如果人手手工操作的話,想要實現這樣的效果,我們應該如何操作呢?
首先我們人工操作的話,第一步就是開啟工作薄,然後選擇當前的活動區域,活動區域的選擇我們可以使用UsedRange來選擇,因為我們已經提前輸入了標頭,所以我們在複製其他的資料的時候,就不需要再次複製標頭了,因為本案例中標頭只有一行,我們就需要向下移動一行,移動要如何實現呢?之前我們學習過移動單元格用offset,至於複製貼上,就是copy啦,這個非常簡單,基礎程式碼的框架我們前面已經寫好了,今天我們繼續補充彙總資料的程式碼。
場景模擬
我們在之前模擬的資料的基礎上,繼續複雜化資料,假設我們現在有不同的銷售員在不同的商城的訂單銷售情況,同時也有香港以及部分海外地區的銷售情況,如下圖
這些資料我們都是放在一個資料夾內的,方便我們遍歷,我們現在要做的就是遍歷這個資料夾,將資料夾內的所有的工作薄的資料都彙總在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
我們來看看最終的效果
非常的完美
這裡我們成功的將所有的資料的彙總在了一個工作薄中,為了驗證資料的正確性,我隨意開啟其中一個工作薄,我們的開啟購物天堂香港的工作薄
許志安,馬國明等知名演員都在這裡,當然這是虛構的啦,我們來看看資料
再看看總表的資料
一個不多一個不少,完美的實現了資料的彙總,怎麼樣,小夥伴們,現在還覺得資料彙總很難嘛?
程式碼分析
Set sbook = ThisWorkbook
定義一個新的工作薄的變數,方面我們後面的呼叫,本案例中,他就等於是test這個工作薄
Set rng = ActiveSheet。UsedRange
將當前的活動單元格複製給一個rng物件,活動區域是哪裡呢?
我們來除錯下
usedrange就是代表了當前活動工作表的所有被使用的資料區域的區間,注意這裡是一個區間
我們因為已經設定好了標頭,所以這裡我們不需要再次複製標頭了,這裡我們將我們所需要的區域往下移動一行,用offset實現,來看看效果
成功的避開了標頭行,然後就是複製貼上了。
rng1。Copy sbook。Worksheets(1)。Cells(l + 1, 1)
這裡就非常的簡單了,因為我們之前已經獲得了test的最後一個非空單元格,所以我們直接呼叫,在最後一個非空單元格貼上資料就好 。
後面的關閉遍歷框架在之前我們就已經寫好 。