• ベストアンサー

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 どなたかエラーの原因を教えていただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >どなたかエラーの原因を教えていただけないでしょうか? 難しいことなのですね。教本には、載っていないですね。 まず、基本的なことなのですが、コントロールツールの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

kaede0919
質問者

お礼

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

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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

kaede0919
質問者

お礼

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

関連するQ&A

専門家に質問してみよう