オデッセイの運営サイト一覧

Excel®️、Accessのマクロ・VBAのスキルを評価する資格VBAエキスパート

企業・教育機関の皆さまへ 試験会場を探す お問い合せ

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

第30話「架空のシステムをイメージしよう!」

第30話「架空のシステムをイメージしよう!」

登場人物紹介

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

星くんはマクロを呼び出す場所を探し、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との出会い」編:エピソード一覧

一覧へ戻る

MENU