【ExcelVBA】指定のファイルを開く方法&ダイアログで指定する方法を解説!

あるファイルを開く処理がしたい。
アプリみたいにダイアログを開いて、ファイルを選びたい。

今回は上記のようなVBA処理を解説します。

目次

Excelファイルを開く方法

Workbooks.Open (“ファイルパス”)

まずは基本的な操作で開いてみましょう。

Option Explicit

Sub test()

Workbooks.Open ("C:\Users\test\Desktop\test.xlsx")

End Sub

ファイルパスを書くだけですね。

ファイルパスの取得方法

ファイルパスを確認方法ですが、指定のファイルを選択し、『パスのコピー』という項目をクリックすればOKです!

VBAを実行しているブックから読み解く

Application.ThisWorkbook.Path

↑でVBA実行ブックのフォルダパスまで取れます。

Sub test()

 Dim filepath As String
    
    filepath = Application.ThisWorkbook.Path

    MsgBox filepath & "\test.xlsx"

End Sub

同じフォルダ内にあるのであれば、あとは\ファイル名でOKですね。

開いているブックのフォルダパスの場合

Application.ActiveWorkbook.Path

使い方は上記と一緒です。

ごり子

保存前のブックであれば空白になるよ!

ダイアログを使ってファイルを指定して開く方法

GetOpenFilenameメソッドを使います。

Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

項目解説
FileFilterファイルの種類を指定します。Excelであればxlsxとかです。
FilterIndex↑で指定したファイルの中でどれを規定値にするかを決められる。
Titleダイアログのタイトル。規定値は”ファイルを開く”です。
ButtonTextMac用の指定値です。
MultiSelectファイルの複数選択をOKとするかです。規定値はFalseです。

基本的にはFileFilterぐらいしか使わないです。
↓みたいに使います。
Application.GetOpenFilename(FileFilter:=”Excelファイル,*.xlsx”)

実際に使う際には省くことも多いです。

Sub test()

'ダイアログ開く
Dim filepath As String
filepath = Application.GetOpenFilename("Excel,*.xls*,CSV,*.csv")

If filepath <> "False" Then

    Workbooks.Open (filepath)

    Else
    MsgBox "キャンセルします"
    Exit Sub
    
End If

End Sub

:=は引数だから

なぜ=ではなくて、:=かというと引数だからです。
イメージ的には引数という名の変数に入れる際は:=を使うと思っておけばいいと思います。

指定したブックを変数に入れて使ってみる

指定したブックを変数に入れることもできます。

Sub test()

'ダイアログ開く
Dim filepath As String
Dim wb As Workbook

filepath = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx")


If filepath <> "False" Then
    Set wb = Workbooks.Open(filepath)
    
    Else
    MsgBox "キャンセルします"
    Exit Sub
    
End If

wb.Sheets(1).Range("A1") = "開けたよ"

End Sub

Setを使うことを忘れないでください。
オブジェクト変数の場合はSetになります。

閉じる方法

開いたら閉じたくなります。

ブック名.Save
ブック名.Close

上記でOKですが、変更を保存しますかと出てくるのがうっとうしいです。
通知は切っておきましょう。

Application.DisplayAlerts = False
Application.DisplayAlerts = True

Sub test()

'ダイアログ開く
Dim filepath As String
Dim wb As Workbook

filepath = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx")


If filepath <> "False" Then
    Set wb = Workbooks.Open(filepath)
    
    Else
    MsgBox "キャンセルします"
    Exit Sub
    
End If


wb.Sheets(1).Range("A1") = "開けたよ"

Application.DisplayAlerts = False
wb.Save
wb.Close
Application.DisplayAlerts = True

End Sub

保存したくないならSaveしなければOKです!

ビジネスパーソンがいま読むべき本を厳選!

Audible (オーディブル) – 本を聴くAmazonのサービス

オーディオブック聴き放題なら – audiobook.jp

ごり子

読んでくれてありがとう!

コメント

コメントする

目次