自動マクロでは教えてくれないVBAの書き方

エクセルには自動マクロ機能があるんで、とっても簡単にVBAコードを作成することができますよね。
でも実際には、自動マクロで作成されるコード以外にもいろんなことができます。

これは知ってると便利っていうVBAコードの書き方をご紹介します。

画面の描画を止めたい場合

いろんな場所をコピーしたり、貼り付けたり、移動したりするマクロって、実行中にパラパラと画面が再描画されますよね。
この再描画をマクロ実行中は停止させておくと、処理速度が驚くほど速くなるっ!

自動マクロ機能でマクロを作成した後、作成されたコードの初めに下の一行を追加してみてください。

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の数字が入ります。
マクロ結果01

<例>

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").Select
Selection.Copy

これは、[B5:C6]を選択して、選択部分をコピーするというコードです。

でもこの2行は以下のように記述することが出来ます。

Range("B5:C6").Copy

これで一行コードが減りました!

その他にも、以下のように

Range("B5").Select
Selection.Copy
Range("I5").Select
ActiveSheet.Paste

Range("I5").Value = Range("B5").Value

このように、セルからセルに直接値を入れることが出来ます。

これでコードもスッキリです。
また、これはセルをコピーしてから別のセルにペーストするより処理速度がダンゼン速いのが魅力的です!