システムメンテナンスのお知らせ

元データのD列の中で設定シートに記載されている文言を残し他の行を削除したいです。

元データは10,000行くらいあります。
D列に国名が入っているのですが、アジア圏だけ残して他の行は削除したいです。
残したい国名は【設定】というシートを作成しC列に記載しました。

以下記載してみたのですが、実行した結果、C4以降のセルは思った通りに動いたようですがC3セルに記載した国名だけ1行しか残らず削除されてしまいました。
どこを修正すればよいのか解らず。ご教示いただきたいです!!よろしくお願いいたします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub 不要な行を削除したい()

With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With

Dim i As Long
Dim m1 As Long
Dim m2 As Long

'元データと設定の最終行を求める
m1 = Worksheets("元データ").Range("D" & Rows.Count).End(xlUp).Row
m2 = Worksheets("設定").Range("C" & Rows.Count).End(xlUp).Row

With Worksheets("元データ")

'フィルタで一致するもののみ表示する
.Range("D5:D" & m1).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Worksheets("元データ").Range("C2:C" & m2)

'最終行から非表示になっている行を削除
For i = m1 To 2 Step -1
If .Rows(i & ":" & i).Hidden = True Then
.Rows(i & ":" & i).Delete Shift:=xlUp
End If
Next

'フィルタ解除
.ShowAllData

End With
End Sub

質問者からの補足コメント

  • ご指摘どおり正しくは↓↓

    'フィルタで一致するもののみ表示する
    .Range("D5:D" & m1).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Worksheets("設定").Range("C2:C" & m2)

    でした。

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/12/25 11:42
gooドクター

A 回答 (3件)

こんにちは



ざっとしか見ていませんが・・・

オートフィルタのCriteriaRangeが「元データ」シートになっているのが、説明文とは違うように思われます。
これだと、もっと違う結果になっていてもおかしくなさそうな気がしますけれど?


蛇足ですが、10,000行あると、一行ずつ削除してゆく方法の場合は多少時間がかかるかもしれません。(削除対象となる行数によりますが)
Union等で範囲をまとめておいて、一気にまとめて消す方法にすれば、速度は上がります。また、この場合はチェックを最終行から上向きに行わなくてもすみます。
別法として、フィルターをかけた状態で、別のシートに全体をコピペすれば表示行だけがコピーされますので、こちらの方が簡単かつ速い可能性があります。
この回答への補足あり
    • good
    • 0
この回答へのお礼

助かりました

うわーー!!これとても良いですね!!
>別法として、フィルターをかけた状態で、別のシートに全体をコピペすれば表示行だけがコピーされますので、こちらの方が簡単かつ速い可能性があります。

こちらに書き直しをしてみます!
うまく書けるか心配ですがチャレンジしてみます!!

お礼日時:2020/12/25 11:47

フィルタは表示だけのことなので 「非表示」とは違います。



私だったら
一行づつ見ていって、指定された文字があるか判定して、あったらその行は削除する を最後の行まで行う
という風にやります
    • good
    • 0
この回答へのお礼

Thank you

ありがとうございます!!
確かにそのほうが確実ですよね。まとめて削除のほうが処理が早いかな?
と思ったのですが
思った結果が出ていない以上、一行ずつ見ていくように変更も考えてみます!
ありがとうござます

お礼日時:2020/12/25 11:21

条件に一致しない行を削除するマクロ


http://www.excel.studio-kazu.jp/kw/2015012817270 …
    • good
    • 0
この回答へのお礼

早速ありがとうございます!!大変勉強になりました。

今回設定シートを作成したのは、残したい国名や国数が変わる為そこで自由に設定できればと思ったからでした。

頂いたURLをちゃんと理解して応用できるよう勉強励みます。ありがとうございます。

お礼日時:2020/12/25 11:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング