VBA最初の一歩(その1)マクロ記録とセル領域|Excel VBA |
多くの方がエクセルに触れて、しばらく使っているうちに、エクセルのメニューの中に”マクロ”という言葉を見つけ、マクロの記録を行い、感嘆とともに一種の失望を味わいます。
それは、マクロ記録によるコードをとりあえず実行してみたときに、直前に行った動作をそのまま繰り返してくれるところに驚き、感動し、そのままでは使えないことからくる落胆の気持ちでしょう。
例えばソートをするにも、集計をするにも、印刷範囲を設定するにも、ほとんどの場合が対象となるセル領域は変わるからです。
上記に少しでも身に覚えのある方はVBAの入り口をくぐる前に、あるいはVBAの門をたたいてみることさえあきらめてしまう前に、ひとつだけ試してみてください。
(準備):一行目を項目行とする、複数行、複数列にデータが入力されているワークシート。
※空白列、空白行を含まないこと。
すると以下のようなマクロが記録されているのが確認できるはずです。
(注:バージョンによって若干の差が出る場合があります。実行確認はExcel 2010)
Sub TEST()
'
' TEST Macro
'
'
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
End Sub
最初のワークシート(コピー元)に戻り、今度は上記の記録テストで使用したのと同じデータ(項目行を除く)を手動でコピーして、最終行の次に付け足し(貼り付け)てみてください。セルA1から連続する複数行であれば問題ありません。 そして、先ほど記録したマクロを実行してみます。
新しいシートが挿入され、手動でコピーしたデータも含めてコピーされているはずです。
ここで重要なのはこの2行。
i Range("A1").Select
A Selection.CurrentRegion.Select
@はセルA1の選択(Select)
Aはアクティブセル領域(CurrentRegion)の選択
もし、手動でデータが入力されたセル領域を選択していたら、この2行のコードは
Range("A1:E50").Select
のように記録されているでしょう。
ここでは、セルA1を起点とする”アクティブセル領域”を使ってセル領域を選択したので、範囲を特定しないコードが記録されました。そのため、セルA1を起点としている限り、行数、列数が変わっても、記録マクロはそのまま使用することができるのです。