ファイル を 指定して開く ②【Excel VBA 】
Excel VBA で ファイル を 指定して開く 方法はいくつかありますが、データを取得するExcelファイルの保存先が毎回違う場合や、ファイル名が変わる場合は、固定した取込みはできません。完全自動化はできませんが、時と場合によっては、都度指定する場合が良い場合もあります。
目的:Excel VBAを使ってファイルを操作する
要件:Excel VBAの仕様環境があること
結果:異なるファイルを操作する技術を取得する
今開いているExcelから違うExcelファイルを指定して、データを取得したいです。
以下に代表的なやり方をご説明します!
やりたいこと
別のファイル(Excelデータ)の情報を取り込む
手段
- ファイル名をプログラムソースの中に書き込んで取り込む方法
メリット:都度ファイルを選択せず自動的に取得するので操作の手間が削減されます。
デメリット:ファイル名や保存先が異なると取り込みエラーとなります。 - ファイルの保存先・ファイルを都度選択して取り込む方法
メリット:ファイル名に日付情報などを記載しているファイルでも取り込み可能。
デメリット:都度保管先・ファイル名の指定が必要なので自動処理には不向き。
別のファイルからデータを取得する流れを意識して適宜使い分けることが必要です。
サンプルソース(コード)
今回は2.ファイルの保存先・ファイルを都度選択して取り込む場合です。
(『1.ファイル名をプログラムソースの中に書き込み完全自動』はこちらから)
Sub FileOpenSample2()
Dim FileName As String
FileName = Application.GetOpenFilename _
("Microsoft Excelブック,*.xlsx?",Title:="ファイルを選択してください")
If FileName <> False Then
Workbooks.Open FileName
End If
End Sub
ソースコード的の説明をします。
#4行目の関数 Application.GetOpenFilename を使います。ExcelVBAが予め準備してくれている、ファイルを選択する別ウィンドウを開くコマンドです。
その後の “Microsoft Excel~ でExcelファイルのみの絞り込みをしています。
他のファイルを開く場合、例えば、CSVファイルは、*.csv?と記載すれば、CSVファイルの絞り込みもできます。
,TItle:=~ は、開いた別ウィンドウの上部のタイトルを設定します。(省略可です。)
上記関数を使用するために、FileNameという引数(箱)を設定しています。
- #2・・・FileNameの引数宣言
- #4・・・関数を使って、ファイルを選択する。
- #5・・・もし(If~)FileNameが空白以外(選択された)なら(~<>False)
- #6・・・指定したファイルを開く
という処理になります。
引数をうまく使って処理するのですね。
ちなみに既に同じファイルを開いていたらどうなりますか?
エラーになって処理が止まります。
良いところに気が付きましたね。
エラー判断方法にもいくつか方法がありますのでご説明します。
~~関連~~
[https://way2se.ringtrees.com/excel_vba-004]