[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「オートフィルタ抽出後の非表示行の削除」[takasa_ara] について』(としよりのひやみず)
投稿
[[20100323161444]] 『オートフィルタ抽出後の非表示行の削除』(takasa_ara)
についてのご回答=削除したい行をオートフィルタで表示させて削除=をマクロで実行したいと思い、作業を記録させてみたのですが、削除したい行がいつも同じところにあるとは限らない場合、どのようにアレンジすればいいでしょうか?
ご指導よろしくお願いいたします。
ActiveSheet.Range("$A$1:$K$25").AutoFilter Field:=6, Criteria1:=Array( _
"5315800", "7301500", "8349700", "1900000"), Operator:=xlFilterValues Rows("3:8").Select Selection.Delete Shift:=xlUp Rows("1:1").Select Selection.AutoFilter
< 使用 Excel:Excel2010、使用 OS:unknown >
Sub test() Dim iw As Long
With ActiveSheet If .AutoFilterMode = True Then .AutoFilterMode = False End If .Range("$A$1:$K$25").AutoFilter Field:=6, Criteria1:=Array( _ "5315800", "7301500", "8349700", "1900000"), Operator:=xlFilterValues iw = .Cells(.Rows.Count, "A").End(xlUp).Row If 1 < iw Then .Rows("2:" & iw).Delete Shift:=xlUp End If .AutoFilterMode = False End With End Sub (???) 2017/10/04(水) 17:12
ActiveSheetということなら
Sub test() Dim rng As Range With Range("$A$1:$K$25") .AutoFilter Field:=6, Criteria1:=Array("5315800", "7301500", _ "8349700", "1900000"), Operator:=xlFilterValues If Evaluate("subtotal(3," & .Columns(6).Address & ")") = .Rows.Count Then .AutoFilter: Exit Sub End If Set rng = .SpecialCells(12).EntireRow .AutoFilter rng.Hidden = True .SpecialCells(12).EntireRow.Delete .Rows.Hidden = False End With End Sub (seiya) 2017/10/04(水) 18:49
Sub test()
ActiveSheet.Range("$A$1:$K$25").AutoFilter _ Field:=6, _ Criteria1:=Array("5315800", "7301500", "8349700", "1900000"), _ Operator:=xlFilterValues ActiveSheet.AutoFilter.Range.Offset(1).Delete Shift:=xlUp ActiveSheet.AutoFilter.Range.AutoFilter End Sub
ActiveSheet.AutoFilter.Range
↓
「アクティブシートのオートフィルターが掛かっているセル範囲」 の意
マクロの記録では出てきませんが、VBAでは、こういう表現が用意されているので、
これに対して何かの命令をしてやってください。(削除やオートフィルターの解除等)
オートフィルターモードの間は非表示のセルについては操作の対象外になります。
なので、ざっくり表現してやればよいです。
が、タイトル行は無視されないので、操作対象を1行ずらして削除してます。
※注意
ただし、1行ずらせば、最初の対象より1行ずれるので、
表の外に対しても操作の対象になるので、表の1行下のセルを削除してまずい場合は、
もう少し丁寧にセル範囲を表現してやる必要があります。
また、With句というものを使えばも少しスッキリします。
Sub test2()
With ActiveSheet.Range("$A$1:$K$25") .AutoFilter _ Field:=6, _ Criteria1:=Array("5315800", "7301500", "8349700", "1900000"), _ Operator:=xlFilterValues 'もし、1件以上(タイトル行を含むので実際には1より大きい数になったら) If .Columns(1).SpecialCells(xlCellTypeVisible) > 1 Then '1行下から表の行数より1少ない行数分の削除(非表示行は無視される) .Offset(1).Resize(.Rows.Count - 1).Delete Shift:=xlUp End If .AutoFilter End With End Sub
こういう風にセル範囲を自在に表現できるといいかもです。
(まっつわん) 2017/10/05(木) 13:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.