検索

キーワード


【Excel VBA】ダイアログボックスより処理に必要なファイルを選択する方法

  • 公開日:2021-03-16 21:44:45
  • 最終更新日:2021-05-26 09:48:30

はじめに

こんにちは。IMMRです。


VBAでは、ブック内のセルに記載された数値や文字に対する処理だけではなくて、

他のファイル(テキストファイルやブックファイル)を読み込んで処理を行うことも出来ます。

ファイルを読み込むときは、もちろんファイル名を記述するのですが、

直接ファイル名は記述しないほうがよいのです。

なぜなのか。という理由そして、対処法について説明していきます。


1.ファイルを指して処理を行う方法

ファイルと言っても種類は多数あります。テキストファイルブックファイル等です。

ここでは、テキストファイルを例とします。

テキストファイルを指定するサンプルコードは以下になります。


サンプルコード(テキストファイルを指定する)

    Dim mybuf As String

    Open "C:\VBA\LogData\AA0001.txt" For Input As #1
        Do Until EOF(1)
            Line Input #1, mybuf

処理のブロック

        Loop
    Close #1


Open "C:\VBA\LogData\AA0001.txt" For Input As #1

 ・読み込みたいファイルの名前を記載する


Do Until EOF(1)

 ・読み込んだテキストファイルを最初の行から最後の行まで読み込む


Line Input #1, mybuf

 ・1行ずつ、mybufにセットする


Loop

 ・読み込んだテキストファイルを最初の行から最後の行まで同じ処理を行う


Close #1

 読み込んだテキストファイルをクローズする


といった形になります。


上記、サンプルコードでも問題なく処理を行うことが出来ます。

しかし、この場合だと「Open "C:\VBA\LogData\AA0001.txt" For Input As #1」となっているため、

ファイル名が固定になります。

そのため、毎回同じファイル名で処理を行うなら問題ないのですが

処理を行うたびに違うファイルを使用する場合はファイル名直さなくてはいけません。


毎回毎回処理を行うたびにコード内の修正をすると手間がかかったり、下手をするとファイル名を記述中に

処理文をいじってしまう恐れも出てきます。

そういうときは、ダイアログボックスを使用するのが一つの方法です。


ダイアログボックスを処理開始前に表示することによって、処理対象となるファイルを選択する方法です。


2.ダイアログボックスより処理に必要なファイルを選択する

ダイアログより処理に必要なファイルを選択する方法は以下の通りです。


ダイアログを表示するコード

Dim Filename As String
    
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = "C:\VBA\LogData"
         If .Show = 0 Then Exit Sub
            Filename = .SelectedItems(1)
    End With


Application.FileDialog(msoFileDialogFilePicker)

 ・ファイルを選択するダイアログを表示します。


.InitialFileName = "C:\VBA\LogData"

 ・ダイアログを表示するパスを記入します。ここでは、「C:\VBA\LogData」を対象とします。 ※下記のような感じてす。


図1  指定したフォルダ

指定したフォルダ

If .Show = 0 Then Exit Sub

 ・何も選択されなかったら処理をやめます。


Filename = .SelectedItems(1)

 ・ダイアログボックスで選択されたファイルを変数(Filename)に格納します。


一度、上記のコードで実行してダイアログボックスが表示されるか確認します。


図2 ダイアログボックスの表示 

ダイアログボックスの表示


ダイアログボックスが表示され、ファイルが選択できるようになっています。

当然ですが現在のコードでは、ダイアログを表示しファイルを選択。

その後に変数(Filename)に格納するだけなので、ファイルを選択したら処理が終わってしまいます。

そのため、本当に選択したファイルが変数(Filename)に格納されているかわかりません。


そのため、ここではコードにメッセージボックス追加します。

これにより、で変数(Filename)に洗濯したファイルが格納されているか確認出来ます。


ダイアログを表示するコード2(メッセージボックスを追加)

Dim Filename As String
    
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = "C:\VBA\LogData"
         If .Show = 0 Then Exit Sub
            Filename = .SelectedItems(1)
    End With

MsgBox Filename


上記で表示した「ダイアログを表示するコード」の最後に、変数(Filename)に

格納された値を確認するためにMsgBox Filename」を追加しました。



再度、実行します。


図3 ダイアログボックスの表示

ダイアログボックスの表示


ダイアログボックスでファイルを選択します。

ここでは、「CC0001」を選択します。


図4 ダイアログボックスでファイルを選択

ダイアログボックスでファイルを選択


図5 メッセージボックスで選択したファイル名の表示

メッセージボックスで選択したファイル名の表示


選択されたファイル名が表示されました。

これでダイアログで選択したファイル名が変数(Filename)に格納させる確認をすることが出来ました。


3.ダイアログボックスより処理に必要なファイルを選択するサンプルコード

上記の方法より、ダイアログより処理に必要なファイルを選択するコードに変更していきます。

まず、テキストファイル名を直接記述したコードの部分(赤枠)を変更します。


図6 開くテキストファイル名を直接記述したコード

開くテキストファイル名を直接記述したコード



そして、ダイアログボックスを表示するコードを追加します。

追加するのは紫枠です。そして、ファイル名を取得した変数「Filename」を先ほどの開くテキストファイル名を直接記述したコードの

赤枠に来るようにします。これにより、ファイルを選択して、

今までと同じ処理をダイアログで選択したファイルで行うことが出来ます。


図7 ダイアログより開くテキストファイル名を選択するコード

ダイアログより開くテキストファイル名を選択するコード


最後に変更したサンプルコードを記載します。


Sub Test23()

Dim Filename As String
    
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = "C:\VBA\LogData"
         If .Show = 0 Then Exit Sub
            Filename = .SelectedItems(1)
    End With

    Open Filename For Input As #1
        Do Until EOF(1)
            Line Input #1, mybuf

処理ブロック

        Loop
    Close #1

End Sub


※.InitialFileName = "C:\VBA\LogData"の箇所はダイアログを表示させるパスなので各自、変更が必要です。


これによって、ダイアログより処理に必要なファイルを選択することができるようになりました。


【著者】

Imamura

今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。

よく読まれている記事