エクセルVBAでダイアログボックスを表示させ複数ファイルを1度に開く方法

こんにちは!「デザインもできるシステムエンジニア」のあつもり(プロフィール)です。今日も業務効率化のアイデアを発信していきます。

前回は「ダイアログボックスを使ってファイルを非表示で開く方法」を紹介しました。

エクセルVBAでダイアログボックスを使ってファイルを非表示で開く方法
ダイアログボックスを表示させてエクセルファイルを非表示で開く方法を紹介します。プログラムからエクセルファイルを開きたいけど、画面に表示させないでシート上のデータだけを取得したいという場合に役に立つ技です。Visibleプロパティを使うことでファイルを非表示にすることができます

今回は「ダイアログボックスを表示させ複数ファイルを1度に開く方法」を紹介します。

複数のファイルを一度に処理できると、次のようなことが出来るようになります。

  • 月単位で別れた勤務表ファイルから年間の集計表を作る
  • 複数ファイルの商品データをデータベースに一括登録する
  • 複数のテキストファイルをエクセルファイルとして保存しなおす

入力ファイルが1つならいいのですが、複数になるとその数だけプログラムを動かす必要があります。

しかし、複数ファイルを一度に処理することができればその手間がなくなるので、大幅な作業時間短縮につながります。

レクタングル大336×280

複数ファイルを一度に開くプログラムを作る

前回のプログラムを修正する

それでは実際にプログラムを作っていきます。

前回使用した「非表示でファイルを開く.xls」をコピーして「複数ファイルを開く.xls」を作成します。

サンプルコードを貼り付ける

標準モジュールのプロシージャ「OpenExcelFile」に下記のコードを貼り付けます。

プログラムコードの解説

重要なところに絞ってプログラムコードを解説します。

プログラムの全体の流れは以下のとおりです。

  1. ファイル選択ダイアログボックスを表示させる
  2. 選択したファイルのパスを取得して配列に入れる
  3. キャンセルボタンが押されたらプログラムを終了させる
  4. 配列に入れたパスの数ぶんファイルを開く

GetOpenFilenameメソッドのMultiSelectプロパティを使う

GetOpenFilenameメソッドの引数MultiSelectを使うことで、ダイアログボックスから複数ファイを選択できるようになります。

GetOpenFilename FileFilter, FilterIndex, Title, ButtonText, MultiSelect

MultiSelectにはTrueかFalseが入ります。

Trueを入れると複数ファイル選択可能になり、Falseを入れると1つのファイルしか選択できないようになります。

GetOpenFilenameメソッドの詳しい説明は過去の記事をご覧ください。

エクセルVBAでダイアログボックスを表示させ特定のファイルを1つだけ開く方法
エクセルVBAを使ってエクセルファイルを開く方法はアプリケーションを作っていくときに基本となる技です。業務効率化ツールを例に挙げても、まずはエクセルファイルを読み込ませて、そのデータを直接加工したり、参照したりする場合が圧倒的に多いので覚えておくと便利です。

キャンセルボタンが押されたときの処理を入れる

ここで注意しなければいけないポイントがあります。それはキャンセルボタンを押されたときの処理を入れることです。下記のコードを見てください。

プログラムコードでは8~9行目になります。

変数openFilePathにはGetOpenFilenameメソッドの戻り値が入ります。この戻り値には選択したファイルのパスが配列として格納されます。

しかしキャンセルボタンが押されたときはどうでしょう?

その場合、変数openFilePathにはFalseが格納されます。

Falseはブーリアン型です。一方ファイルのパスは文字列型です。

つまり、ファイルが選択された場合とキャンセルボタンを押したときでは、変数penFilePathに入るデータの形が変わるのです。

そのため、変数openFilePathはバリアント型で宣言しておきます。

バリアント型にしておけば自動的にデータ型を判別してくれるので、エラーにならず正しく処理されます。

プログラムコードでは4行目になります。

IsArray関数を使って配列かどうかを調べる

次にIsArray関数を使って変数openFilePathが配列かどうかを調べます。

IsArray(変数)

IsArrayは変数が配列かどうかを調べてくれる関数です。配列の場合は戻り値にTrueを返し、そうでない場合はFalseを返します。

今回のプログラムの場合、次のようにしてIsArray関数を使っています。

  • ダイログボックスで選択したファイルのパスを変数openFilePathに入れる
  • IsArray関数で変数openFilePathが配列かどうか調べる
  • 配列であれば、配列の数ぶんファイルを開く
  • 配列でなければ処理しない

ここで1点注意ですが、For Eachの制御変数ptはVariant型を宣言しています。ptにはファイルのパス、つまり文字列が入ります。しかしFor Eachの制御変数でString型は使えないので、Variant型を宣言しているというわけです。

プログラムコードの解説は以上です。

ダイアログボックスから複数ファイルを開くプログラムの動作確認

それでは実際に出来上がったプログラムを動かしてみましょう。

ワークシートの「エクセルファイルを開く」ボタンを押します。

ダイアログボックスが表示されたら、任意のフォルダを開き複数ファイルをドラッグで選択し、開くボタンをクリックします。

※GetOpenFilenameメソッドのMultiselectをTrueにしたことにより、この画面で複数ファイルの選択ができるようになります。

一度に3つのエクセルファイルが開きました。

まとめ

いかがでしたか?今回の内容をまとめます。

  • GetOpenFilenameメソッドの引数MultiSelectを使うと複数ファイルを選択できるようになる
  • プログラムの処理によって変数の型が変わる場合はバリアント型を宣言しておく
  • IsArray関数を使うと変数が配列かどうか調べることができる

複数ファイルの処理を取り入れることでプログラムの可能性が広がります。そして、開発者の工夫次第でオペレーターの作業時間が大幅に短縮されます。

とてもやりがいがあるのでぜひチャレジしてみてください。

レクタングル大336×280
レクタングル大336×280

シェアする

  • このエントリーをはてなブックマークに追加

フォローする