【VBA入門】ファイルを選択のためのGetOpenFilename関数とは

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでファイル選択ダイアログを使ってファイルを選択する方法を知っていますか?データを取り込む処理を作る場合など、ファイルを指定して処理を動かしたいときにとても便利です!

そこで今回は、

  • GetOpenFilenameメソッドを使ってファイルを選択する方法

といった基礎的なことから、

  • GetOpenFilenameメソッドを使ったサンプルコード
  • データ取り込み機能を作るときに覚えておくと便利な知識とは

といった応用的な方法まで、徹底的に解説します!

目次

GetOpenFilenameメソッドを使ってファイルを選択する方法

はじめに、GetOpenFilenameメソッドの基礎的な使い方について解説します。GetOpenFilenameメソッドを使うと、つぎのようなファイル選択ダイアログを使うことができます。

データ取り込み・ファイル削除など、ファイルを指定した処理を作りたいときに使います。GetOpenFilenameメソッドは、次のように使います。

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

プロパティごとの使い方一覧:

Noオプション意味
1FileFilterファイルの種類(拡張子)の指定ができる
2FilterIndexFileFilterで指定したフィルタ文字列の中で、最初に表示する種類を番号で指定できる
3Titleダイアログのタイトルを変更できる
4MultiSelectファイルの複数選択可に変更ができる(Trueが複数選択可)

FileFilterについては少しわかりづらいので、補足しますね。

FileFilterの使い方

FileFilterは、ファイルを開くときに選択する拡張子のリストを追加することができるオプションです。

「表示名 , *.拡張子」を1つのセットとして、指定します。.xlsxと.csvの拡張子のファイルを選択できるようにする場合は、次のような書き方になります。

サンプルコード:

Sub Test()
  Dim strFilePath As String
  strFilePath = Application.GetOpenFilename(Filefilter:="Excelブック,*.xlsx,CSVファイル,*.csv")
End Sub

実行結果:

「Filefilter:=”Excelブック,*.xlsx,CSVファイル,*.csv”」と指定することで、「.xlsx」「.csv」の拡張子を指定したファイルを開くリストを2つ表示しています。このように、ファイルのタイプを拡張子で指定するリストを設定することができます。

フォルダを開く初期位置を変更する方法

GetOpenFilenameメソッドはそのまま使うと、マクロを実行しているフォルダが初期値として開かれてしまいます。そのため、ファイル選択画面で最初に開くフォルダを変更したい場合は、ChDir関数でフォルダの位置を変更するのがおすすめです!

GetOpenFilenameメソッドでファイル選択ダイアログを開く前に、ChDir関数でフォルダパスを指定しておくことで、指定したフォルダでファイル選択ダイアログを開くことができます。ChDir関数の使い方はつぎのとおりです。

ChDir関数の使い方サンプル:

Sub Test()
  'フォルダ位置移動
  ChDir "C:UsersSiroDesktopExcelVBA"
  
  Dim strFilePath As String
  strFilePath = Application.GetOpenFilename(Filefilter:="Excelブック,*.xlsx,CSVファイル,*.csv")
End Sub

実行結果:

このように、簡単にフォルダの初期位置を変更することができます!

GetOpenFilenameメソッドを使ったサンプルコード

次に、サンプルコードをもとに、具体的な使い方を解説します。ファイル選択後に指定したファイルを削除するサンプルコードです。

サンプルコード:

Sub Test3()
  'ファイルパスを取得
  Dim strFilePath As String
  strFilePath = Application.GetOpenFilename(Filefilter:="Excelブック,*.xlsx,CSVファイル,*.csv")

  '取得したファイルを削除
  Kill strFilePath

  '削除完了メッセージ表示
  msgbox strFilePath & vbcrlf & "の削除が完了しました。"

End Sub

実行結果:

このように、GetOpenFilenameメソッドを使って選択したファイルを使って、簡単に処理を作ることができます。ちなみに、サンプルで使ったKillステートメントでファイルを削除する方法、MsgBox関数を使ってメッセージを表示する方法については、以下記事で詳しく解説しています。

気になる方は、ぜひ見てみてくださいね!

補足:データ取り込み機能を作るときに覚えておくと便利な知識とは

ファイルを指定して処理を作るときは、ファイルの削除以外にも、別のブックやCSVファイルからデータを取り込みたいときもありますよね。そのため、ファイル取り込み処理を作るための知識を合わせて覚えておくのがおすすめです!

ユーザーフォーム、QueryTablesメソッドを使えば簡単にデータインポートツールを作ることができます。

ユーザーフォームで作った画面サンプル:

画面を作るためのユーザーフォームの使い方、ファイルを高速にインポートするためのQueryTablesメソッドの使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

まとめ

今回は、ファイル選択ダイアログを使うためのGetOpenFilenameメソッドの使い方を解説しました。別のCSV、Excelなどのファイルからデータをインポートするケースはよくあります。

今回解説した方法はどれも簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次