Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

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

   

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

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

フォルダの指定

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

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

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

 

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

Application.FileDialog(msoFileDialogFolderPicker).Show

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

With Application.FileDialog(msoFileDialogFolderPicker)
	.Title = "取込場所の選択"   'タイトルの指定
	.InitialFileName = "c:\"    '初期表示フォルダの指定
End With

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

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

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

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

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

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メソッドでファイルの拡張子を判定します

If fso.GetExtensionName(file.Name) = "xlsx" Then
    'Excelファイルのみ処理
End If

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

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

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ファイル・シートを順番に開くサンプルプログラムを記載します。

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

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

microsoft
エクセルで円と銭の通貨単位を表示する

Excelで入力した数値に円と銭の単位を表示する方法を記載します。 2種類の表示方法がありますので、用途に応じて使い分けてください。 セルの書式設定で表示 セル …

microsoft
[Windows]WSUSサーバの構築手順 1/6

Windows 2008 R2サーバにWSUSサーバを構築する Windows Server Update Services(WSUS)とは Windows S …

VBAからSQL Serverに接続する方法(Microsoft OLE DB Provider for SQL Server)

VBAから業務システムなどに使用しているデータベースに接続し、データを抽出することができます。 定期的に作成する資料などは、VBAでデータ取得処理を自動化し、ボ …

microsoft
Outlookでメール送信中になったまま送受信が終了しない場合

開封確認のメールが正常に送信されず、送信中のまま送受信が終了しない場合があります。 原因となる開封確認メールは送信トレイに存在しないため、削除することができませ …

microsoft
Excel VBAでOracleのデータを参照するマスター検索機能を作成する

エクセルのVBAでOracleに保存されているマスタを検索する機能を作成する機会がありましたので、サンプルプログラムを記載します。 Oracleへの接続設定 V …

エクセルファイルを無料のビューア(Excel Mobile)で開く【Excel Viewerの代替手段】

Microsoft Officeがインストールされていないパソコンでエクセルを開くために、マイクロソフトが提供していたMicrosoft Excel Viewe …

microsoft
VBAでひらがな・カタカナの小文字(捨て仮名)を全角に変換する

VBAで半角文字から全角文字に変換したり、ひらがなをカタカナに変換するには、「StrConv」関数に引数を指定することで意図した文字に変換することができます。た …

microsoft
[Windows]WSUSサーバの構築手順 4/6

Windows 2008 R2サーバにWSUSサーバを構築する WSUS(Windows Server Update Service)のインストール [スタート …

アクセス(Access)を購入せずに無料のランタイムだけで使う方法

Accessは、マイクロソフトが提供しているリレーショナルデータベースソフトです。 データベースにデータを蓄積することで、条件に一致するデータを抽出することやデ …

microsoft
Excelのセル幅に合わせて縦横比を維持したまま画像サイズを自動調整する方法

VBAで画像を挿入することができますが、単純にセル幅に合わせて画像サイズを変更すると、縦長や横長の画像として挿入されます。 縦横比を維持したまま、画像を挿入する …