みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAでオートフィルタの可視セルクリア後空白行削除がうまくできません

VBA初心者です。

オートフィルターで抽出した行を削除したくて、以下のように書いたのですが、最後の一文でエラーになってしまいます。

◆エラー内容◆
実行時エラー1004
重複する選択範囲に対してそのコマンドを使用することはできません。


◆書いたVBA◆

  Range("A2").Select
Selection.AutoFilter Field:=1, Criteria1:="=1111", Operator:=xlAnd
'オートフィルターで「1111」を抽出

Dim r As Range
Set r = Range(Range("A3"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
r.ClearContents 'A列の可視セルの値をクリア

Range("A2").Select
Selection.AutoFilter 'オートフィルターの解除

r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'A列が空白の行は削除→ ココがエラーになります

---------------------------------------------------------

元のファイル構成は2行目に項目名で、3行目からデータが入っています。
いろいろ調べたのですが、よくわからなかったので教えていただければ
幸いです。

宜しくお願いします。

投稿日時 - 2008-07-18 16:38:56

QNo.4186246

困ってます

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

抽出データがない時は処理しないようにしたほうが良いでしょう。
また、抽出結果範囲を r にセットし直して、ダイレクトに削除すれば良いです。

Sub try()
  Dim r As Range
  
  With ActiveSheet
    Set r = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
    r.AutoFilter Field:=1, Criteria1:="=1111"
    If WorksheetFunction.Subtotal(3, r) > 1 Then
      Set r = Intersect(r, r.Offset(1).SpecialCells(xlCellTypeVisible))
      .AutoFilterMode = False
      r.EntireRow.Delete
    Else
      MsgBox "no data"
    End If
  End With
  Set r = Nothing
End Sub

投稿日時 - 2008-07-18 17:09:18

あなたにオススメの質問