1. ホーム
  2. vba

[解決済み] Excel VBA "レンジクラスのオートフィルメソッドに失敗しました"

2022-02-01 14:45:43

質問

以下のVBAコード(Excel 2007)は、エラー1004、"Autofill Method of Range Class Failed."で失敗しています。 どなたか修正方法を教えてください。

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.AutoFill Destination:=out

(注)これについてはググるなどしてみました。 かなり頻繁に出てきますが、私が見たすべての応答は、不正な範囲のアドレスに関係しており、AFAIKは私の問題ではありません。


ある方の提案で、自動入力の行を以下のように置き換えてみました。

src.Copy out

その結果、私のExcelセッションは、100%のCPUを消費する無限ループに陥り、そのまま永久に停止することになったのです。


OK、どうやら自動補充のためには、送信元が送信先範囲の一部である必要があるようです。 ということで、私のコードは以下のようになりました。

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out

Set out = wks.Range("B:U")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy

最後の行で同じエラー。

どうすればいいですか?

から MSDN :

宛先には、必ず のソース範囲になります。

B:U が含まれていない A6 となり、エラーとなります。おそらく、あなたは out を設定する必要があります。 A6:U6 .

カラム名だけを指定すると、そのカラムのすべての行を埋めることになり、望ましい動作とは言えません。


更新情報

以下のOPのコメントと元の回答の更新に続いて、これがトリックを行うかもしれません。

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out

Set out = wks.Range("B1:U1")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy

Set out = wks.Range("B:U")
Set src = wks.Range("B1:U1")
src.AutoFill Destination:=out, Type:=xlFillCopy

AutoFill は、一度に1つの方向(つまり水平または垂直)に制約される。1つのセルから2次元の領域を埋めるには、まずその領域の一辺に沿って線を自動充填し、次にその線を領域全体に伸ばす必要があります

書式をコピーして、(コピー元のセルが空であることを理由に)内容を消去するという特殊なケースでは、こちらの方が優れています。

Dim src As Range, out As Range, wks As Worksheet

Set wks = Sheet1
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.Copy out