エクセルには自動マクロ機能があるんで、とっても簡単にVBAコードを作成することができますよね。
でも実際には、自動マクロで作成されるコード以外にもいろんなことができます。
これは知ってると便利っていうVBAコードの書き方をご紹介します。
- マクロ起動中に画面がパラパラと描画するの止めたい場合
- セルをA1形式じゃなくって行列(R1C1)形式で指定したい場合
- ブックオープン/クローズ時にマクロを起動させたい場合
- 自動生成されたマクロの処理速度を早くしたいなぁっと思った場合
画面の描画を止めたい場合
いろんな場所をコピーしたり、貼り付けたり、移動したりするマクロって、実行中にパラパラと画面が再描画されますよね。
この再描画をマクロ実行中は停止させておくと、処理速度が驚くほど速くなるっ!
自動マクロ機能でマクロを作成した後、作成されたコードの初めに下の一行を追加してみてください。
Application.ScreenUpdating = False
<例>
Sub Macro1()Application.ScreenUpdating = False
:
:
:
End Sub
セルをA1形式じゃなくって行列(R1C1)形式で指定したい場合は
自動マクロで作成されたコードはセル指定が「Range("A1")」とかになっていますよね。
でも、これだと列位置を変更したい(A~BAまでにデータを入れたい)場合とかだと、Aの次はBで、Bの次がCで・・・Zの次がAAで・・・って考えないといけないんです。
そんな時にはCells(行,列)でセル指定するのが便利♪
下のマクロを動かすと、A2~L2に1~12の数字が入ります。
<例>
Sub Macro1()Dim lngCount As Long
For lngCount = 1 To 12
Cells(2, lngCount).Value = lngCount
Next lngCount
End Sub
ブックオープン/クローズ時に起動するマクロ
このブックがオープンしたときに必ずこの処理をさせたいってこと、たまにありませんか?
そんなときは「標準モジュール」に以下のモジュールを作成し、その中に処理を記述して下さい。
オープン時に起動されるマクロ
Private Sub Auto_Open():
:
:
End Sub
ちなみに、クローズ時に起動されるマクロ
Private Sub Auto_Close():
:
:
End Sub
また、「ThisWorkBook」の中に以下のマクロを記述してもオープン時に起動されます。
Private Sub Workbook_Open():
:
:
End Sub
※他のブックのマクロからオープンされた場合、「Auto_Open()」は起動されないが、「Workbook_Open()」は起動されるみたい。
自動生成されたマクロを整理しよう
自動マクロ機能を使用して生成されたマクロをじっくり見たことありますか?
結構省略できるコードが多いんです。
たとえば、以下のようなもの
Range("B5:C6").SelectSelection.Copy
これは、[B5:C6]を選択して、選択部分をコピーするというコードです。
でもこの2行は以下のように記述することが出来ます。
Range("B5:C6").Copyこれで一行コードが減りました!
その他にも、以下のように
Range("B5").SelectSelection.Copy
Range("I5").Select
ActiveSheet.Paste
↓
Range("I5").Value = Range("B5").Valueこのように、セルからセルに直接値を入れることが出来ます。
これでコードもスッキリです。
また、これはセルをコピーしてから別のセルにペーストするより処理速度がダンゼン速いのが魅力的です!