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

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

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

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

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

5091閲覧

VBA オートフィルタ後 非表示行の削除

ppss

総合スコア40

VBA

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

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/02/26 05:17

VBAにて オートフィルタでデータを抽出した後 非表示行を削除したいです。
ご教示お願い致します。

★前提
ワークシート【データ移行】 生データのシートです、オートフィルタでデータを抽出します。
ワークシート【A】 抽出データのみを表示させたいシートです。

下記のような考え方でコードを書いています。
①オートフィルタでデータを抽出
②抽出データを シート【A】に移行
③シート【A】の行を上から確認していき、非表示の行は消去する

★困っていること
非表示の行が削除されずに残っている

実際のコードは以下の通りです。

コードVBA '任意の期間のデータのみオートフィルタで抽出 Dim AD1 As Date Dim AD2 As Date AD1 = TextBox3.Value AD2 = TextBox4.Value Worksheets("データ移行").Select Worksheets("データ移行").Range("A2").AutoFilter field:=1, Criteria1:=">=" & AD1, Operator:=xlAnd, Criteria2:="<=" & AD2 '抽出した結果をAシートに移行 Sheets("データ移行").Copy AFTER:=Worksheets("B") ActiveSheet.name = "A" 'オートフィルターを解除 Worksheets("データ移行").Select Worksheets("データ移行").Range("A2").Select Selection.AutoFilter 'オートフィルタで非表示になっている行を削除 Worksheets("A").Select Dim AFN As Long Dim iAA As Long AFN = Worksheets("データ移行").Cells(Rows.Count, 1).End(xlUp).Row For iAA = 2 To AFN If Worksheets("A").Rows(iAA).Hidden Then Worksheets("A").Rows(iAA).Delete Next iAA

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

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

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

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

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

guest

回答2

0

何かにつけてDictionaryを使ってしまう私は、こんな感じで書いてみたりします。
(まとめて消すから早い? そうでもない?)

VBA

1Dim d As Object ' As Scripting.Dictionary 2Set d = CreateObject("Scripting.Dictionary") 3Dim ws As Worksheet, r As Range 4Set ws = Worksheets("A") 5For Each r In ws.AutoFilter.Range.EntireRow 6 If r.Hidden Then d.Add r.Address, 0 7Next 8If d.Count > 0 Then ws.Range(Join(d.Keys, ",")).Delete

投稿2021/02/26 11:08

jinoji

総合スコア4585

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

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

ppss

2021/03/01 07:38

ご回答ありがとうございます! 反応遅くなり申し訳ありません。 Dictionary 使用したことがなかったので勉強になりました! ありがとうございます。
guest

0

ベストアンサー

動かしてみたところ、AFN の値があやしいような。
それと Delete したら行が繰り上がるから下から消すべきところでは。
★の4行を変えてみました。これでいかがでしょう?

VBA

1Dim AD1 As Date 2Dim AD2 As Date 3 4AD1 = TextBox3.Value 5AD2 = TextBox4.Value 6 7Worksheets("データ移行").Select 8 9 Dim AFN As Long '-----------★ 10 AFN = Worksheets("データ移行").Cells(Rows.Count, 1).End(xlUp).Row '-----------★ 11 12Worksheets("データ移行").Range("A2").AutoFilter field:=1, Criteria1:=">=" & AD1, Operator:=xlAnd, Criteria2:="<=" & AD2 13 14 15'抽出した結果をAシートに移行 16 17 Sheets("データ移行").Copy AFTER:=Worksheets("B") 18 ActiveSheet.name = "A" 19 20'オートフィルターを解除 21 Worksheets("データ移行").Select 22 Worksheets("データ移行").Range("A2").Select 23 Selection.AutoFilter 24 25 26'オートフィルタで非表示になっている行を削除 27 Worksheets("A").Select 28 Dim iAA As Long 29 30 31 For iAA = AFN To 2 STEP -1 '-----------★ 32 If Worksheets("A").Rows(iAA).Hidden Then Worksheets("A").Rows(iAA).Delete 33 34 Next iAA 35 36 Worksheets("A").AutoFilterMode = False '-----------★ 37

投稿2021/02/26 09:45

FromMZ1500

総合スコア496

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

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

ppss

2021/03/01 07:37

反応遅くなりすみません 添削ありがとうございます! 上手くいきました!! 助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問