|
|
| Excel VBA Macro ・ 値の操作 ・ FAQ |
|
オートフィルの対象セル範囲を相対参照で指定したいが?
|
|
|
|
Question 58.4 |
|
 |
 |
|
|
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" に相当する範囲指定に誤り (ここを書き変える必要はない) があるのではないでしょうか。
ご確認ください。
|
|
|
|
| |
|
|