【Excelマクロ】メッセージボックスの表示

Excelマクロ

 Excelの操作時に、下図のようなメッセージボックスを何度も見かけたことがあるだろう。

 マクロを使うと、任意のタイミングでこのメッセージボックスを表示させることもできる。

 今回は、前回作成したマクロにこのメッセージボックスを表示させるコードを実装し、データ取得ファイルの使い勝手の向上を目指す。

Microsoft Excel 2019の利用を想定しています。

サンプル

 今回使うサンプルは下記ボタンから入手可能である。

 圧縮ファイル内のマクロ「exp4_comp.xlsm」のベースは、前回作成したデータファイルの取得マクロと同じである。

 今回はメッセージボックスを表示させるコードを中心に解説し、それ以外のコードの詳細については上記記事を参照してもらうことにする。

コード詳説

 今回は、データファイルを取得するマクロにメッセージボックスを表示するコードを追加した。

Sub データファイルの取得()

    Dim FD As FileDialog
    Dim FolderPath As String
    Dim myFile As String
    Dim FileEx As String
    Dim i As Long
    Dim j As Long
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    FileEx = Worksheets(1).Cells(3, 7).Value
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    
    If FileEx = "" Then
    
        MsgBox "データファイルの拡張子を指定してください。", vbExclamation
        
    ElseIf FD.Show = True Then
        FolderPath = FD.SelectedItems(1)
        myFile = Dir(FolderPath & "\*." & FileEx)
        i = Worksheets.Count
        j = Worksheets.Count
        
        If FileEx <> "" Then
        Do While myFile <> ""
           
            Workbooks.OpenText Filename:=FolderPath & "\" & myFile
            Cells.Select
            Selection.Copy
            ActiveWindow.Close
            
            Sheets.Add After:=Worksheets(i)
            
            With Worksheets(i + 1)
                .Name = myFile
                .Paste
                .Hyperlinks.Add Anchor:=Cells(1, 5), _
                                        Address:="", _
                                        SubAddress:="'" & Worksheets(1).Name & "'" & "!A1", _
                                        TextToDisplay:=Worksheets(1).Name
                .Cells(1, 1).Select
            End With
            
            With Worksheets(1)
                .Activate
                .Hyperlinks.Add Anchor:=Cells(i + 7, 2), _
                                        Address:="", _
                                        SubAddress:="'" & Worksheets(i + 1).Name & "'" & "!A1", _
                                        TextToDisplay:=Worksheets(i + 1).Name
            End With
            
            myFile = Dir()
            i = i + 1
        Loop
        
        End If
        
        If FileEx <> "" And i = j Then
            MsgBox "指定した拡張子のファイルがありません。", vbExclamation
        End If
        
    End If
    
    Worksheets(1).Cells(1, 1).Select
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
End Sub

 

 コード自体はそこまで複雑なものではなく、基本は

MsgBox “テキスト”

を記述することで、テキスト込みのメッセージボックスを表示させることができる。

 テキストの後ろに引数を追加することもでき、引数によって表示やボタンの種類を指定することもできる。

 

 ではここで、実際に実装したコードを見ていく。

 今回追加したメッセージボックスは2つある。

    If FileEx = "" Then
    
        MsgBox "データファイルの拡張子を指定してください。", vbExclamation
        
    ElseIf FD.Show = True Then

 もともと分岐構文の始めは「FD.Show = True」(ダイアログボックスが表示されて「OK」ボタンが押される)だったが、その前に1つ目のメッセージボックスを表示する分岐を入れている。

 「FileEx = “”」すなわちファイルの拡張子を入力する欄が空欄である場合は、ダイアログボックスを表示する前に「拡張子が指定されていないから探せません。指定してください」という警告を出すようにした。

 引数として「vbExclamation」を追加すると、警告のマーク(黄色の三角形に感嘆符)がメッセージボックスに表示される。

 実際のメッセージボックスは下図のようになる。

 

        If FileEx <> "" And i = j Then
            MsgBox "指定した拡張子のファイルがありません。", vbExclamation
        End If

 2つ目は、拡張子は指定されているが、選択したフォルダ内に指定した拡張子のファイルが存在しない場合に「ファイルが見つかりません」と警告するようになっている。

 拡張子が指定されている必要があるため、条件に「FileEx <> “”」(ファイルの拡張子を入力する欄が空欄以外である)がつく。

 もう1つの条件「i=j」だが、最初はiとj両方にデータファイル取り込み前のシート数が格納される。

 しかしその後、iには取り込まれたデータファイルの数が加算されるが、jには何も加算されない。

 もし指定した拡張子のファイルが存在すれば、iは初期値より大きな値となり、最終的にはi≠jとなるはずである。

 これは裏を返せば、i=j(iが初期値から動いていない)ならばデータファイルが取り込まれていない、すなわち指定したフォルダ内に指定した拡張子のファイルが存在していないことになる。

 実際のメッセージボックスは下図のようになる。

終わりに

 今回はメッセージボックスを表示させるようにして、よりアプリに近い感覚で使えるようにマクロをブラッシュアップした(そこまで大げさなものではないが)。

 次回は、取り込んだ生データから必要なデータを抽出して表示させる機能を追加しようと思う。

 

 END

コメント

タイトルとURLをコピーしました