MsgBox関数を使用してボタンを押した後の動作を選択する。
Excelマクロの関数であるMsgBox関数(以下、メッセージボックス関数といいます。)を使用すると、画面上にメッセージボックスが表示されて「はい(Y)」とか「いいえ(N)」等の選択したボタンによってその後の処理を変化させることができます。
いわゆる対話型のマクロとでもいうのでしょうか?
イメージはざっくりとこんな感じです。

で、今回はメッセージボックス関数を使用して以前に作成した
「インターネットバンキングで日付が変わった時の残高に色をつけるマクロ」
に少し機能を追加してみたいと思います。
以前作成したこのマクロですが、個人的にはちょくちょく使うことがあります(他に使っている人がいるのか疑問ですが。。。)が、
このマクロは実行後に「色をつけた段階」でマクロの動作が終了するようになっているんですよね。
自分で実際に使ってみるとマクロを実行した後に手作業で日付が変わった際の残高セル(色がついたセル)でフィルターをかけて残高が変更になったタイミングだけのデータを確認する作業が多いことに気づきました。
要は、こんな状態にしたい時が多いんです。↓

ですが、多いといっただけで、毎回絶対このような状態にしたいわけでもなく、フィルター処理をしたくない、する必要がない時もあるんです。
(面倒臭い性格ですね。)
そこで、メッセージボックス関数を使って色でフィルターをつけるか、つけないかをその都度、選択できる(させる)ように処理機能を追加させようと思います。
ここで使うのがMsgBox関数とオートフィルタメソッドになります。
今回のマクロを追加した後のイメージは下記の動画のようになります↓
メッセージボックス関数で処理を選択させる機能を追加した後のマクロのコードは下記のようなものになります。
変数の宣言部分と、真ん中やや下「’■ 色でフィルター処理をするかどうかの選択」以下が主な追加箇所になります。(32行目以降の部分になります)↓
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | Sub ネットバンクで日付が変わる際の銀行残高に色を付けるマクロ定数版() Const startrow = 2 '何行目のデータから日付のデータが始まっているかを入力する Const day = 1 '日付データが入力されている列が何列目かを入力する Const zandaka = 6 '残高データが入力されている列が何列目かを入力する Dim i As Long '変数宣言 Dim lastrow As Long Dim msg As Long lastrow = Cells(Rows.Count, 1). End (xlUp).Row '最終行の取得 '■ 処理実行 For i = startrow To lastrow '[startrow]で指定した行から最終行まで判定をしていく。 If Cells(i, day).Value <> Cells(i + 1, day).Value Then '日付が変わった場合に処理を実行する。 Cells(i, zandaka).Interior.ColorIndex = 6 '日付が変わる際の銀行残高のセルを黄色にする。 End If Next i '■ 色でフィルター処理をするかどうかの選択 msg = MsgBox( "作業が完了しました。" & vbCrLf & vbCrLf & _ "色でフィルター処理をしますか?" , vbYesNo + vbQuestion, "色の設定" ) If msg = vbYes Then Cells(startrow, zandaka).AutoFilter Field:=zandaka, Criteria1:=RGB(255, 255 _ , 0), Operator:=xlFilterCellColor Else MsgBox "フィルター処理は行いませんでした。" End If End Sub |
追加したマクロの記述部分の解説(MsgBox関数とオートフィルタ)
追加したMsgBox関数とオートフィルタメソッドについて簡単に説明しておきます。
(自分もよくわたってないので詳しく説明ができません。)
変数宣言の追加とMsgBox関数の追加
今回は「msg」という変数を作成(宣言)しておき、変数「msg」の中にメッセージボックス関数を設定しています。この部分です↓


Msgbox関数についてはGoogleで検索すると丁寧な解説記事がありますのでそちらに任せますが、今回はメッセージボックス関数の引数(ひきすう)には「vbYesNo」というボタンを設定しています。
これを設定することによって、メッセージボックスが画面に表示され、下記の画像のように「色でフィルターをしますか?」と言うメッセージの下にYesボタン【はい(Y)】とNoボタン【いいえ(N)】を表示されます。

オートフィルタメソッドの追加
表示されたメッセージボックスの画面上で、「はい(Y)」ボタンをクリックした場合はその後、色でフィルターを設定し動作が終了します。

この部分の処理が下記の赤枠の箇所です、オートフィルタメソッドを使用して、色のついたセルでフィルター処理を行っています。

「いいえ(N)」をクリックした場合は「フィルター処理は行いませんでした。」というメッセージが表示され動作が終了します。フィルター処理は行われません。

この部分の処理が下記の赤枠の箇所です↓

以上で、機能の追加は完了です。
まとめ
メッセージボックス関数を使用して「VbYesNo」等の引数を設定し、それに応じた処理をマクロで記述することで複数のパターンの処理を実行することができます。
自分しか使わないマクロで、かつ、決まった処理しか行わない場合(今回の例の場合であれば、毎回必ずフィルター処理を行う場合)にはわざわざメッセージボックス関数で「はい(Y)」、「 いいえ(N)」などのボタンを画面上に表示させて選択させる必要は無いです。
むしろそれをやると無駄です。(マクロが動いている感が実感できて楽しいといえば楽しいのですが。。。。)
ですが、自分しか使わないけれどもその時々によって処理のパターンを変えたい時がある場合にはこの機能を使用すると少しは便利になるかもしれません。
この程度のシンプルなマクロであれば、自分のやりたいことが後から自由に追加できる点はマクロは便利だなぁと思います。
プロレベルになると一つの機能を追加するためにそれまでのプログラム全部やり直し。なんて悲惨なこともあると聞いたことがありますので。
【本日の近況報告】
オンラインでの研修や面談、打合せなどの機会が増えてきていますが、最近ZOOMなどを使用していると自分の話した声が相手側に2、3秒遅れて届く症状がでています。
税務研修などの一方通行の利用の場合にはそれでも問題ないんですが、双方向のやりとりを行う場合にかなりストレスになってきています。
Wifiの買い替えしたら症状が改善するんじゃないかと思って買い替えを検討しているんですが、Wifi5かWifi6かで悩み中です。
【本日の1曲】
Toploader / Dancing in the Moonlight
king harvestの珠玉の名曲のカバーで、個人的にはこのカバーが一番好きです。
たくさんのアーティストがカバーしているんですが、2020年の秋ごろに日本のバンドでDATSという人たちの新しいアルバムに収録されてて久しぶりに聴きましたが、やっぱトップローダーのカバーが一番だよなと。DATSがダメなんじゃなくてトップローダーが良すぎるんですね。
大学生の頃このレコードが欲しくて、でも人気があるから高くて買えなくて。(CDは安い。)
たまたま、実家に帰った時に長崎市内のSunny recordというレコード屋(まだあるのか?)に立ち寄って「投げ売りコーナー」みたいなとこ漁ってたら300円くらいで売ってて、ソッコー買った思い出があります。ありがとうSunny record!!
そんな思い出補正がかかっている1曲。
PVもオシャレ。