• ベストアンサー

Excel マクロ オートフィルで抽出後 削除したい

始めまして。 マクロ初心者です。 オートフィルで抽出後に抽出したものだけを削除するマクロを作成してますが、うまくいきません。 A列に「○」が入っているものだけを抽出 ↑このマクロまではできていますが、 その後の削除が上手くいきません。 教えて下さい。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

新規Bookを準備して、標準モジュールに下記コードをコピペして 実行してみて下さい。 Sub try()  'ダミーデータのセット Range("A1").Value = "名前" Range("A2:A6").Value = Application.Transpose(Array("A", "B", "A", "C", "A")) Range("B2:B6").Value = "=Row()-1" Range("B2:B6").Value = Range("B2:B6").Value MsgBox "データセット完了" Dim r As Range 'オートフィルタ 抽出条件"A" Range("A1").AutoFilter Field:=1, Criteria1:="A" MsgBox "条件Aで抽出しました" 'rに項目行(A1)は消さないので、A2~A列最終行の”見えているセル”の値をセットし 'その値をクリア Set r = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) r.ClearContents MsgBox "可視セルをクリアしました" 'オートフィルタを解除 Range("A1").AutoFilter MsgBox "オートフィルタを解除しました" 'rにセットした範囲で空白セルのある行(A列がクリアされた範囲)を削除し、上に詰める r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete MsgBox "条件Aのあった行を削除し、上に詰めました" End Sub >メゾットとは…? 参考書か何かを見ながら、コードを作っているのではないのでしょうか? それであれば、大抵記載されていると思いますよ。 取り敢えずは上のコードで動きを確かめてみて下さい。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 解答はすでに出ていますから、参考程度に書いてみました。 私には、SpecialCells の使い方は、少し難しいような気がしました。 .SpecialCells(xlCellTypeVisible).Rows.Count =1 のときは、タイトル行が存在しているだけです。 .Offset(1).Resize(.Rows.Count - 1) は、タイトル行を削除しないようにしています。 Sub TestSort_Delete()   Dim lngRow As Long   With ActiveSheet     'エラーが発生したら、ErrHandler に飛ぶ     On Error GoTo ErrHandler     .Range("A1").CurrentRegion.AutoFilter _     Field:=1, _     Criteria1:="○"     '○の行の削除の方法     With .AutoFilter.Range       'すでに削除されてしまっているときは、削除を行わない       If .SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then         .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete       End If     End With ErrHandler:     If Err.Number > 0 Then       MsgBox Err.Number & ": " & Err.Description, 48     End If     .Range("A1").CurrentRegion.AutoFilter   End With End Sub

回答No.4

マクロはコンピュータ内部では「VBA」と言うコードで登録されています。 VBAを多少いじれるようになるとムダのないお好み通りのマクロを作れるようになりますが、stay_stayさんはマクロ初心者とのことですのでとりあえず下記の方法ではいかがでしょう? 1.マクロの記録を開始 2.オートフィルタの設定(データ→フィルタ→オートフィルタ) 3.あらかじめデータが入力されている範囲を範囲選択しておく (この時のポイントはデータの1番左上に当たるセルをアクティブにしておき、[ctlr] + [shift] + [→] でデータ範囲の右端まで範囲選択させ、同様に[ctlr] + [shift] + [↓] でデータ範囲の下端まで範囲選択させる。この方法でマクロを作るとデータが10行しかないときでも20行あるときでも常にデータ全体を範囲選択してくれる。) 4.オートフィルタでA列に○が入っている行を抽出 5.表示されている行だけが選ばれている状態にする(編集→ジャンプ→セル選択→可視セル) 6.行の削除 7.オートフィルタで全てのセルを表示させる 8.マクロ記録終了

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.2です。 >Range("A1").AutoFilter Field:=1, Criteria1:="A" Excelのバージョンによっては Range("A1").AutoFilter Field:=1, Criteria1:="=A" こっちの方がいいかな?(Aの前に"="をつける)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

オートフィルタですよね? オートフィルタで抽出したデータをクリア(ClearContents)してから オートフィルタを解除し、空白行ができるのでSpecialCells メソッドのType :xlCellTypeBlanks(空の文字列)で選択した範囲(行)を 消すというのではどうでしょう。

stay_stay
質問者

お礼

迅速なご回答ありがとうございます。 オートフィルタです。 大変申し訳ございません。 マクロ初心者なので、n-junさんの回答がわかりません… フィルタを1度解除ですか? メゾットとは…?

関連するQ&A