エクセル(2003)のVBAに関する質問です。

このQ&Aのポイント
  • エクセル(2003)のVBAを使用して特定の行数までの表の一番下の行にオートフィルを行うマクロを作成しましたが、実行時エラーが発生しています。
  • Workbook_Open()サブルーチン内で、特定の行数までの表の一番下の行(B列からW列)にオートフィルを行うためのコードを記述しましたが、エラーが発生しています。
  • エクセル(2003)のVBAを使用して特定の行数までの表の一番下の行にオートフィルを行うためのマクロを作成しましたが、実行時エラーが出てしまいます。解決方法を教えてください。
回答を見る
  • ベストアンサー

エクセル(2003)のVBAに関する質問です。

エクセル(2003)のVBAに関する質問です。 例えば、B列からW列のある特定の行数までの表があるとします。 表の一番下の行(B列からW列)を368行までオートフィルを行うマクロを 以下のように考えましたが実行時エラーがでてしまいます。 Private Sub Workbook_Open() Dim rng As Range Set rng = Cells(Rows.Count, "B").End(xlUp).Resize(1, 21) rng.AutoFill Destination:=Range(rng, "W368"), Type:=xlFillSeries End Sub 初歩的な質問で恐縮ですが、ぜひ解決方法を教えて下さい。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>B列からW列 までだったら22列あります。 rngの列数とRange(rng, "W368")の列数が違ってるためエラーになってます。 また、Range(rng, "W368")でもいいですけど、気分的にはRange(rng(1), "W368")がしっくりくるかな... あと余談ですが、シートを指定してないのでOpen時にActiveだったシートが対象になりますけどその仕様でいいのでしょうか? 例えば Dim rng As Range With Sheets("Sheet1") 'とかActivesheetとか。   Set rng = .Cells(.Rows.Count, "B").End(xlUp).Resize(1, 22)   If rng.Row <> 368 Then     rng.AutoFill Destination:=.Range(rng.Item(1), "W368"), Type:=xlFillSeries   End If End With Set rng = Nothing こんな感じでシートを明示しておいたほうが良いです。

nattouotaku
質問者

お礼

良く見ると1列隠れていました。 ご指導ありがとうございました。

その他の回答 (2)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

Range(rng, "W368") こんな書き方はありません。

回答No.1

操作でも実行できそうなので、マクロの記録をしてそれを元に改造すればいいのではないでしょうか。

関連するQ&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'アプリケーション定義またはオブジェクト定義エラー] になってしまいます。 原因と対策を教えてください。ご回答よろしくお願いします。

  • EXCEL2007マクロ/オートフィルについて

    VBA初心者です。 EXCEL2007でオートフィルのマクロを作ったのですが、下記のケースで困っています。 A列のデータが入っている行までB列のデータをオートフィルで入力したく、 A列の最終行からデータが入っている行までを求めてB列のデータをオートフィルで入れるため、下記のマクロを設定しました。 Sub test()   Range("B1").AutoFill Destination:=Range("B1", Range("A1048576").End(xlUp).Offset(, 1)) End Sub ところが、A列のデータが2行以上ある場合はうまくいくのですが、一行のみだった場合オートフィルができなくてマクロがとまってしまいます。 一行なので当然なのですが、このような処理をしたい場合、他に方法はないものでしょうか? お知恵を拝借できますと大変助かります。 どうぞよろしくお願いいたします。

  • 実行時エラー1004 オートフィルができない

    エクセルなのですが、A列の文字にたいする数式をB列に入れて最終行までオートフィルするマクロを作りたいのですが実行時エラー1004が発生してしまいます。 Sub macro1() Dim LastRow As Long LastRow = Range("A65536").End(xlUp).Row Range("B1").Value = "=LEN(A1)" Range(Range("B1"), Selection).AutoFill Destination:=Range("B1:B" & LastRow) End Sub このコードです。 Range(Range("B1"), Selection). ここら辺が怪しいかなと思ってるのですが、どうすればいいでしょうか? オートフィルを使わずにfor~nextでやる方法も知ってますが、オートフィルでやる方法をご教授いただきたいです。 よろしくお願いします。

  • VBAコピー範囲について教えてください。

    VBAのコピーペーストの下記プログラムで、 Sub コピー() Dim rng As Range Set rng = Worksheets("2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) With Range("b2:J10") rng.Resize(.Rows.Count, .Columns.Count).Value = .Value End With End Sub コピー範囲 のJ10の部分(データ入力行)が、その都度変わるため、J10の部分を、 J列のデータが入力されている最終行としたいのですが、どのようなプログラムに すればよいのでしょうか。 どなたかよろしくお願いいたします。

  • エクセルでのVBA(マクロ)

    以前Wendy02さまに 以下のようなデータがシート1に入力されているもので   A  B   C    D   E    F  1名前 住所 請求書 納品書 領収書 到着確認書 2山田 東京  ○       ○ 3井上 千葉      ○   ○    ○ 4植田 大阪      ○   ○ 5境  秋田  ○   ○ 6大田 沖縄  ○   ○   ○    ○ 7野原 埼玉          ○ データの”○”は書類が確認済で、空白は未確認あるいは未到着です。 "C"列から"F"列の中で1つ以上空白のあるデータを検索して別シート2へそのままコピー出来るマクロを教えていただいたのですが、 A列に受付番号(500件)を先に入力しておいて(一応自分でマクロを組んで)同じ処理をするとデータ(B列:名前)が入力されていないものまで検索結果としてカウントされます。 Sub FindBlank1() Dim Rng As Range Dim i As Long 'Sheet2のフィールド行(名前,住所..)は、1行目にあるとします。 With Sheet1 .Activate i = 2 '2行目から Set Rng = .Range("A1", .Range("A65536").End(xlUp)) For Each c In Rng  If Application.CountA(c.Offset(, 2).Resize(, 4)) <> 4 Then    'A列から、A列を含めて6列取得し、Sheet2にコピー    c.Resize(, 6).Copy Sheet2.Cells(i, 1).Resize(, 6)    i = i + 1  End If Next End With End Sub >i = 2 '2行目から の前に組めば出来る筈だと思うのですが? お助けください。

  • エクセルVBAで表の塗りわけ

    エクセル2003です。 添付画像のような表を、B列の時刻を基準に、何時台かで表を上から順に4色に色分けしようと思います。 一応、以下のコードで出来たのですが、Offset(-1).Value で見ている1行目のタイトル行が文字列なのでOn Error Resume Next でエラー回避しなくてはいけません。 他にもっと良い方法はないでしょうか? Sub test001() Dim cl As Variant Dim n As Long cl = Split("2,19,35,39", ",") For Each rng In Range("B2", Cells(Rows.Count, "B").End(xlUp)) On Error Resume Next If Hour(rng.Value) <> Hour(rng.Offset(-1).Value) Then n = n + 1 End If On Error GoTo 0 rng.EntireRow.Interior.ColorIndex = Val(cl(n Mod 4)) Next End Sub

  • エクセルVBAで範囲内での位置取得(行&列)

    Sub test() Set Rng = Range("B2:E7") Rng.Cells(2, 2).Select End Sub これで、範囲Rng内では2行/2列目となるC3セルが選択されます。 では、C3セルが、範囲Rng内で何行/何列目であるかを取得するにはどのように記述すればよいのでしょうか? Rng.Cells(2, 2).Rowは、当たり前ですが、3になってしまいます。

  • VBAを実行しても結果が反映されない??

    下記のVBAを作成しましたが結果が反映されません ※実際は反映されているのかもしれませんが思うような結果ではありません やりたいこととしてはボタンを選択すると 特定のシート[BBB]の[B2:D2]を シート[AAA]の最終行と同じ行番号までコピーすることです おかしい個所をご指摘いただきたいです ※同様の質問を他の形でさせていただきましたがうまくいかなかったため新しく組み直したものです --- Private Sub CommandButton_Click() Dim ws As Worksheet Set ws = Worksheets("BBB") Range("B2:D2").Select Selection.AutoFill Destination:=Range("B2:D" & Sheets("AAA").Range("A1").End(xlUp).Row) Range("B2:D" & Sheets("AAA").Range("A1").End(xlUp).Row).Select End Sub

  • Excel のVBAに付いて教えて下さい。

    前回、質問しました内容が関連してくるんですが 参考に下記のURLを ご覧になって下さい。 http://okwave.jp/qa/q7472816.html 前回の内容ですと、指定した列を月で指定してComboboxで選択していました。 その指定した列に特定の文字数を入力すると言う動作を作成しました。 特定の文字数を入力すると言う内容ですが、現時点では指定した列に上から下に 順序に入力して行くように作成してます。 そのコードが”Set myRng = Range(rng).End(xlUp).Offset(1)”です。 今回は、Comboboxで指定した列の2つ隣の列に日付が入力されています。 2つ隣と言うのは、左に向かって2つ隣です。 例えばC列を指定したとすればA列を表します。 実際に行いたいことは、指定した列の日付の入った行を検索し、指定した日付の所に 文字数を入力したいと考えています。 Userformを使って入力しているんですが、Combobox1が月の列を選択していますので、 新たにCombobox2を作りCombobox2で指定した日付(行)を選択し入力できる様に作成 したいのですが・・・今、使っているコードを基にCommandbox2を追加して作成できますでしょうか? 現在のコードは下記です。 Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 12 Me.ComboBox1.AddItem i & "月" Next End Sub Private Sub CommandButton1_Click() Dim myRng As Range Dim rng As String Select Case ComboBox1.Value Case "1月": rng = "az76" Case "2月": rng = "be76" Case "3月": rng = "bj76" Case "4月": rng = "ak41" Case "5月": rng = "ap41" Case "6月": rng = "au41" Case "7月": rng = "az41" Case "8月": rng = "be41" Case "9月": rng = "bj41" Case "10月": rng = "ak76" Case "11月": rng = "ap76" Case "12月": rng = "au76" Case Else: Exit Sub End Select Set myRng = Range(rng).End(xlUp).Offset(1) myRng.Value = TextBox1.Value End Sub

  • ExcelのVBAのAutoFillの使い方について

    Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。 何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。 下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、 「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」 の行でエラーが発生します。 「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。 Private Sub CommandButton1_Click()   ActiveSheet.Range("A1").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries   ActiveSheet.Range("A2").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries End Sub どなたかエラーの原因を教えていただけないでしょうか? よろしくお願いいたします。

専門家に質問してみよう