1. 程式人生 > 實用技巧 >使用DIR函式合併多個檔案的資料——Excel之VBA(10)

使用DIR函式合併多個檔案的資料——Excel之VBA(10)

•將物件賦值到變數

用到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

    If
Dir("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

•多個檔案 每個檔案中若干張表

•合併後的命名問題

本節演示案例:

  1. 利用Set建立表並命名
  2. 利用Dir函式確認某檔案是否存在
  3. Dir函式返回某資料夾中的所有檔名
  4. 多檔案合併-每個檔案中一張表
  5. 多檔案合併-每個檔案中若干張表
  6. 使用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