はじめに
どうもMizokeiです。
最近自粛が続き、家にこもりがちになっているMizokeiです。今日は、VBAについて書いていこうと思います。
迷宮入りのプログラム
唐突ですが、社内SEや社内の情報システム部門という職に就いている人は、特にイメージしやすいことかと思いますが、VBAはいまだ多く目にする機会があることでしょう。
引き継いだけれども、だれが作ったか分からないExcelVBAのブック、自動化された機能。どうやって動いているんだろう?そんな迷宮のようなシロモノを調査することが日課になっている人もいるかと思います。
改修orリプレイス?
迷宮入りの自動化された処理やプログラム、何でも構いませんが、特に話に上がるのが、今後も改修を続け、使い続けるのか?それとも、また一から作り直すのか?といった事でしょう。
特に社内SEという立場だと、その中で低コストでなおかつ管理がしやすく、不備や手戻りも少ない方法を迫られることがあるかもしれません。
VBAのサンプルコード
今日は、そんな人にも共感いただけるようなVBAのサンプルコードを紹介しようかと思います。単なる思い付きの記事ですが、アクセスが多ければ、今後も続編を書くかもしれません。基本的には、VBAを書いた経験が少なく、とりあえずコピペで使えるコードを探している人を対象にしています。
後でデバッグしやすいように
さて、本記事で紹介するのは、ずばりDebug.Printについてです。変数を与えたり、至るところにデバッグ目的で記載している人も居るのでは、ないでしょうか。改修するときや、リプレイスする際にかかわらず、後ほどの対応を考えると手を打っておいて損はない部分です。
そんなとき、デバッグを出力させたくない場合や、どこのモジュールで実行されたのか、いつ呼び出されたのか確認したいことがあることでしょう。
今回は、Debug.Printに以下の処理を加えてオリジナルのDebug.Printを実装してみました。
- デバッグモード・・・True/FalseでPrintの出力可否を変更する
- 日時・・・実行時間を出力します
- タグ(tag)・・・デバッグメッセージの前にタグとして文字を表示します
- メッセージ(message)・・・デバッグさせたい内容を表示します
実行例
「イミディエイトウィンドウ」を使用して、以下のコードを実行します。「myDebug」というモジュール名とした場合は、以下のように呼び出します。
0 1 2 |
myDebug.formattedPrint "tag", "hogehoge" |
以下のような出力がなされます。実行時間と、タグ、メッセージが出力されています。
0 1 2 |
2020/07/24 01:10:02 tag hogehoge |
以下の変数「GC_DEBUG_MODE 」にTrue/Falseを与えることでデバッグモードを変更できます。グローバル定数(Public Const)で宣言しているため、そのほかのモジュールでも呼び出すことが可能です。
0 1 2 |
GC_DEBUG_MODE = True |
別のモジュールで呼び出す場合は、以下をご参考ください。
0 1 2 |
myDebug.GC_DEBUG_MODE = True |
サンプルコード
VBAのモジュールに、以下のコードを張り付けることで使用できます。adjustFormatファンクションは、共通化モジュールとして、別のモジュールにしておくと整理できていいかもしれませんね。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Option Explicit ' グローバル定数(Global Constant) Public Const GC_DEBUG_MODE = True ' ローカル定数(Local Constant) Private Const LC_DEBUG_DATE_FORMAT As String = "yyyy/mm/dd hh:nn:ss" ' 目的:自作Debug.print() ' 概要:指定したタグとメッセージでprint出力、デバッグモードによりON/OFFできる Public Sub formattedPrint( _ ByVal tag As String, _ ByVal message As String _ ) If GC_DEBUG_MODE Then Debug.Print adjustDebugFormat(tag, message) End If End Sub ' 目的:フォーマットを調整する ' 概要:デバッグに表示する際のフォーマットを調整する Private Function adjustDebugFormat( _ ByVal tag As String, _ ByVal message As String _ ) As String adjustDebugFormat = adjustFormat(tag, message) End Function ' 目的:フォーマットを調整する(共通化) ' 概要:時間、タグ、メッセージのフォーマットを調整する Private Function adjustFormat( _ ByVal tag As String, _ ByVal message As String _ ) As String adjustFormat = Format(Now, LC_DEBUG_DATE_FORMAT) & " " & tag & " " & message End Function |
関連記事