大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介します。Dirとワイルドカードを使えば、フォルダ内のファイル名を取得できます。ワイルドカードのメリットは、ファイル名が変更になっても、フォルダ内のファイル名を取得できることです。ファイルを開く方法がわかれば、複数ファイルのデータ取得ができたりするので、実務に活かせます。

はじめに

この記事では、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介します。

「Dir」で「ワイルドカード」を使うと、フォルダ内のファイル名を取得することができます。

ワイルドカードを使うメリットは、ファイル名が変わっても、ファイル名を取得することができることです。

また、拡張子を指定することもできるので、かなり便利です。

では、Dirとワイルドカードを使って、ファイルを開く方法について解説していきます。

この記事で紹介すること

  • Dirとワイルドカードでファイルを開く
  • フォルダ選択用ダイアログでファイルを開く

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、ファイルを開く方法について、ポイントとなるVBAコードをまとめます。

VBAコードだけ確認したい場合に、ご活用ください。

'Dirとワイルドカードで、ファイルを開く
FileName = Dir(ThisWorkbook.Path & "\保存\*") 'フォルダ内のファイル名を取得
FilePath = ThisWorkbook.Path & "\保存\" & FileName 'ファイルパスを作成
Workbooks.Open FileName:=FilePath 'ファイルを開く
    
'フォルダ選択用ダイアログとワイルドカードで、ファイルを開く
With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ThisWorkbook.Path '現在のフォルダパス
    If .Show = False Then Exit Sub
    FolderPath = .SelectedItems(1) 'フォルダパスを取得
End With
FileName = Dir(FolderPath & "\*") 'フォルダ内のファイル名を取得
FilePath = Path & "\" & FileName 'ファイルパスを作成
Workbooks.Open FileName:=FilePath 'ファイルを開く

では、解説していきます。

VBAでフォルダを指定してファイルを開く

フォルダを指定して、ファイルを開く方法について、ご紹介します。

フォルダパスを指定して、その中のファイルを取得する方法です。

この方法を使うと、ファイル名が変更されても、ファイルパスを取得することができるようになります。

ファイル名が変更される場合は、ファイル名に日付を追加する場合とかですね。

フォルダパス+ワイルドカード

フォルダパスを指定して、ワイルドカードでファイルパスを取得する方法です。

VBAコードは次のようになります。

Sub TEST1()
    
    Dim FolderPath, FilePath, FileName
    
    'フォルダパスを指定
    FolderPath = ThisWorkbook.Path & "\保存"
    'フォルダ内のファイル名を取得
    FileName = Dir(FolderPath & "\*")
    'ファイルパスを作成
    FilePath = FolderPath & "\" & FileName
    
    'ファイルを開く
    Workbooks.Open FileName:=FilePath
    
End Sub

『Dir』でワイルドカードを使うのが、ポイントです。

『ファイル名 = Dir(フォルダパス & "\*")』と入力することで、フォルダ内のファイル名を取得することができます。

では、試してみるフォルダ構造は、次のようになります。

フォルダ構造

使ったフォルダ

「保存」フォルダの中に「TEST.xlsx」ファイルが入っています。

この「TEST.xlsx」を開きます。

では、VBAコードを実行します。

ファイルを開く

フォルダパス+ワイルドカードでファイルを開く

ファイルを開くことができました。

ダイアログ+ワイルドカード

次は、フォルダ選択用ダイアログとワイルドカードを使って、ファイルを開いてみます。

VBAコードは、次のようになります。

Sub TEST2()
    
    Dim FolderPath, FilePath, FileName
    
    'フォルダ選択用ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ThisWorkbook.Path '現在のフォルダパス
        If .Show = False Then Exit Sub
        FolderPath = .SelectedItems(1) 'フォルダパスを取得
    End With
    
    FileName = Dir(FolderPath & "\*") 'フォルダ内のファイル名を取得
    FilePath = FolderPath & "\" & FileName 'ファイルパスを作成
    
    Workbooks.Open FileName:=FilePath 'ファイルを開く
    
End Sub

フォルダ選択用のダイアログは、次のように記載します。

フォルダ選択用のダイアログ

'フォルダ選択用ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ThisWorkbook.Path '現在のフォルダパス
    If .Show = False Then Exit Sub
    FolderPath = .SelectedItems(1) 'フォルダパスを取得
End With

という感じです。

あとは、先ほどと同じで、「Dir」を使ってフォルダ内のファイル名を取得して、ファイルを開きます。

使ったフォルダ構成は、次のようになります。

フォルダ構成

使ったフォルダ構成

では、VBAコードを実行します。

フォルダ選択用のダイアログが表示

フォルダ選択用ダイアログが表示される

フォルダ選択用のダイアログが表示されました。

現在のフォルダが最初に表示されています。

ファイルが保存されている「保存」フォルダを選択します。

ファイルを開く

ファイルが開かれる

ファイルを開くことができました。

ファイル名が変更されても開ける

ワイルドカードを使ってファイルを開く方法は、ファイル名が変更されてもファイルを開けるのがメリットです。

やってみます。

ファイル名に、日付を入力しました。

ファイル名を変更

使うフォルダ構成

ファイル名が先ほどと違います。

では、フォルダパス指定とワイルドカードで取得するVBAコードを実行してみます。

Sub TEST3()
    
    Dim FolderPath, FilePath, FileName
    
    'フォルダパスを指定
    FolderPath = ThisWorkbook.Path & "\保存"
    'フォルダ内のファイル名を取得
    FileName = Dir(FolderPath & "\*")
    'ファイルパスを作成
    FilePath = FolderPath & "\" & FileName
    
    'ファイルを開く
    Workbooks.Open FileName:=FilePath
    
End Sub

先ほど紹介したVBAコードと同じです。

実行します。

ファイルを開く

ファイル名を変更しても同じVBAコードでファイルを開くことができる

ファイル名を変更しても同じVBAコードで、ファイルを開くことができました。

これが、Dirを使ったワイルドカードのメリットです。

拡張子を指定してファイルを開く

拡張子を指定して、ファイルを開くこともできます。

「Dir」と「ワイルドカード」を使って、拡張子を指定してファイルを開くこともできます。

次のVBAコードは、フォルダの中から、CSVファイルを開くものです。

Sub TEST4()
    
    Dim FolderPath, FilePath, FileName
    
    'フォルダパスを指定
    FolderPath = ThisWorkbook.Path & "\保存"
    'フォルダ内で、CSVファイルのファイル名を取得
    FileName = Dir(FolderPath & "\*.csv")
    'ファイルパスを作成
    FilePath = FolderPath & "\" & FileName
    
    'ファイルを開く
    Workbooks.Open FileName:=FilePath
    
End Sub

ポイントは、『FileName = Dir(FilePath & "\*.csv")』のところです。

ワイルドカードの指定のときに、「"\*.csv"」というように入力すると、CSVファイルのファイル名を取得することができます。

次のフォルダとファイルを用意しました。

フォルダ構成

フォルダとファイルを用意

同じフォルダに、「TEST.csv」と「TEST.xlsx」が入っています。

では、VBAコードを実行してみます。

CSVファイルを開く

フォルダの中から、CSVファイルを開く

CSVファイルを開くことができました。

ワイルドカードをうまく使うと、拡張子の指定ができます。

VBAでフォルダを指定して複数ファイルを開く

フォルダを指定して、複数ファイルを開くこともできます

「Dir」を使えば、同じフォルダ内の複数のファイルを開くことができます。

複数のエクセルファイルを開く

フォルダパスを指定して、複数のエクセルファイルを開く、というのをやってみます。

VBAコードはこんな感じになります。

Sub TEST5()
    
    Dim FolderPath, FileName
    FolderPath = ThisWorkbook.Path & "\保存" 'フォルダパスを作成
    FileName = Dir(FolderPath & "\*") '最初のファイル名を取得
    
    Do While FileName <> ""
        'ファイルを開く
        Workbooks.Open FileName:=FolderPath & "\" & FileName
        FileName = Dir() '次のファイル名を取得
    Loop
    
End Sub

ポイントは、「Do While」を使って、「Dir()」をループすることです。

「Dir()」をループすることで、同じフォルダ内のファイル名を、取得することができます。

Dirをループする

FileName = Dir(FolderPath & "\*") '最初のファイル名を取得

Do While FileName <> ""
    'ファイルを開く
    Workbooks.Open FileName:=FolderPath & "\" & FileName
    FileName = Dir() '次のファイル名を取得
Loop

「Dir」、かなり便利です。

フォルダ構成はこのようなものを用意しました。

フォルダ構成

フォルダ構成

「保存」フォルダに、「TEST1~TEST5.xlsx」ファイルが保存されています。

では、実行してみます。

複数ファイルを開く

Dirをループして複数ファイルを開く

「TEST1~TEST5.xlsx」のファイルを開くことができました。

複数のファイルを開いてデータを取得

先ほどの複数ファイルを開くを利用して、複数ファイルのデータを取得することができます。

VBAコードは、次のようになります。

Sub TEST6()
    
    'マクロファイルのシートを設定
    Dim ThisWS
    Set ThisWS = ThisWorkbook.ActiveSheet
    
    Dim FolderPath, FileName
    FolderPath = ThisWorkbook.Path & "\保存" 'フォルダパスを作成
    FileName = Dir(FolderPath & "\*") '最初のファイル名を取得
    
    i = 0
    Do While FileName <> ""
        'ファイルを開く
        Workbooks.Open FileName:=FolderPath & "\" & FileName
        i = i + 1
        '開いたファイルから、値を取得
        ThisWS.Cells(i, 1) = Workbooks(FileName).ActiveSheet.Cells(1, 1)
        '開いたファイルを閉じる
        Workbooks(FileName).Close
        FileName = Dir() '次のファイル名を取得
    Loop
    
End Sub

手順としては、

  • ①Dirでファイル名を取得
  • ②ファイルを開く
  • ③開いたファイルから値を取得する
  • ④開いたファイルを閉じる
  • ⑤Dirで次のファイル名を取得
  • ⑥手順②~⑤を繰り返す

という流れです。

試してみたフォルダ構成はこちらです。

フォルダ構成

フォルダ構成

「保存」フォルダの中に、「TEST1~TEST5.xlsx」のファイルを保存しています。

「TEST1~TEST5.xlsx」には、ファイル名を入力しています。

では、実行してみます。

複数ファイルからデータを取得

複数ファイルを開いて、データを取得した結果

複数のファイルから、データを取得することができました。

こんな感じで、ファイルを開くVBAコードを使うと、効率化できる業務が増えます。

おわりに

この記事では、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介しました。

フォルダを指定する方法は、「ThisWorkbook.Path」と「フォルダ選択用ダイアログ」がありました。

フォルダの場所が変わらない場合には、「ThisWorkbook.Path」で、変わる場合には、「フォルダ選択用ダイアログ」を使うと便利です。

「Dir」で「ワイルドカード」を使うと、ファイル名が変わっても、ファイル名を取得することができます。

また、拡張子を指定することもできるので、かなり便利です。

「Dir」に「Do While」を使ってループすると、フォルダ内の複数のファイルを開くことができます。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す