質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1186閲覧

VBA:オートフィルしていない行を削除したい

pomiw0000

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/12/01 08:07

編集2021/12/02 00:28

前提・実現したいこと

以下のコードではSheet1に抽出したい日付K5セルとM5セルに(例:2021/1/1~2021/2/10)を書き込んで、
日程シートのK列にフィルタをかけて対象の日付のみを表示させています。

しかし、オートフィルで表示していない行はすべて削除したいのですが
どのようなコードをかけばいいでしょうか。
[補足]
オートフィルタした行に色をつけたいのですが、
その場合はどうすればいいでしょうか。

該当のソースコード

Sub Filterdata() 'データを絞る Dim MaxRow As Long MaxRow = worksheets("日程").Cells(Rows.Count, 11).End(xlUp).row worksheets("日程").Range("K1") _ .AutoFilter Field:=11, _ Criteria1:=">=" & worksheets("Sheet1").Range("K5"), _ Operator:=xlAnd, _ Criteria2:="<=" & worksheets("Sheet1").Range("M5") End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

削除するときは後ろから削除しないとうまくいかない。(削除すことによって後の行が前に移動するため)

vba

1 Dim i As Long 2 With worksheets("日程").Range("K1").CurrentRegion.EntireRow 3 For i = .count To 2 Step -1 4 If .Rows(i).Hidden Then .Rows(i).Delete 5 Next 6 End With

あるいは、Unionでまとめて一気に削除するかですね。

vba

1 Dim R As Range, delR As Range 2 For Each R In Range("A1").CurrentRegion.EntireRow 3 If R.Hidden Then 4 If delR Is Nothing Then 5 Set delR = R 6 Else 7 Set delR = Union(delR, R) 8 End If 9 End If 10 Next 11 If Not delR Is Nothing Then delR.Delete

フィルターをかけて、非表示になった行を削除、その後フィルターを解除

vba

1Sub Filterdata() 2 3'フィルターをかける 4 Dim r As Range 5 Set r = Worksheets("日程").Range("K1") 6 r.AutoFilter Field:=11, _ 7 Criteria1:=">=" & worksheets("Sheet1").Range("K5"), _ 8 Operator:=xlAnd, _ 9 Criteria2:="<=" & worksheets("Sheet1").Range("M5") 10 11'非表示行の削除 12 Dim i As Long 13 With r.CurrentRegion.EntireRow 14 For i = .Count To 2 Step -1 15 If .Rows(i).Hidden Then .Rows(i).Delete 16 Next 17 End With 18 19'フィルター解除 20 r.AutoFilter 21End Sub

投稿2021/12/01 12:04

編集2021/12/02 02:00
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pomiw0000

2021/12/02 00:12

回答ありがとうございます。 上のコードは別で書く感じでしょうか?それとも既存のコードに追加する感じでしょうか?
hatena19

2021/12/02 00:29

どちらでもいいです。
pomiw0000

2021/12/02 00:44

実行してみたのですが、消えませんでした????
pomiw0000

2021/12/02 00:45

オートフィルタもついたままになっています
hatena19

2021/12/02 01:46

フィルターをかけて、非表示になった行を削除、その後フィルターを解除したいということですね。 サンプルコードを追記しておきますので、参考にしてください。 こちらのサンプルでは動作確認済みです。
guest

0

VBA

1 Dim r As Range 2 For Each r In Worksheets("日程").Range("K1").AutoFilter.Range.Rows 3 If r.Hidden Then r.EntireRow.Delete 4 Next 5

投稿2021/12/01 08:21

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問