相対参照でマクロ記録する


一般的にマクロ記録では、操作したセルのアドレスが絶対参照形式で記録されます。たとえば、アクティブセルがセルA1の状態で、アクティブセルに「123」と入力し、続いて真下のセルA2に「456」と入力する操作をマクロ記録すると、次のようなコードが記録されます。

Sub Macro1()
    ActiveCell.FormulaR1C1 = "123"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "456"
    Range("A3").Select
End Sub

記録したこのマクロを実行すると、毎回必ずセルA1とセルA2にデータが入力されます。そのように記述しているのですから当然です。そうではなく、マクロを実行したときのアクティブセルと、その下のセルにデータを入力するようなコードを記録したいのでしたら、アドレスを相対参照形式でマクロ記録してやります。

相対参照形式でマクロ記録するには、マクロ記録を開始したときに表示される[記録終了]ツールバーの右側にある[相対参照]ボタンをクリックしてから操作を始めます。

すると、次のようなコードが記録されます。

Sub Macro2()
    ActiveCell.FormulaR1C1 = "123"
    ActiveCell.Offset(1, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "456"
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

ちなみに、ActiveCell.Offset(1, 0)はアクティブセルから、1行下で0列右のセルを表します。その後ろに、なぜRage("A1")が付いているのかは…ちょっと難しい話になりますので、気にしないでください(^^;

なお、[相対参照]ボタンをクリックして相対参照を指定すると、もう一度クリックして解除しない限り次のマクロ記録でも有効になります。また、[記録終了]ツールバーはマクロ記録を開始しないと表示されません。