- ベストアンサー
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
- みんなの回答 (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 こうしたいと言うことですか?
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
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
お礼
変更後のコードにも誤りがありました。 処理 = "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
お礼
ご回答有難うございました。 おかげさまで解決できました。