- ベストアンサー
Excel マクロ オートフィルで抽出後 削除したい
始めまして。 マクロ初心者です。 オートフィルで抽出後に抽出したものだけを削除するマクロを作成してますが、うまくいきません。 A列に「○」が入っているものだけを抽出 ↑このマクロまではできていますが、 その後の削除が上手くいきません。 教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
新規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)
こんばんは。 解答はすでに出ていますから、参考程度に書いてみました。 私には、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
- picopico_7
- ベストアンサー率30% (11/36)
マクロはコンピュータ内部では「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)
ANo.2です。 >Range("A1").AutoFilter Field:=1, Criteria1:="A" Excelのバージョンによっては Range("A1").AutoFilter Field:=1, Criteria1:="=A" こっちの方がいいかな?(Aの前に"="をつける)
- n-jun
- ベストアンサー率33% (959/2873)
オートフィルタですよね? オートフィルタで抽出したデータをクリア(ClearContents)してから オートフィルタを解除し、空白行ができるのでSpecialCells メソッドのType :xlCellTypeBlanks(空の文字列)で選択した範囲(行)を 消すというのではどうでしょう。
お礼
迅速なご回答ありがとうございます。 オートフィルタです。 大変申し訳ございません。 マクロ初心者なので、n-junさんの回答がわかりません… フィルタを1度解除ですか? メゾットとは…?