• ベストアンサー

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

関連するQ&A

  • エクセルのマクロ

    こんばんは、宜しくお願いします。 エクセルで行を挿入し前行の数式をコピーするマクロの記録を行ったのが下記の内容です。 Sub Sounyu() ' ' Sounyu Macro ' Rows("4:4").Select Selection.Insert Shift:=xlDown Range("B3:C3").Select Selection.AutoFill Destination:=Range("F3:F4"), Type:=xlFillDefault Range("F3:F4").Select Range("G3").Select Selection.AutoFill Destination:=Range("G3:G4"), Type:=xlFillDefault Range("G3:G4").Select Range("A2").Select End Sub 最後の Range("A2").Selectを挿入した行のAのセルへ カーソルがいくようにするにはどのように変更したら 良いのでしょうか? 教えてください。

  • VBAでオートフィルができません

    エクセル2007です。 画像のようにA列に値を入れて、B列に半角にする関数を入れて、最終行までオートフィルをしたいのですが、 --------------------------------------------------------- Sub test() Dim 最終行 As Long 最終行 = Cells(65536, 1).End(xlUp).Row ActiveCell.FormulaR1C1 = "=ASC(RC[-1])" Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault End Sub --------------------------------------------------------- をすると、 Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault の部分で、 [実行時エラー'1004'アプリケーション定義またはオブジェクト定義エラー] になってしまいます。 原因と対策を教えてください。ご回答よろしくお願いします。

  • ExcelVBAでのオートフィルの使い方

    Excel2003です。 Bセルに入っている値をHセルまで右方向にオートフィルするマクロを組んでいるのですが、うまく動きません。 Bセルの最終行は変動し、オートフィルはBセルの最終行と最終行の1つ手前の2つ分をオートフィルしたいのです。 Range("B1").End(xlDown).Offset(-1, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault Range("B1").End(xlDown).Offset(0, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault これで、オートフィルしようと思っていたのですが、 Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault この式の実行で、 実行時エラー'1004' RangeクラスのAutoFillメソッドが失敗しました と、出てしまいます。   Selection.AutoFill Destination:=Range("B23:H23"), Type:=xlFillDefault こういうマクロなら動くので、AutoFillの後に明確な範囲指定をしていないせいなのでしょうか? 最終行が変動してしまう為、このような明確な範囲指定をする事ができません。 いい解決方法はないでしょうか?

  • エクセルVBAでのオートフィル

    Range("A1").Select Selection.AutoFill Destination:=Range("A1:A11"), Type:=xlFillCopy Range("A1:A11").Select 上記のスクリプトで、 Rangeのところを 隣あった列の最下段まで と、言うような指定はどうすればいいのでしょうか? B列の最後の行と隣り合ったセルまで、 A1のセルをコピーしたい場合です。

  • rangeからcellsに帰る場合の書式

    Sub Macro1() Range("A1").Activate Selection.AutoFill Destination:=Range("A1:A10"), Type:=xlFillDefault End Sub をRangeではなくCellsに変えたいのですが、 Sub Macro2() Range("A1").Activate Selection.AutoFill Destination:=Range(Cells(1, 1) & ";" & Cells(10, 1)), Type:=xlFillDefault End Sub だと、 実行時エラー1004になってしまいます。 Sub Macro3() Range("A1").Activate Selection.AutoFill Destination:=Range(Cells(1, 1), Cells(10, 1)), Type:=xlFillDefault End Sub だとうまくいくのですが、 なぜRengeの時は、「;」なのに、cellsの時は、「、」でいいのでしょうか?

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

  • Excel 簡潔

    Sub 問10率() Range("AY994").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1007C[-49]" Range("AY994").Select Selection.AutoFill Destination:=Range("AY994:CT994"), Type:=xlFillDefault Range("AY994:CT994").Select Selection.AutoFill Destination:=Range("AY994:CT1007"), Type:=xlFillDefault Range("AY994:CT1007").Select Range("AY1011").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1020C[-49]" Range("AY1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1011"), Type:=xlFillDefault Range("AY1011:CT1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1020"), Type:=xlFillDefault Range("AY1011:CT1020").Select End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      A     B    中略   AV     AW 993行  ラベル  北海    ~    沖     合計 994行  魚    21    ~    9    110 中略  1006行  他    60    ~    空欄    200 1007行  合計   11    ~    148   590 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      AX    AY    中略    CS     CT 993行  ラベル  北海    ~     沖     合計 994行  魚    0.2%   ~     0.0%    0.2% 中略  1006行  他    0.3%   ~     0.0%    0.3% 1007行  合計   100.0%  ~    100.0%   100.0% ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー     AX    AY     中略   CS      CT 993行 ラベル  北海     ~    沖      合計 994行 魚    B994/B$1007 ~ AV994/AV$1007   AW994/AW$1007 中略  1006行 他   B1006/B$1007 ~ AV1006/AV$1007  AW1006/AW$1007 1007行 合計  B1007/B$1007 ~ AV1007/AV$1007  AW1007/AW$1007 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー このコードをもっと短くする方法を教えてください。よろしくお願いします。 1個目と2個目の表は横につながっています。3個目は2個目の表の%を出した計算です。 値でなく式が入っています。空白のところは0.0%と表します。 3個目は実際はありません。

  • エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

    シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub

  • 『エクセル』 vbaでオートフィルができない

    Sub Macro1() Range("a1:a10").Select Selection.AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries End Sub がエラーになります。 内容は「RangeクラスのAotofillメソッドが失敗しました」 となります。 Sub Macro2() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub や Sub Macro3() Dim i As Long i = 1 While i <= 10 Cells(i, 1) = i i = i + 1 Wend End Sub と同じような動きをAutoFillを使ってVBAで行いたいのですが むりでしょうか? というのも、 A1に長い関数式を入れて A10000までオートフィルしたいのですが 手作業だと時間がかかるためマクロで行いたいです。 アドバイス宜しくお願い致します。

  • 【Excel2002VBA】Destinationを変数に

    Range("A1").Select Selection.AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries Range("A1:A10").Select の2行目のDestinationの次のセル範囲(Range("A1:A10")の部分) を変数で表現したいのですが 書き方が分かりません… ご存知の方、どうか教えてくださいm(_ _)m

専門家に質問してみよう