VBA

【ExcelVBA】ファイルを開くダイアログで別ファイルの処理をする(GetOpenFilename)

ねぇもりさん、Excel作業をマクロ化したいんだけどさ、処理対象のファイルの形式(.xlsx)は変えたくないんだよね
もり
もり
それなら、「処理対象のファイル」と「マクロファイル」を分けよう

 

Excel作業をマクロで自動化するには、おもに2つのパターンがありますね。

①処理対象のファイルにマクロを含ませる(一体化)

ファイルを開くダイアログ1

 

②処理対象のファイルとマクロファイルを別々に分ける

ファイルを開くダイアログ2

(①のほうが便利ですが、会社の色々な事情で一体化すると都合の悪いこともありますよね)

「処理対象のExcelファイル(.xlsx)」 と 「マクロファイル(.xlsm)」 を分ける方法を紹介します。

GetOpenFilenameメソッドで「ファイルを開くダイアログ」を出現させ、ユーザが処理対象のファイルを選択する

→そのファイルに対してマクロ処理する

という流れです。

ユーザが選択したファイルに対して処理を実行する方法

1ファイルに対して処理をする

まずはこのパターンです。

ファイルを開くダイアログ2

コードがこちらです。

マクロを実行すると、ファイルを開くダイアログが登場します。

ファイルを開くダイアログ4

変数fNameには、選択したファイルのフルパスが格納されます。

ファイルを開くダイアログ5

ファイルが選択されなかった場合(ユーザがキャンセルした場合)、文字列型のFalseが返ります。

GetOpenFilenameメソッドは、「ユーザが指定したファイルのフルパス」を取得するのみで、ファイルを開く操作までは行いません。

ファイルを開く処理は、WorkBooks.Openメソッドで実行します。

Set wb = Workbooks.Open(fName)で、「開いたファイル」を「変数wb」にオブジェクトとして格納するので、あとはwbに対する処理を記述すればOKです。

たとえば、こんな記述をすると、

wb.Sheets(1).Range("A1").Value = "Hello World"

ユーザが選択したファイル(wb)に対して、ちゃんと処理が実行されているのを確認できます。

ファイルを開くダイアログ6

複数ファイルを一括選択・処理する

ユーザが選択した複数のファイルに対して、同一の処理を繰り返し行うパターンです。

たとえば、社内の各部署から回収した同一形式のExcelファイルに対して同一のマクロを実行する場合、1ファイルずつ選択するのは面倒くさいですよね。

下記のように、複数ファイルをまとめて処理することも可能です。

ファイルを開くダイアログ3

コードがこちらです。

ファイルを開くダイアログで、処理対象のファイルをすべて選択します。

【複数ファイルの選択方法】Shiftキー または Ctrlキー を押しながらファイルを選択します。

ファイルを開くダイアログ7

GetOpenFilenameメソッドのオプション MultiSelect:=True(複数ファイル選択可)とした場合、その返り値は「配列形式」です。

そのため、あらかじめ変数fNameをVariant型で宣言しています。

ファイルを開くダイアログ8

ユーザがキャンセルした場合はBoolean型のFalseが返ります。

ファイルを開くダイアログ10

GetOpenFilenameの返り値が「配列形式」という特性を利用して、「変数fNameが配列であるか否か」でキャンセル判定をします。

If Not IsArray(fName) Then

※GetOpenFilenameメソッドのオプションで MultiSelect:=True(複数ファイル選択可) とした場合、選択されたファイルが1つのみでも、返り値は配列形式です。

まとめ

「ファイルを開くダイアログ」を使うと、処理対象のファイルとマクロファイルを分けることができる。

処理対象のファイルの形式(.xlsx)を変えたくない場合や、同一フォーマットのExcelファイルに同一処理を実行したい場合に便利!

非エンジニアもプログラミングを学習する時代!

「プログラミング」ってエンジニアとかプログラマーの人がするものでしょ?文系の私には関係ないや~って思っていませんか?

いまは、非エンジニアもプログラミングを学習する時代です!

「プログラミングの必修化」をご存知ですか?

  • 2020年~ 小学校で開始
  • 2021年~ 中学校で開始
  • 2022年~ 高等学校で開始
  • 2024年~ 高校受験科目に新設

学校での必修化に向けて、すでに子ども向けプログラミングスクールが多数開校されています。

あと数年もすれば、あたりまえにプログラミングができる新入社員がやってくる時代になります。

プログラミングってなに?どんなもの?まずは無料体験から試してみませんか?

 

1週間の無料体験あり!
オンラインスクール実績No.1!