電子書籍の厳選無料作品が豊富!

お世話になります。

[変更前]マクロで「("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

A 回答 (2件)

今一つ違うかも知れませんが。



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
こうしたいと言うことですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/01 23:42

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
    • good
    • 0
この回答へのお礼

変更後のコードにも誤りがありました。
処理 = "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

お礼日時:2008/09/01 23:35

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