VBA開発

ExcelVBAマクロ-「ブックが開いていればActivate/なければブック作成する」処理をパーツ化する

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■該当ブック開いていればActivate/開いてなければWorkbooks.Add
Public Function Call_BookOpenOrActivate(wbName As String)
    Application.DisplayAlerts = False
    
    If call_BookOpenCheck(wbName) = True Then
        '■既存の場合、Activate(該当ブックwbNameを一番前面にする)
        Workbooks(wbName).Activate
    Else
        '■新規の場合、ブック作成
        Workbooks.Add
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & wbName, FileFormat:=xlCSV
        '■文字列形式にしておきたい場合は以下も使う
        'ActiveSheet.Cells.Select
        'Selection.NumberFormatLocal = "@"
    End If 
    Application.DisplayAlerts = True
End Function

使い方

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

    Dim wbName As String

    wbName = "Book1.xlsx"

    Call_BookOpenOrActivate(wbName)

結果イメージ

  • 今開いているブックに指定したファイル名が存在していればActivate
  • 今開いているブックに指定したファイル名が存在していなければエクセルファイルを作成
    ※サンプルでは拡張子は「CSV」で作成。ファイル保存場所はマクロファイルと同一です。

注意点

上記パーツ化したモジュール単体では動きません。下記のパーツも一緒にモジュールに記載してください。

ExcelVBAマクロ-「エクセルブックが開いているかどうか確認する」処理をパーツ化する

このパーツは色んなファイルを、一度に複数処理する際によく使用します。

例)
・一つの売上ファイルから、発注先単位で受発注商品の発注書を作成する
・売上ファイルから複数の売掛先への請求書を生成する。

複数の売掛先(仕入先)の判断を、

  • ブックが開いていれば、開いているブックに追記処理。
  • ブックが開いてなければ、新規でブック作成後、生成処理。

と上記で判断が可能です。

追記する場合は、最終行の取得も併せて行う必要もあると思います。下記ページの最終行を取得するマクロも参考にしてください。こちらも同様コピペでOKです。
ExcelVBAマクロ「最終行」「最終列」の判断処理をパーツ化する

コメント

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