まえがき
VBAには[マクロの記録]という機能があり、自分で操作した内容を、自動でプログラミングに変換してくれます。
まったく同じ内容を再現するだけであれば、この機能で作ったマクロをそのまま使えますが、実際は全く同じ事は殆ど無く、条件分岐や繰り返しをして、初めてプログラムの恩恵を受けれる事がほとんどだと思います。
それでは、なぜ[マクロの記録]という機能があるのでしょうか?
Microsoftからの見解では無いので非公式ですが、やりたい事(操作)から、必要なコマンドを確認するためだと私は推測しています。
本記事では[マクロの記録]でできる事や、マクロの記録の欠点について解説します。
マクロの記録でできる事
マクロの記録をつかうには、[開発]タブから[マクロの記録]をクリックします。
ポップアップ画面に「マクロの名前」を入力して、「OK」ボタンをクリックします。
[マクロの記録]を押した後の動作はすべて記録されるので、この後は必要な動作だけを行う様にして下さい。
例として、ここでは罫線を引いてみます。ホームタブから罫線を引く場合は、一旦ホームタブに変更しても良いです。
作業が終わったら、開発タブに戻って[記録終了]をクリックします。
マクロボタンをクリックします。
先ほど名前を入れたマクロを選択して、編集を押すと作成されたコードが見えます。
コードはこのように記載されていました。たったあれだけの操作なのに、とても長いです。
Sub Macro1()
‘
‘ Macro1 Macro
Range(“C5:G9”).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub
共通のキーワードとして、「Borders」「.LineStyle = xlContinuous」というものに気が付くと思います。「.ColorIndex = 0」は色なので関係なさそうで、「.TintAndShade = 0」影関係かな、「Thin」は細さかな、と英語が分かれば何となく、関係なさそうなものも入っているのが分かります。
もし※、「VBA 罫線」というキーワードで確認したい内容が表示されない場合は「VBA Borders LineStyle xlContinuous」というキーワードで、知りたい情報にたどり着く事ができます。
※罫線については「VBA 罫線」でも十分な情報を得られます。
この様に、知りたいコマンドを探す手段や、既に知っているけど忘れてしまったコマンドを確認する使い方が[マクロの記録]の主な使い方となります。
マクロの記録のデメリット
デフォルト値を含む余分なコードが生成される
今回はわざと自動記録で長くなるコードの操作をしたので、答えは分かりやすかったと思いますが、[マクロの記録]で作成されるプログラムは長くて無駄が多く見ずらいです。
上記の罫線を引く操作をVBAで記載すると、以下の1行で実行可能です。
Range(Cells(5, 3), Cells(9, 7)).Borders.LineStyle = xlContinuous
マクロの記録で出力されたコードからは、この1行のコードは想像できないと思いますので、冒頭にも記載していますが[vba 【やりたいこと】]で検索する事をお勧めします。
殆どのページは解説もしてくれていると思いますので、正確に必要なコードを見つけれて、内容も含めて理解できるはずです。
記録されないものもある
ステートメントや関数で記録されないものもあり、ダイアログボックスを表示する操作は記録されません。
Excelのブック・シート・セルに与えた影響をVBAコードで記録しているので、Excel以外のものを操作した場合はVBAコード化してくれません。この問題も[vba 【やりたいこと】]で検索する事で、解決できる事が多いです。
マクロの記録のメリット
私も初心者の頃は、マクロの記録を使って、コードを調べていましたので、すべてを否定する訳では無いですが、欠点が多いのも事実です。
マクロの記録で必要なコマンドを探すには、ある程度プログラムが読める知識が必要となります。また、可読性の低いコードが表示されますので、現状(2024/6/10)は検索が面倒なとき、既に知っているコマンドを思い出したい時に利用する程度のものとして、利用するという位置づけだと認識しておいてください。
では何のために説明したのかと疑問に思われるかと思いますが、現状のマクロの記録のメリットとしては、[コード簡単に確認できる]の一言に尽きるかと思います。
あとがき
もちろん今後AIの進化で、とてもきれいなプログラムが作成できるように改善される可能性はあると思いますが、現状はVBAはほとんどの情報が日本語で検索できるので、あまり利用価値は無いかもしれません。
本ページもVBAでやりたい事を探す際にヒットするページを目指して、日々情報を更新しております。よろしければTOPページから他の記事もご覧ください。