このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】開いているブックを選択させる方法(サンプルコード付き)

2022年11月16日

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

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

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

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

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

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

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

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

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

このプログラムを実行すると、開いているブックの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

Posted by やろまい