トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! >第30話「架空のシステムをイメージしよう!」

やってみよう!Excel VBAで業務改善!|VBAとの出会い編

マクロを呼び出す場所はどこ?

星くんはマクロを呼び出す場所を探し、2つのマクロを穴が開くほど見つめます。

「ブックを開いて編集するマクロにある、"セルA1に開いたよ!の文字列を入力する"ってなんだよ…
なんでこんな"変な処理"をさせてるんだ??
…ああ…そうか、八木がブックを開いたらこうしろっていったんだっけ………ん…んんん!?」
その瞬間、星くんの脳裏に、稲妻のようなひらめきが走りました!

「…そうか!!開いたブックに対して行う処理は、この部分に記述すればいいんだ!
…ひょっとして八木は、そのことに気づかせるためにあえて、
こんな意味のない処理を作らせたんじゃないか?
…つまりここに、追加アイテムのチェックをしたり、印刷するかしないかの確認をする、
処理を記述すればいいんだよ…!!」
星くんの心臓がドクドクと高鳴ります。
カタカタとキーボードをたたきVBEのコードを修正すると、星くんはウンとうなずきました。

'ブックを開いて編集するマクロ
Sub Main()
    Dim bkPath As String
    
    '変数に対象ブックのパスを格納する
    bkPath = Application.GetOpenFilename("Excel ブック,*.xls")
    
    'パスが格納されているとき以下を実行
    If bkPath <> "False" Then
        '対象のブックを開く
        Workbooks.Open bkPath
        
        '追加アイテムをチェックする
        Call CheckNewOrderItem
        
        'ブックを閉じる前に印刷するか確認する
        
        '対象のブックを閉じる
        ActiveWorkbook.Close True
    End If
End Sub

'追加アイテムをチェックするマクロ
Sub CheckNewOrderItem()
    Dim i As Long
    Dim j As Long
    Dim Hantei As Boolean
    
    '変数の値を初期化する
    Hantei = False
    
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        For j = 2 To Cells(Rows.Count, 3).End(xlUp).Row
            If Cells(i, 1) = Cells(j, 3) Then
                '変数に"True"を代入する
                Hantei = True
                Exit For
            End If
        Next j
        
        If Hantei Then
            '変数の値を"False"に戻す
            Hantei = False
        Else
            'セルの背景色を変える(チェックする)
            Cells(i, 1).Interior.ColorIndex = 6
        End If
    Next i
End Sub

「これでいいんだよ!
ブックを開いたら、まず追加アイテムをチェックする。
これは、追加アイテムをチェックするマクロを呼び出すだけだから、"Call プロシージャ名"でオッケーだ!
呼び出すマクロが追加アイテムをチェックするマクロだとわかるように、
プロシージャ名を"Test"→"CheckNewOrderItem"に変更…
"Call CheckNewOrderItem"の処理を追加する…。
ついでに呼び出し元のプロシージャ名も、"Test"→"Main"に変更して
メインのマクロだとわかるようにしておこう。
…印刷の処理は………とりあえず後回しにするか」

シーズン1 「VBAとの出会い」編: 各エピソードへのリンク
一覧にもどる