こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelのVBAのAutoFillの使い方について

Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。

何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。

下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、
「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」
の行でエラーが発生します。
「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。


Private Sub CommandButton1_Click()

  ActiveSheet.Range("A1").Select
  ActiveCell.FormulaR1C1 = "1"
  Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries

  ActiveSheet.Range("A2").Select
  ActiveCell.FormulaR1C1 = "1"
  Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries

End Sub


どなたかエラーの原因を教えていただけないでしょうか?
よろしくお願いいたします。

投稿日時 - 2006-01-24 17:57:35

QNo.1918402

暇なときに回答ください

質問者が選んだベストアンサー

こんばんは。

>どなたかエラーの原因を教えていただけないでしょうか?

難しいことなのですね。教本には、載っていないですね。

まず、基本的なことなのですが、コントロールツールのCommandButton は、シート属性を持ったものなのですね。ですから、記録マクロを、そのままペタンと貼り付けてもうまくいかないことが多いです。

エラーは2番目のSelection で出ているはずです。

Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries

ActiveCell.Range("A2:E2")
というのは、ActiveCellが、Range("A2")ですと、相対参照になっていますから、A4:E4 ということになってしまいます。元の値がありませんので、エラーが出ます。

それを、第一弾目に直したものです。

 Range("A1").Select
 Selection.Value = "1"
 Selection.AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

 Range("A2").Select
 Selection.Value = "1"
 Selection.AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries

それを直しますと、以下のようになります。
通常、文字列で入れても、ワークシートでは、文字列が数値に変換されています。ワークシートの状況が見えていませんので、一応、数値にしておきます。
'------------------------------------------------------
 Range("A1").Value = 1
 Range("A1").AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

 Range("A2").Value = 1
 Range("A2").AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries
'------------------------------------------------------

もう少し、マクロに慣れてくるとこのようになります。
ただし、書式が文字列になっている場合は、この方法が出来ません。

With Range("A1:E2")
   .FormulaLocal = "=Column(RC)"
   .Value = .Value
End With

投稿日時 - 2006-01-24 22:49:21

お礼

大変よく分かりました。
ありがとうございました。

投稿日時 - 2006-01-25 09:38:38

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ActiveSheet.Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

ActiveSheet.Range("A2").Select
ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries

投稿日時 - 2006-01-24 18:12:16

お礼

ありがとうございました。

投稿日時 - 2006-01-25 09:39:15

あなたにオススメの質問