Windows

VBAで指定フォルダ内の全てのExcelファイル・シートを順番に開く方法

microsoft Windows

この記事では、VBAで指定フォルダ内の全てのExcelファイル・シートを順番に開く方法について記載します。

指定フォルダの選択は、ダイアログを表示して任意の場所を選択できるようにしています。

フォルダの指定

VBAでフォルダやファイルを選択するダイアログを表示するにはApplication.FileDialogオブジェクトを使用します。

Application.FileDialogに次の定数を渡すことでダイアログの種類を切り替えることができます。

定数名 内容
msoFileDialogFilePicker ファイルの場所を選択するダイアログ
msoFileDialogFolderPicker フォルダの場所を選択するダイアログ
msoFileDialogOpen ファイルを開くダイアログ
msoFileDialogSaveAs ファイルを保存するダイアログ
スクロールできます

 

フォルダの場所を選択するダイアログを表示します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Application.FileDialog(msoFileDialogFolderPicker).Show
Application.FileDialog(msoFileDialogFolderPicker).Show
Application.FileDialog(msoFileDialogFolderPicker).Show

ダイアログのタイトルや初期表示フォルダを指定します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "取込場所の選択" 'タイトルの指定
.InitialFileName = "c:\" '初期表示フォルダの指定
End With
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "取込場所の選択" 'タイトルの指定 .InitialFileName = "c:\" '初期表示フォルダの指定 End With
With Application.FileDialog(msoFileDialogFolderPicker)
	.Title = "取込場所の選択"   'タイトルの指定
	.InitialFileName = "c:\"    '初期表示フォルダの指定
End With

ダイアログで選択したフォルダのパスを取得します。
キャンセルボタンや×ボタンが押された時のために、ダイアログの戻り値を判定しています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "取込場所の選択" 'タイトルの指定
.InitialFileName = "c:\" '初期表示フォルダの指定
If .Show = True Then 'ダイアログを表示して戻り値を判定
folderPath = .SelectedItems(1) 'フォルダのパスを取得
Else
Exit Sub
End If
End With
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "取込場所の選択" 'タイトルの指定 .InitialFileName = "c:\" '初期表示フォルダの指定 If .Show = True Then 'ダイアログを表示して戻り値を判定 folderPath = .SelectedItems(1) 'フォルダのパスを取得 Else Exit Sub End If End With
With Application.FileDialog(msoFileDialogFolderPicker)
	.Title = "取込場所の選択"   'タイトルの指定
	.InitialFileName = "c:\"    '初期表示フォルダの指定
    If .Show = True Then    'ダイアログを表示して戻り値を判定
        folderPath = .SelectedItems(1)  'フォルダのパスを取得
    Else
        Exit Sub
    End If
End With

フォルダ内のファイルを順番に開く

フォルダ内のファイルを開くにはFileSystemObjectオブジェクトを使用してファイルシステムにアクセスします。

指定フォルダ内に存在するファイルを読み取り専用で順番に開きます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.getFolder("フォルダへのパス").Files
Dim formWorkBook As workbook
Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)
'ファイルを閉じる
formWorkBook.Close
Next
Dim fso As Object Dim file As Object Set fso = CreateObject("Scripting.FileSystemObject") For Each file In fso.getFolder("フォルダへのパス").Files Dim formWorkBook As workbook Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True) 'ファイルを閉じる formWorkBook.Close Next
Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.getFolder("フォルダへのパス").Files
    Dim formWorkBook As workbook
    Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)

    'ファイルを閉じる 
    formWorkBook.Close
Next

特定のファイルのみ開きたい場合は、GetExtensionNameメソッドでファイルの拡張子を判定します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
If fso.GetExtensionName(file.Name) = "xlsx" Then
'Excelファイルのみ処理
End If
If fso.GetExtensionName(file.Name) = "xlsx" Then 'Excelファイルのみ処理 End If
If fso.GetExtensionName(file.Name) = "xlsx" Then
    'Excelファイルのみ処理
End If

ファイル内のワークシートを順番に開く

開いたファイル内のワークシートを順番に処理します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.getFolder("フォルダへのパス").Files
If fso.GetExtensionName(file.Name) = "xlsx" Then
Dim formWorkBook As Workbook
Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)
Dim formWorkSheet As Worksheet
For Each formWorkSheet In formWorkBook.Worksheets
'ワークシートへの処理
Next
'ファイルを閉じる
formWorkBook.Close
End If
Next
Dim fso As Object Dim file As Object Set fso = CreateObject("Scripting.FileSystemObject") For Each file In fso.getFolder("フォルダへのパス").Files If fso.GetExtensionName(file.Name) = "xlsx" Then Dim formWorkBook As Workbook Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True) Dim formWorkSheet As Worksheet For Each formWorkSheet In formWorkBook.Worksheets 'ワークシートへの処理 Next 'ファイルを閉じる formWorkBook.Close End If Next
Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.getFolder("フォルダへのパス").Files
    If fso.GetExtensionName(file.Name) = "xlsx" Then
        Dim formWorkBook As Workbook
        Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)
        
        Dim formWorkSheet As Worksheet
        For Each formWorkSheet In formWorkBook.Worksheets
            'ワークシートへの処理
        Next
    
        'ファイルを閉じる 
        formWorkBook.Close
    End If
Next

サンプルプログラム

指定フォルダ内の全てのExcelファイル・シートを順番に開くサンプルプログラムを記載します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Option Explicit
Sub main()
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "取込場所の選択"
.InitialFileName = "c:\"
If .Show = True Then
folderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In fso.getFolder(folderPath).Files
If fso.GetExtensionName(file.Name) = "xlsx" Then
Dim formWorkBook As Workbook
Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)
Dim formWorkSheet As Worksheet
For Each formWorkSheet In formWorkBook.Worksheets
'ワークシートへの処理
Next
'ファイルを閉じる
formWorkBook.Close
End If
Next
End Sub
Option Explicit Sub main() Dim folderPath As String With Application.FileDialog(msoFileDialogFolderPicker) .Title = "取込場所の選択" .InitialFileName = "c:\" If .Show = True Then folderPath = .SelectedItems(1) Else Exit Sub End If End With Dim fso As Object Dim file As Object Set fso = CreateObject("Scripting.FileSystemObject") For Each file In fso.getFolder(folderPath).Files If fso.GetExtensionName(file.Name) = "xlsx" Then Dim formWorkBook As Workbook Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True) Dim formWorkSheet As Worksheet For Each formWorkSheet In formWorkBook.Worksheets 'ワークシートへの処理 Next 'ファイルを閉じる formWorkBook.Close End If Next End Sub
Option Explicit

Sub main()
    Dim folderPath As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "取込場所の選択"
        .InitialFileName = "c:\"
        If .Show = True Then
            folderPath = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Dim fso As Object
    Dim file As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    For Each file In fso.getFolder(folderPath).Files
        If fso.GetExtensionName(file.Name) = "xlsx" Then
            Dim formWorkBook As Workbook
            Set formWorkBook = Workbooks.Open(Filename:=file, ReadOnly:=True)

            Dim formWorkSheet As Worksheet
            For Each formWorkSheet In formWorkBook.Worksheets
                'ワークシートへの処理
            Next

            'ファイルを閉じる
            formWorkBook.Close
        End If
    Next
End Sub
タイトルとURLをコピーしました