📖
【VBA】ファイルパスからワークブックオブジェクトを作る
【VBA】フォルダ内のキーワードを含むエクセルファイルリストを返す
【VBA】複数のエクセルファイルを選択してファイルパスを返すコード
これらのコードではファイルパスのリストを返します。
これを実際に使うには受け取ったファイルパスをワークブックオブジェクトにしてなんやかんやする必要があります。
またとりあえず「あのフォルダのあのエクセルをなんやかんやしてみたい」という時にはファイルパスからワークブックオブジェクトを作る必要があります。
コードは以下のように書きます。
ちなみにファイルパスはエクスプローラー(よくあるWindowsのファイル選択画面)でファイルを選択するとき、Shiftを押しながら右クリックすると「パスのコピー」が選択できます。
Function OpenWorkBook(FilePath As String) As Workbook
Dim wb As Workbook
Set wb = Workbooks.Open(FilePath)
Set OpenWorkBook = wb
End Function
コードを部品に分けることは大事ですが、さすがにやりすぎ感はあります。
実際は以下のように使うことが多いかと思います。
Sub test()
Dim filePath As String
filePath = "C:\Users\robin\vba\テスト用エクセルファイル\1.xlsx"
Dim wb As Workbook
Set wb = Workbooks.Open(filePath)
'選択したエクセルのA1セルの内容を表示
MsgBox wb.Worksheets(1).Range("A1").Value
'保存せずに閉じる
wb.Close SaveChanges:=False
End Sub
このコードでは1.xlsxのA1セルの値を表示します。
MsgBoxのところをしたい処理に書き換えてください。
filePathの内容を都度書き換えるのも面倒なので、ファイル選択ダイアログから取得するとなると以下のようになります。
Sub test()
Dim fileDialog As fileDialog
Dim filePath As String
' FileDialogオブジェクトの初期化
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
With fileDialog
' ダイアログのタイトル設定
.Title = "Excelファイルを選択してください"
' Excelファイルのみを表示
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm; *.xlsb"
' ファイル選択ダイアログの表示
If .Show = -1 Then
filePath = .SelectedItems(1)
End If
If filePath = "" Then
MsgBox "Excelファイルを選択してください"
End If
End With
Set fileDialog = Nothing
' ここまでのコードでfilePathにファイルパスが格納された
' 以降でwbをワークブックオブジェクトとして処理を実行するコードを書く
Dim wb As Workbook
Set wb = Workbooks.Open(filePath)
MsgBox wb.Worksheets(1).Range("A1").Value
wb.Close SaveChanges:=False
End Sub
単にファイル選択ダイアログからファイルパスを持ってくる処理だけでも長い記述が必要なものです。
Dim wb As Workbookより前は完全コピペでいいと思います。それ以降を書き換えてみて動作を確認してみてください。
また、ファイル選択ダイアログから直でワークブックオブジェクトを返すように書く方法もありますが、個人的にはファイルパスを返す方が使い勝手が良くて好きです。
Discussion