ダウンロードしてきたCSVファイルのデータを転記する場合など、別のファイルを開く場面はVBAでは頻繁に出てきます。
ファイルを開くには、「どこのフォルダに入っている」「なんという名前のファイルか」を指定してあげないといけません。
依頼を受けてVBAを作成する場合など、開きたいファイルがどこのフォルダに入っているかがわからない場合は、私はよく「ツールを入れているフォルダに、転記したいCSVファイルも入れてから実行してください」とお願いします。こうすることで、転記したいCSVファイルのパスをThisWorkbooks.pathを使って取得できるからです。
ただ、作業環境によってはファイルの移動ができない場合などもあるので、そのような場合は今回の方法でファイルのパスを取得しています。
というわけで今回は、開きたいファイルの選択を、実行した人にしてもらうためコードを紹介します。
サンプルコード
早速コードを紹介していきます。今回はかなりシンプルなコードなのでサクッと3ステップで実行できます。
- ダイアログを開く
- ファイルが選択されなければ実行をストップ
- ファイルが選択されたらそのファイルのパスを取得
です。
実際のコードはこんな感じになっています。
Sub SelectFile()
Dim FileName As String
'ダイアログを開いてファイルを選択してもらう
FileName = Application.GetOpenFilename("CSV ファイル (*.csv),*.csv")
'キャンセルボタンを押した場合はSubから抜ける
If FileName = "False" Then Exit Sub
'選択したファイルを開く
Workbooks.Open FileName
End Sub
Step1
Application.GetOpenFilenameというものを使って、ファイルを選択するためのダイアログを開きます。
ダイアログとは上のような画面のことを指しています。
実行するとこのようなダイアログボックスがでてきて、その画面上で開きたいファイルを使用者に選んでもらう形です。
パソコンを使っている人からすると、見慣れた画面なので操作に迷うこともないのが良いところですね(^^)
“CSV ファイル (.csv),*.csv”の部分は、どの種類のファイルを表示するかを設定しています。今回はCSVファイルだけを開く設定にしてみました。
他にも
- “Excel ブック,*.xls?”
- “Text Files (.txt), *.txt”
などがあります。上はエクセルファイルだけに限定、下はテキストファイルに限定しています。
また、“ファイル, *.txt;*.xls?”という感じでセミコロンで拡張子を繋ぐことで、複数の拡張子のファイルを開くこともできます。
Step2
ダイアログ上でキャンセルボタンを押した場合、ファイルが取得できないので戻り値はFALSEになります。その場合はStep3の”ファイルを開く”ができなくなりますので、ここで実行を止める必要があります。
そのため、戻り値がFALSEの時はExit Subで実行から抜けるコードを書いています。
Step3
Workbooks.Openを使って選択したファイルを開きます。
解説動画
動画にて解説をしております。実際の画面を見ながらの方がわかりやすいと思いますので、ぜひこちらも見てみてください。
まとめ
今回はダイアログを開いて、ファイルを使用者に選択してもらうためのコードを紹介しました。
自分で使う場合はThisWorkbooks.pathを使ったり、セルにパスを書いておいて実行するなどいろいろな手段が取れますが、他の人が使う場合で任意のファイルを選んでもらう必要があるときにとても有効です。
この記事がどなたかの参考になれば嬉しいです!
お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば3万円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから承ります。
コメント