• ベストアンサー

EXcelでオートフィルのパラメータを変数化

お世話になります。 [変更前]マクロで「("A3:B72")」を変数化したくて[変更後]のようにした。 結果エラーになります。 実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。 [変更前] Sub 賞与明細MCR() Range("A3:B4").Select Selection.AutoFill Destination:=Range("A3:B72"), Type:=xlFillDefault Range("A3:B72").Select End Sub [変更後] Sub 賞与明細MCR() Dim 処理 As Characters 処理 = "A3:" & CStr(Range("d1")) Range("A3:E4").Select Selection.AutoFill Destination:=Range(処理), Type:=xlFillDefault Range(処理).Select End Sub

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

今一つ違うかも知れませんが。 Range("A3:B4").Select Selection.AutoFill Destination:=Range("A3:B72"), Type:=xlFillDefault Range("A3:B72").Select これを、 Dim i As Long i = Range("D1").Value If i < 5 Then Exit Sub Range("A3:B4").AutoFill Destination:=Range("A3:B" & i), Type:=xlFillDefault こうしたいと言うことですか?

shinkami
質問者

お礼

ご回答有難うございました。 おかげさまで解決できました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

VBAのデータ型でCharactersってありましたっけ。 宣言文ではエラーにならないので、OKなのかも知れませんが、これを実行すると、値を代入しようとする次の行でエラー91が発生しますので、これが原因だと思われます。 Dim文での宣言を CharactersからStringに修正すれば問題なくなると思いますが・・・  Dim 処理 As String また、d1セルで指定する範囲が悪いと、AutoFillメソッドの失敗のエラーになります。 いらぬお節介かも知れませんが、エクセルの操作ではオートフィルは一般的ですが、マクロで範囲に入力する場合はループで処理するほうが一般的かと思います。 具体的には、A3:E4に代入する処理を一般化したものにしておいて、処理したい範囲について以下のような処理を行うという方法です。  For i=start_row To end_row   For j= start_col To end_col    cells(i,j).value=*****  '*必要とする処理   next j  next i

shinkami
質問者

お礼

変更後のコードにも誤りがありました。 処理 = "A3:" & CStr(Range("d1")) は処理 = "A3:E" & CStr(Range("d1")) Cstr(数値から文字への変換)も不要のようですね 次のようにして、解決です。 Sub 賞与明細MCR() Range("A3:E4").Select Selection.AutoFill Destination:=Range("A3:E" & Range("D1")), Type:=xlFillDefault Range("A4").Select End Sub