• 締切済み

実行時エラー1004がでてしまう(VBA)

実行時エラー1004「RangeクラスのAutoFilterメソッドが失敗しました」が出てしまいます。 (1)とあるシートのL列に"判定"を作り、そこに、D列の名称の中に、特、SO、FRが入っていないものには〇をL列に入力し、〇が付くものを抽出するというものを作ったのですがエラーが出てしまいます。(この内容は@の範囲になります)解決策を教えていただけないでしょうか? (2)またこのVBAを行った際に、本ファイルの処理リストのデータと評価リストのデータが消えてしまいます。(データがうまく表示されていない状態で行間をダブルクリックすれば全て出てくる)解決策を教えていただけないでしょうか? ちなみに自分はVBA初心者です。 Sub 抽出() Dim フォルダ, ファイル名, 基本ファイル名 Dim i, j As String i = ActiveWorkbook.Name j = ActiveSheet.Name Application.DisplayAlerts = False '警告ダイアログボックスを表示しない 基本ファイル名 = Sheets("データリスト").Range("B8").Value '基本ファイル名(欲しいデータがあるBook)を定義 Workbooks.Open 基本ファイル名 '基本ファイル名(欲しいデータがあるBook)を開く Worksheets(1).Range("A1:O400").Copy '基本ファイル名内にある履歴データシートの内容をコピー Workbooks(i).Worksheets("処理リスト").Range("A1:O400").PasteSpecial '基本ファイル名のコピーを本ファイルの処理リストに貼り付ける Workbooks(基本ファイル名).Close SaveChanges:=False '基本ファイル名を閉じる Sheets(j).Select With Worksheets("処理リスト") .Range("A1").AutoFilter _ Field:=10, _ Criteria1:="003", _ Operator:=xlOr, _ Criteria2:="004" End With '本ファイルの処理リストのA列からの10列目の"003"もしくは"004" を抽出 'Dim k As Long …@ Range("L1") = "判定" For k = 2 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(k, 4).Interior If .Cells(k, 4) <> "" * 特 * "" And .Cells(k, 4) <> "" * SO * "" And .Cells(k, 4) <> "" * FR * "" Then Cells(k, 12) = "〇" End If End With Next k Range("A1").AutoFilter 12, "〇" →ここでエラーが出る …@ Dim データ範囲 As Range Dim 抽出列 As Variant Dim l As Long Set データ範囲 = Worksheets("処理リスト").Range("A1").CurrentRegion 抽出列 = Array(3, 4, 5, 10) For l = 0 To UBound(抽出列) データ範囲.Columns(抽出列(l)).Copy Sheets("評価リスト").Range("D7").Offset(0, l) Next '本ファイルの処理リストの3,4,5,10列を本ファイルの評価リストのD7に貼り付け Application.DisplayAlerts = True '警告ダイアログボックスを表示するに戻す MsgBox ("履歴データを取り込みました") End Sub

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.2

No1の追加です。 フィルターをオフは ActiveSheet.AutoFilterMode = False や Worksheets("シート名").AutoFilterMode = False でも。

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.1

Activeなシート(シートモジュールならそのシート)のA列からL列までにデータの無い列があるのではないでしょうか。 消えるのはフィルターがかかっているからだと思います。 フィルターがいらなくなった時点で Range("A1").AutoFilter 12, "〇" にたいしてだと Range("A1").AutoFilter のようにフィルターをオフにすればいかがでしょう。

関連するQ&A

  • VBAの実行時エラー91!どうしよう?

    excelVBAでファイル内の各シートを確認して、条件に合うシートのデータをコピーするところで、「実行時エラー'91'オブジェクト変数またはWithブロック変数が設定されていません。」というエラーが出ました。 確認したのですが、なかなか分かりません。どなたがご指導お願いできませんか。 コードは以下のとおりです。 Sub Tenki(theBook As Workbook, mySheet As Worksheet) Dim K_Sheet As Worksheet Dim DstRange As Range For Each K_Sheet In theBook.Worksheets  ’ここで、エラーが出ました! If K_Sheet.Name <> "C" Then Set DstRange = mySheet.Range("A" & _ mySheet.Range("A1").CurrentRegion.Rows.Count + 1) K_Sheet.Range("B7:K48").SpecialCells(xlCellTypeVisible).Select Range("B7:K48").Copy DstRange.PasteSpecial Paste:=xlPasteValues End If Next Application.CutCopyMode = False End Sub どうぞよろしくお願いします。

  • エクセルVBAで実行時エラー 91 が出ます

    エクセル2000です 各部署の棚卸を纏める為のVBAを作成しているのですが、実行時にエラーになってしまいます エラーメッセージは 「実行時エラー 91   オブジェクト変数またはWithブロック変数が設定されていません」 です ご教授お願いいたします Sub 棚卸() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("在庫集計票") Set sh2 = Worksheets("棚卸表") x = sh2.Range("A65536").End(xlUp).Row Z = sh1.Range("d2").Value ’部署番号 sh1.Range(Cells(5, Z), Cells(3000, Z)).ClearContents For i = 2 To x y = sh1.Range("A2:A" & Range("A2").End(xlDown).Row). _ Find(sh2.Cells(i, "a")).Row ’ここでエラーが発生します sh1.Cells(y, Z) = sh2.Cells(i, "c") Next i End Sub

  • エクセルVBA(掛け算)

    いつもおせわになります。 現在、下記のようなコードを書いてますがどうもうまくいきません。よろしくお願いいたします。 M列 = K列 × N列を6行目から最終行目で入れたくて下記のようなコードを書きました。 ところが・・・N列にはデータのない場合があるので、If~を入れてみました。ここまではうまくいったのですが、 O列 = K列 × P列のように数式を入れたい列が他にもあり、又同じコードを下記のように書いたら、P列にデータがないところで止まってしまいます。 '///////////////////////////////////////////// Dim wsS As Worksheet Dim r As Long Dim Srow As Long Set wsS = Worksheets("syukei") Srow = wsS.Range("D65536").End(xlUp).Row With Worksheets("syukei") For r = 6 To Srow If Cells(r, 12) = Noting Then r = r End If Cells(r, 13) = Cells(r, 11) * Cells(r, 12) Next End With With Worksheets("syukei") '↓////////ここらへんで止まる////////// For r = 6 To Srow If Cells(r, 14) = Noting Then r = r End If Cells(r, 15) = Cells(r, 11) * Cells(r, 14) Next End With End Sub 掛け算を入れたい行は、下記のようになっています。 M列=K列×L列 O列=K列×N列 Q列=K列×P列 S列=K列×R列 U列=K列×T列 W列=K列×V列 Y列=K列×X列 よろしくお願いいたします。

  • データ検索ネスト Excel VBA

    excel2003でデータ検索の処理をするというマクロをVBAで作成したいのですが、うまく動作しません。自作のVBAを記載してみましたので何が原因なのか教えてください。初心者です、よろしくお願いします。 Sub データ検索() Dim i As Integer, j As Integer, k As Integer, l As Integer Dim myRange As Range Dim IngLastrow As Long IngLastrow = Range("A65536").End(xlUp).Row For i = 3 To IngLastrow For j = 3 To 25 For k = 8 To 53 For l = 3 To 9 Set myRange = Worksheets("データベース").Cells(i, "o").Find(what:=Worksheets("コード").Cells(j, "o").Value, _ LookIn:=xlValues) If Not myRange Is Nothing Then Worksheets("予定").Cells(k, l).Value = myRange.Offset(, -12).Value End If Next l Next k Next j Next i End Sub

  • VBA 実行時エラー1004 について

    いつもお世話になります。 作表をしていて、項目に色をつけたいのですが VBA 実行時エラー1004 Rangeメソッドは失敗しました。Globalオブジェクト というエラーが If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then のところででます。 If Range("Z5").Interior.Color = RGB(252, 213, 180) Then とすると、実行できます。 Sub カラー() Dim n As Long '列番号取得 '最終列取得 n = Cells(5, Columns.Count).End(xlToLeft).Column MsgBox "最終列は" & n   '= 今回は30です。 'セルの色を変える If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(230, 184, 183) Else Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(252, 213, 180) End If End Sub どこが間違っているのか教えていただけないでしょうか? あと、スマートなコードの書き方もお願いします。

  • VBAでの説明がわかりません

    以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。 Sub まとめ() Dim i As Integer 'カウンタ変数iの宣言 Dim n As Integer  Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言 Dim MyC As Worksheet Worksheets.Add before:=Worksheets("全国") ActiveSheet.Name = "data" Set MyS1= Worksheets("data") With Worksheets("全国") MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value End With i=12 For Each MyC In Worksheets If MyC.Name<> "data" Then n = 12 MyS1.Cells(i,1)=MyC.Name i=i+1 Do While MyC.Cells(n,2).Value<>"" MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value i=i+1 n=n+1 Loop End If Next Myc End Sub

  • VBA 実行時エラー1004 

    初めまして。 VBA初心者です。 現在、あるセルの範囲に対して、1の数値が入っているなら 直線を引くマクロを作成中です。 実行すると「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」 と表示されます。 サイト等を見ながら、下記プログラムを書いてみました。 修正頂けると幸いです。解説も頂きたいです。 無茶苦茶なプログラムだと思いますが、 宜しくお願い致します。 Sub test01() Dim x As Range Dim c As Range Dim X1 As Single, Y1 As Single, X2 As Single, Y2 As Single Set x = Range("D4:E9") For Each c In x If Worksheets("Sheet1").Range("c").Value = 1 Then X1 = Worksheets("Sheet1").Range("c").Left + Worksheets("Sheet1").Range("c").Width Y1 = Worksheets("Sheet1").Range("c").Top + Worksheets("Sheet1").Range("c").Height / 2 X2 = Worksheets("Sheet1").Range("c").Offset(0, 1).Left Y2 = Worksheets("Sheet1").Range("c").Offset(0, 1).Top + Worksheets("Sheet1").Range("c").Offset(0, 1).Height / 2 Worksheets("Sheet1").Shapes.AddLine X1, Y1, X2, Y2 End If Next c End Sub

  • EXCEL2010エラーVBA

    下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

  • VBA コピペ Range エラー

    いつもありがとうございます。 https://okwave.jp/qa/q9586463.html この質問のコードを自力で実務用に改変中です。 GetShe.Range(Cells(RowCnt, 1), Cells(RowCnt, 2)).Copy PutShe.Cells(PutRowCnt, 1) ↑このコードでRangeメソッドが失敗しましたというエラーが出るのですが、超初心者のため、原因がわかりません。 GetSheシートのRowCnt行の1列目と2列目をコピーして、PutSheシートのPutRowCnt行の1列目に貼り付けしたいです。 ○番目のシート、行という意味です。 お願いします。 Sub msukei6() ' 変数を宣言 Dim GetShe As Worksheet Dim PutShe As Worksheet Dim SheCnt As Long Dim RowCnt As Long Dim ColCnt As Long Dim PutRowCnt As Long Dim x As Long ' このブックに何シートあるか調べる SheCnt = ThisWorkbook.Worksheets.Count ' "集計"シートが抽出先である Set PutShe = ThisWorkbook.Worksheets("集計") PutRowCnt = 9 For SheCnt = 4 To 6 ' コピー元は4シート目~6シート目 Set GetShe = ThisWorkbook.Worksheets(SheCnt) ' 各シートの氏名をカウントする x = WorksheetFunction.CountA(GetShe.Range("b3:b100")) Do For RowCnt = 3 To x + 3 ' コピー元は3行目からコピーする If GetShe.Cells(RowCnt, Worksheets("集計").Cells(4, 2)) <> "" Then PutRowCnt = PutRowCnt + 1 GetShe.Range(Cells(RowCnt, 1), Cells(RowCnt, 2)).Copy PutShe.Cells(PutRowCnt, 1) End If Next RowCnt Exit Do Loop Next SheCnt End Sub

  • エクセルVBAについて

    エクセルVBA初心者です。 左の表からある一定以上の売上を得た人を抽出し、右の表に表示したいのですが以下のプログラムだと上手くいきません。 どこがダメなのでしょうか? Private Sub cmdUriken_Click() Dim k As Integer Dim l As Integer Dim m As Integer k = 2 l = 2 m = 2 Do Until Cells(m, 32) = "" Range(Cells(m, 19), Cells(m, 34)).Select Selection.ClearContents m = m + 1 Loop Do Until Cells(k, 14) = "" If Cells(k, 14) >= txtUriken.Text Then Range(Cells(k, 1), Cells(k, 16)).Select Selection.Copy Range(Cells(l, 19), Cells(l, 34)).Select ActiveSheet.Paste l = l + 1 Application.CutCopyMode = False End If k = k + 1 Loop End Sub ちなみに If Cells(k, 14) = txtUriken.Text Then とするとちゃんと同等の売上が表示されるので >= の使い方が間違っていると思うのですが よろしくお願いします。