初心者のExcelマクロVBA:マクロをマスターしたかったらSelectメソッドは使うな!
自称マクロマスターさんのパターン
非常によくお見かけする自称マクロマスターさんのよくあるパターンで、こういうのがあります。
マクロを少し理解しはじめて、マクロの記録で色々な動作を記録して、それを「なんとか」うまく使ってマクロを作っている人たちがいます。これである程度は確かにできるのですが、この状態では「マクロはマスターした!ふふん。」とはなりません。
残念ながらマクロの記録だけでやりくりしている人は絶対にマクロをマスターすることはできません。
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つ。