はじめに
今回は、VBAでファイルを読み込み、読み込んだデータを別のExcelファイルに展開する方法について勉強しました。
使用環境は以下のとおりです。
- 使用OS: Windows 10 Pro
- バージョン: 20H2
背景
VBAプログラムを使って、外部ファイルを選択して読み込み、
そのデータを別のExcelファイルに展開する流れを作りたいと考えました。
実際に行った処理
以下のコードで、ファイル選択から読み込みまでを行うことができました。
' ファイル読み込み
Set xlAPP = Application
vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:="データを選択してください。")
strFileName = vntFileName
If strFileName = "False" Then
MsgBox "処理を中断しました。", vbInformation
Exit Sub
End If
' ファイルを開く
Workbooks.Open Filename:=strFileName
strFileName = Dir(strFileName)
コードの解説
1行目:Application
オブジェクトをxlAPP
という変数にセットしています。
2行目:GetOpenFilename
メソッドを使って、ユーザーにファイル選択ダイアログを表示させています。
FileFilter
は、ファイルの種類を指定するためのフィルターです(たとえば「Excelファイル(*.xlsx), *.xlsx」など)。Title
は、ダイアログに表示されるメッセージです。
選択されたファイルのパスは、vntFileName
に格納されます。
3行目:
選択したファイルパスをstrFileName
変数に格納します。
4〜7行目:
ファイル選択をキャンセルした場合、strFileName
は”False”となるため、
このときはメッセージボックスを表示して、処理を中断するようにしています。
8行目:Workbooks.Open
メソッドを使って、指定したファイルを開きます。
9行目:Dir
関数を使って、ファイルパスからファイル名部分だけを取得し、strFileName
に上書きしています。
(以後、ファイル名だけで操作しやすくするためです。)
この後の展開
ここまでで、strFileName
には開いたファイル名が入っている状態になります。
この後は、
Workbooks(strFileName).Activate
で開いたファイルをアクティブにし、- 必要なデータを抽出して、
ThisWorkbook
(マクロを実行しているブック)に展開する
といった作業に進むことができます。
まとめ
GetOpenFilename
でファイル選択ダイアログを表示できる。Workbooks.Open
で指定したファイルをプログラムから開ける。- 変数に格納しておくことで、後続処理(データ抽出・展開)がスムーズになる。
今回の作業を通じて、VBAでファイルを読み込み、データを操作する基本フローを習得できました。
今後は、さらにエラー処理やファイル未存在時の対応なども加えて、より実用的なコードにしていきたいと考えています。