- ベストアンサー
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
- shinkami
- お礼率73% (157/215)
- オフィス系ソフト
- 回答数2
- ありがとう数3
- みんなの回答 (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
関連する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個目は実際はありません。
- ベストアンサー
- Excel(エクセル)
- エクセル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
- ベストアンサー
- Visual Basic
- 『エクセル』 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
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご回答有難うございました。 おかげさまで解決できました。