Excel VBA ダイアログボックスからファイルを選択して開く | GetOpenFilename
仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。
効率的なコードが書けていない可能性もありますので、予めご了承ください。
今回はGetOpenFilenameを使用し、ダイアログボックスからファイルを指定し開く方法を紹介したいと思います。
使用ケース
ダイアログボックスからファイルを選択して開くを使用するケースとして、私が使用しているのは以下のようなケースです。
・ファイルA・・・日々変化する複数項目の数値を、人毎・月毎にまとめたファイル
・ファイルB・・・特定の人だけの、一部の項目だけを参照するファイル
ファイルBにVBAを設定し、集計したい月のファイルAのデータを選択し取り込むことで、特定の人の集計を簡単にできるようにしています。
サンプルコード
まずは最低限のサンプルコードです。
カレントフォルダ設定のアドレスを変更すれば、基本的にコピペで使用可能です。
Declare Function SetCurrentDirectory Lib "kernel32" Alias _
"SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long
Sub fileopen()
Dim varFileName As Variant
SetCurrentDirectory "C:\Users\Owner\Desktop\test" 'カレントフォルダ設定
varFileName = Application.GetOpenFilename(FileFilter:="EXCELファイル(*.xlsx; *.xlsm;),*.xlsx", Title:="ファイルの選択")
If varFileName = False Then
MsgBox "読込を中止します。"
Else
Workbooks.Open varFileName, ReadOnly:=True, UpdateLinks:=False
End If
End Sub
コード解説
Declare Function SetCurrentDirectory Lib "kernel32" Alias _
"SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long
まずはDeclare ステートメントです。
この部分がネットにはほとんどのってなくて、とても苦労しました。。。
Declare ステートメントとは、「外部ファイル内で実装されているプロシージャへの参照を宣言します。」というものらしいです(気になる方はお調べくださいw)。
なぜファイル選択で必要なのか分かりませんでしたが、私の職場・自宅のPCでは、Declare ステートメントを記載しないとエラーになってしまいました。
VBAのみならずプログラミングのあるあるですが、おまじない的なものだと考えています。
SetCurrentDirectory "C:\Users\Owner\Desktop\test"
カレントフォルダ設定では、VBAを実行した際に、表示されるフォルダを予め指定する際に設定します。
こういったマクロを組む際、選択するファイルが格納されているフォルダは固定されていることが多いのではないかと思います。
カレントフォルダを設定しなかった場合、マクロを実行する度にファイルがあるフォルダまで進んでいく必要があり、とても手間です。フォルダを固定する必要がなければ不要ですが、固定されている場合は設定をおすすめします。
varFileName = Application.GetOpenFilename(FileFilter:="EXCELファイル(*.xlsx; *.xlsm;),*.xlsx", Title:="ファイルの選択")
メインのGetOpenFilenameメソッドですが、これでファイルが選択可能となります。
FileFilter:=""で、表示されるファイル種類の限定が可能です。
If varFileName = False Then
MsgBox "読込を中止します。"
Else
Workbooks.Open varFileName, ReadOnly:=True, UpdateLinks:=False
End If
最後にファイルの展開と、中止した場合の処理をifで分岐しています。
ファイルを展開する場合、元データを取得したいだけなので、ReadOnly:=Trueで読み取り専用で開いています。
あとは目的に応じて、開いた後の処理を書けばOKです!
ちなみに私は元データ(ファイルA)のシートを全コピーし、集計ファイル(ファイルB)の指定シートへ貼り付けし使用しています。
ユーザーフォームを使用した入力フォームの作り方
週ごとに縦に並んだ表を横並びにする方法 | Find&Set
セルに入力された日付を取得し自動でシートとファイルを作る方法
検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect
ブックを開いた時のウィンドウサイズを指定する方法 | workbook_open
新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction
複数のワークシートをまとめて表示・非表示にする方法 | Visible Not.Visible
セル位置が変わっても特定の範囲を選択する方法 | Find&Address
電話番号からハイフンを削除し0から表示させる方法 | Evaluate&Replace
ダイアログボックスからファイルを選択して開く | GetOpenFilename