初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のExcelマクロVBA:マクロをマスターしたかったらSelectメソッドは使うな!

f:id:drumer2sh:20150407200859j:plain

自称マクロマスターさんのパターン


非常によくお見かけする自称マクロマスターさんのよくあるパターンで、こういうのがあります。
マクロを少し理解しはじめて、マクロの記録で色々な動作を記録して、それを「なんとか」うまく使ってマクロを作っている人たちがいます。これである程度は確かにできるのですが、この状態では「マクロはマスターした!ふふん。」とはなりません。

残念ながらマクロの記録だけでやりくりしている人は絶対にマクロをマスターすることはできません。

Selectメソッドを多用する


マクロの記録をすると必ずと言っていいほどこのSelectメソッドが出てきます。なぜなら、エクセルの動作で「セルをクリックする」という動作を行うと必ずマクロの記録はSelectメソッドを記録します。

例えば、A5のセルを選択してそこに100円という文字を入れます。さらにB5のセルを入れて1月1日と入力し、今度はA5とB5を一緒に選択してそのままオートフィルしてみます。すると以下のようなマクロが記録されます。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A5").Select
    ActiveCell.FormulaR1C1 = "100円"
    ActiveCell.Characters(4, 1).PhoneticCharacters = "エン"
    Range("B5").Select
    ActiveCell.FormulaR1C1 = "1/1/2015"
    Range("A5:B5").Select
    Selection.AutoFill Destination:=Range("A5:B30"), Type:=xlFillDefault
    Range("A5:B30").Select
End Sub


こんな感じです。見ただけでSelectメソッドが4個もあります。自称マクロマスターさんたちはこれをこのまま使ってしまいます。今度はA1のセルを選択し、そこに「こんにちは」と入力した後、A1を選択してコピーし、B1にペーストしてみます。するとこんなマクロが記録されます。

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "こんにちは"
    Range("A1").Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
End Sub

いかがでしょうか?これだけでまたSelectメソッドが3つも使われています。

マクロはほぼ99%Selectメソッドを使わずに実現できる

これが本当のマクロマスターの真実です。本当のマクロマスターはSelectメソッドを使うことはほとんどありません。というか皆無に近いです。Selectメソッドを使うときはただ1つ。

ある特定のシートの特定のセルを選択した状態でマクロを終えるとき。


これくらいです。


コピー&ペーストでSelectメソッドは?


使いません。


特定の範囲のセルの値を取得するときには使うでしょ?


使いません。


特定の範囲を検索するときにはさすがに使うでしょ?


使いません。


上記の動作すべてSelectメソッドなしで実現できます。なぜなら、Selectメソッドを使わなくてもセルを選択できるし、指定もできるからです。しかもその方が実行速度も速いです。

本当ですか?


本当です。たとえば2つ目の例のコピーとペーストを見てましょうか?これを本当のマクロマスターが書くと、こうなります。

Sub Macro2()
'
' Macro2 Macro
'
'
    Sheet1.Range("A1").Value = "こんにちは"
    Sheet1.Range("A1").Copy Sheet1.Range("B1")

End Sub


これでOKです。見た通りSelectメソッドは使ってません。さらに言えばペーストメソッドすら使ってません。これでまったく同じことができます。

マクロを本当にマスターしたいならSelectメソッドは使うな


一生懸命マクロの記録でSelectメソッドを使っているみなさん。それではいつまでたっても一流のマクロ使いにはなれませんよ?まずはSelectメソッドを使わないで「正しいオブジェクトの指定の仕方」を覚えましょう。

そうすればたくさんのSelectメソッドから解放されるはずです!