使用DIR函式合併多個檔案的資料——Excel之VBA(10)
阿新 • • 發佈:2020-11-19
•將物件賦值到變數
用到Set
•將物件賦值到變數中的好處
•將單元格賦值到變數
•將工作表賦值到變數
Sub test() Dim i As Integer Dim sht As Worksheet For i = 2 To 5 Set sht = Sheets.Add sht.Name = Sheet1.Range("a" & i) Next End Sub
•將工作簿賦值到變數
•認識Dir函式
•Dir函式驗證是否存在某個檔案
Sub test() Dim i As Integer For i = 1 To 6 IfDir("e:\data\" & Range("a" & i) & ".xls*") = "" Then Range("b" & i) = "無" Else Range("b" & i) = " 有" End If Next End Sub
•多個條件相符的檔案 Dir如何返回值
說明:值得注意的是,在多個條件相符的時候,Dir會存放所有結果,呼叫一次Dir返回一次
並且下一次呼叫時,不用寫後續條件,直接=Dir
另:當結果取完,再取一次結果為空,再取一次會報錯
示例:
str = Dir("e:\data\*.xls*")
str = Dir
str = Dir
•Dir函式遍歷迴圈所有檔案
Sub test() Dim str As String Dim wb As Workbook str = Dir("e:\data\*.xls*") For i = 1 To 100 ' Range("a" & i) = str '其餘的都是框架,中間才是核心事件處理過程 ' - - - - - - - - - - - - 分割線 - - - - - - - - - - - - - - Set wb = Workbooks.Open("e:\data\" & str) wb.Close ' - - - - - - - - - - - - 分割線 - - - - - - - - - - - - - - str = Dir If str = "" Then Exit For End If Next End Sub
•多檔案合併
•多個檔案 每個檔案中一張表
Sub test() Dim str As String Dim wb As Workbook str = Dir("e:\data\*.xls*") For i = 1 To 100 ' Range("a" & i) = str '其餘的都是框架,中間才是核心事件處理過程 ' - - - - - - - - - - - - 分割線 - - - - - - - - - - - - - - Set wb = Workbooks.Open("e:\data\" & str) wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '跨檔案了就要帶上檔案 ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0) wb.Close ' - - - - - - - - - - - - 分割線 - - - - - - - - - - - - - - str = Dir If str = "" Then Exit For End If Next End Sub
•多個檔案 每個檔案中若干張表
•合併後的命名問題
本節演示案例:
- 利用Set建立表並命名
- 利用Dir函式確認某檔案是否存在
- Dir函式返回某資料夾中的所有檔名
- 多檔案合併-每個檔案中一張表
- 多檔案合併-每個檔案中若干張表
- 使用FIND方法查詢資料
需要理解並記住寫法的概念:
SET sht = sheet1
Dir (“D:\data\*.*”)
Range(“a:a”).find(“張三”)
需要理解的概念:
附表 Dir程式碼
附表 Find程式碼
附表:Dir程式碼
Sub test() Dim str As String Dim wb As Workbook Dim i As Integer str = Dir("d:\data\*.*") For i = 1 To 100 Set wb = Workbooks.Open("d:\data\" & str) '這裡該幹什麼幹什麼 wb.Close str = Dir If str = "" Then Exit For End If Next End Sub
附表:FIND程式碼
Sub test() Dim rng As Range Set rng = Range("d:d").Find(Range("l3")) If Not rng Is Nothing Then Range("m3") = rng.Offset(0, 3) End If End Sub