1. まとめトップ

【VBA】フォルダからファイル読み込み、ファイル選択画面【マクロ】

Excelでファイルを読み込む方法。単体ブックを読み込むもよし、複数ブックを読み込むも良し。ファイル選択ダイアログもあるよ!そしてフォルダ選択もできるようにするよ!(どんどん追記していく予定)

更新日: 2018年01月05日

3 お気に入り 15888 view
お気に入り追加

この記事は私がまとめました

Mochihaさん

VBAまとめ

1つの大元のExcelファイルを準備し、それにプログラムを書き込む。
大元のExcelファイルに他の資料データを落とし込み、まとめる。
(他の資料データは改変しない。)
でも、他のデータを開いてコピペするのも面倒だし、データの集計も面倒。
他のブックを手作業で開くと、情報収集に多くの時間を費やす。

ということで、他のブックの開き方をまとめます。

読み込むファイルの種類(形式)指定

Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
'上記は、xls? ←xls,xlsmなど、xls+1文字のデータを表示するようにしてます。
'※Excel2003の場合は何故か、下記でないと.xlsファイルは表示されませんでした

Application.GetOpenFilename("Microsoft Excelブック,*.xls")
Application.GetOpenFilename("Microsoft Excelブック,*.xls?")

ファイルの読み込み xls 単体ブックを読み込む

Sub Sample2()
 Dim OpenFileName As String
 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
 If OpenFileName <> "False" Then
  Workbooks.Open OpenFileName
 Else
  MsgBox "キャンセルされました"
 End If
End Sub

ファイルの読み込み xls 複数ブックを読み込む

Sub Sample7()
 Dim OpenFileName As Variant, Target As Variant
 OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls?", _
MultiSelect:=True)
 If IsArray(OpenFileName) Then
  For Each Target In OpenFileName
   Workbooks.Open Target
   Next Target
 Else
  MsgBox "キャンセルされました"
 End If
End Sub

ブックが開いているかの確認

TestFileName="C:\test\テストブック.xls"  '開くときの事を考えて、フルパス入力。
Dim TESTBOOK
Dim wb As Workbook, flag As Boolean
 For Each wb In Workbooks'既に開いているブックをループ
  If wb.Name = Dir(TestFileName) Then 'ファイル名が同じだったら
                      '(Dirはファイル名のみ)
   Set TESTBOOK = wb'TESTBOOKにブックを設定。
   flag = True
   Exit For
  End If
 Next wb
 If flag = True Then 'すでに開かれていたらメッセージ
  MsgBox "すでに開かれています"
 Else 'すでに開かれていなかったら、開きます。
  Set TESTBOOK = Workbooks.Open(TestFileName)
 End If

フォルダ・ファイルの存在確認

'Dir関数で調べる
Function FolderExists(folder_path As String) As Boolean
 If Dir(folder_path, vbDirectory) = "" Then
  FolderExists = False
 Else
  FolderExists = True
 End If
End Function

'FolderExistsで調べる
Public Function IsExistDirB(oFso, a_sFolder As String) As Boolean
 If (oFso Is Nothing) Then
  Set oFso = CreateObject("Scripting.FileSystemObject")
 End If

 If (oFso.FolderExists(a_sFolder) = False) Then
'// フォルダが存在しない
   IsExistDirB = False
  Else
'// フォルダが存在する
  IsExistDirB = True
 End If
End Function

ユーザーフォーム(UserForm)でファイル読み込みを行う場合

ピンク色部分
 オブジェクト:ラベル
 オブジェクト名:FileSingleSelect

水色部分
 オブジェクト:ラベル
 オブジェクト名:FileMultiSelect

ボタンは上から
 SingleButton、MultiButton
という設定にしています。

土台のUserformのオブジェクト名は、
Userform1とします。

FileSingleSelect(ピンク色部分)横のボタンをダブルクリック
ピンク色部分横のボタンをクリックした時に実行されることを記載します。

Private Sub SingleButton_Click()

End Sub

Private Sub SingleButton_Click()

End Sub

//検討中

参考サイト

1