質問

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


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

通報する

回答 (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

この回答へのお礼

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

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

この回答へのお礼

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集