非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excel/VBA:マクロの記録で生成したコードから余計なものを取り除いてそれっぽいコードに仕上げる方法

      2020/12/25

なんだかExcelのマクロの記録についての話題がちらほら何があったのか調べたらこんな記事に遭遇しました。話題の発端はこれですかね?

記事はざっとしか読んでいませんが、要するにマクロの記録で生成したプログラムは余計なコードが入っているからやめておけという話みたいです。

 

マクロの記録を使うのは初心者だけじゃないよ

たしかにマクロの記録だと余計なコードが入っていて可読性という意味ではあまり良いとは僕も思っていません。…が、イコール初心者はマクロの記録から卒業しろっていうのはちょっと暴論じゃないかなと思うんですよね。この機能でマクロへの間口が広がっていて初心者が入りやすくなっているのは事実だし、そもそも初心者だけじゃなくて、中級者上級者も普通にマクロの記録使いません?僕はよく使いますね。

僕の場合はセル書式を変えたり印刷したりする時に使います。そんな機能のロジックなんていちいち覚えていないので、さくっとマクロの記録でコードを生成するようにしてます。とても便利な機能だと思っています。なので卒業なんて愚の骨頂です。

ただ、生成されたマクロをそのまま使うことは僕はしていません。

なぜかと言うと、マクロの記録で生成されたコードはセル選択を前提としていて、いちいちRange("A1").selectからのSelection.Interior...といったような展開をします。ちょっとしたプログラムならそれでもいいのですが、シートやブックを跨いだりするようになるとちょっとしんどいですね。

だからマクロの記録はダメとは言いません。ちょっと手を加えてあげればいいのです。

僕がよくやる方法をちょっと紹介したいと思います。

 

マクロの記録ざっくりまとめ

その前にマクロの記録の方法をざっくり書きます。

シートの下の方に赤矢印で示したアイコンをクリックするとマクロの記録が開始できます。

 

こんなダイアログが現れます。マクロ名は変えても変えなくてもOKです。あとで変えることもできますので。そのままOKをクリックしましょう。

 

で、試しに左から右に書式を変えてみました。これが内部で記録されているわけですね。

 

変更し終わったら赤矢印の停止ボタンを押しましょう。

 

Visual Basic Editorを開くと以下のようにソースコードが生成されました。このMacro1を実行すると上でやった書式変更が自動でできるようになります。

 

本当に必要な部分とは

で、ここからですが、上で生成されたコードはセルの選択をいちいちやっているという点と、余計なコードが入ってしまっているという点が欠点ではあります。

A1セルのセル色を黄色くする部分は以下の赤枠で示した部分のみが必要な箇所です。

B2セルも以下の赤枠だけが必要なところ。

 

なので、その赤枠だけ抜き出してくっつけちゃえば良いのです。

Range("A1").Interior.Color = 65535
Range("A2").Font.Color = -16776961
 

 

これでOK。このコードを直接書くのはしんどいんです。色の番号なんていちいち覚えていられないでしょう。だからこそマクロの記録を使うべきだし、例えばセル色を変えるプロパティがInteriorだなんて覚えなくても済むわけで。

生成されたソースコードを読み解く力は多少必要だけど慣れればそんなに難しくありません。Selectionという部分はRangeやCellに置き換えられるという点と、With内部は後に続くプロパティ群だと覚えておけばOK。なのでマクロの記録を卒業しろなんてナンセンスもいいところです。

 

ExcelマクロはExcelを制御するのに非常に便利なので多くの人に使ってほしいですね。

 

スポンサーリンク

 - Excel, VBA