【VBA】開いているブックを選択させるプログラム

2022年10月1日

マクロでデータ処理をしていると、データブックとマクロブックを分けたいケースがよく出てきます。

例えば、毎回システムからデータブックをダウンロードして処理していると、データブックにマクロを残すことはできません。

そうなるとマクロブックは固定しておいて、データブックを選択してマクロを実行させたくなります。

今回はこのデータブックの選択をマクロから行う便利なプロシージャを紹介します。

データ処理をよく行う方は参考にしてみてください。

開いているブックを選択させる動作イメージ

先にプログラムを実行した時のイメージを紹介します。

開いているブックを選択させる

このプログラムを実行すると、開いているブックの1つがアクティブとなりメッセージが表示されます。

ここで「はい」を押すと処理したいブックが確定する、という仕組みです。

「いいえ」を押すと開いている違うブックに対して同じようにメッセージを表示されます。

開いているブックを選択させるプログラム

Sub Sample()
    Dim wb As Workbook
    Set wb = SelectOpenWorkBook("に対してマクロを実行しますか?", True)
End Sub
Function SelectOpenWorkBook(strRearMsg As String, Optional blExceptThisWorkBook As Boolean = True) As Workbook
    '''開いているワークブックを順番に表示し、選択されたブックを返す
    '''選択なし:Nothingを返す
    '''strRearMsg:ブックを確認する際のメッセージ
    '''blExceptThisWorkBook:Trueの場合はThisWorkBookを候補にしない
    
    Dim oneWb As Workbook
    For Each oneWb In Workbooks
        
        ''blExceptThisWorkBookがTrueでThisWorkbookの場合はスルー
        If blExceptThisWorkBook And (oneWb.Name = ThisWorkbook.Name) Then GoTo Continue
        
        ''ワークブックを1つずつアクティブにし、目的のブックか確認
        oneWb.Activate
        If MsgBox(oneWb.Name & strRearMsg, vbYesNo) = vbYes Then
            Set SelectOpenWorkBook = oneWb
            Exit Function
        End If
Continue:
    Next
    
    ''選択されなかった場合
    Set SelectOpenWorkBook = Nothing
    MsgBox "ブックが選択されませんでした"
    
End Function

先頭に書いているSampleは実行用のプロシージャで、SelectOpenWorkBookがメインとなる関数です。

「はい」で選択されたブックのWorkbookオブジェクトが返り値となります。

また、次の2つの引数で少しカスタムできます。

strRearMsg

表示させるメッセージを変更できます。

Sampleでは「ブック名」+「に対してマクロを実行しますか?」のメッセージを表示させています。

ここを変更すると例えば、「ブック名」+「がデータブックですか?」といったように利用者が分かりやすいメッセージに変更することができます。

blExceptThisWorkBook

この方法では基本的にマクロブックは選択対象にならないと思います。

そのため、デフォルトではマクロブック(ThisWorkBook)を候補表示させないようにしています。

もし、マクロブックも候補にしたい場合はこの引数をFalseとしてください。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
こちらの記事でおすすめのプログラマーを紹介しています

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/10/01 13:30:59時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい