オートフィルの対象セル範囲を相対参照で指定したいが?

Question 58.4 Previous Next
RANGEクラスの Autofillメソッドが失敗しました。と出ます。
相対参照、絶対参照の違いでしょうか? 絶対参照にするべきところ、相対参照にしたからでしょうか?
Answer   Copyright (C) 2003.2.21 永井善王
オートフィル 相対参照にするため、どんなマクロを作成されたのか示されていません。 回答しにくいですが、右図を例にして考えてみましょう。

オートフィル機能を利用すると、たとえば、
・[1図]のように入力してある状態で A1:A2セルを
 選択し
・表示されたフィルハンドルを[2図]のようにドラッ
 グすると
・[3図]のようにデータが展開されます。

これをマクロに
[相対参照]ボタンを OFFで自動記録すると、下記のとおりになります。
Sub Macro1()
    Range("A1:A2").Select
    Selection.AutoFill Destination:=Range("A1:A7"), Type:=xlFillDefault
    Range("A1:A7").Select
End Sub
また、[相対参照]ボタンを ONで記録したマクロは下記のとおりです。ただし、B1セルを選択してから自動記録を開始しました。そうした理由は、相対参照の基点となるセルが必要だからです。
Sub Macro2()
    ActiveCell.Offset(0, -1).Range("A1:A2").Select
    Selection.AutoFill Destination:=ActiveCell.Range("A1:A7"), Type:= _
        xlFillDefault
    ActiveCell.Range("A1:A7").Select
End Sub
体験用シート 上下 2つのマクロの相違点は、下のマクロの
   2行目のコード中の
ActiveCell.Offset(0, -1).
   3行目のコード中の
ActiveCell.
   5行目のコード中の
ActiveCell. の3カ所です。

下の[相対参照]ボタン ONで作成したマクロは、どのように活用できるのでしょうか。
上のマクロとの相違を体験で理解してみましょう。

新しいワークシートを準備して[4図]のとおり A1:A2、C1:C2セルに値を入力します。そのシートの標準モジュールに、下側のマクロ 「Macro2」 をコピー貼り付けします。

そして、D1セルを選択してから、「Macro2」 を実行してみましょう。 すると、C1~C7セルに 月、火、水、木、金、土、日 と表示されるはずです。
念のため B1セルを選択して「Macro2」を実行してみてください。その結果は[3図]のとおりですね。

AutoFillメソッド

機能: 指定された対象セル範囲内のセルに対して、オートフィルを実行する。
構文: expression.AutoFill(Destination, Type)
引数等 指定内容 省略可否
expression ソース範囲(基準となるデータの入ったセル範囲)を Rangeオブジェクトで指定する
Destination オートフィルの書き込み先を Rangeオブジェクトで指定する。ソース範囲を含めること。
Type リストの種類を指定する。XlAutoFillTypeクラスの定数を使用する。

体験で理解できましたか。まったく同じ「Macro2」を実行したのに、事前に選択したセルが変わるとオートフィルの対象範囲が変化することを。 また、上表の赤字部分を守らないといけないことを。

[実行時エラー '1004' Rangeクラスの AutoFillメソッドが失敗しました]というエラーが出たとすると、「Macro2」の2、3、5行目にある
"A1:A7" に相当する範囲指定に誤り (ここを書き変える必要はない) があるのではないでしょうか。ご確認ください。

 

Excel VBA Macro