元データの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
No.3ベストアンサー
- 回答日時:
こんにちは
ざっとしか見ていませんが・・・
オートフィルタのCriteriaRangeが「元データ」シートになっているのが、説明文とは違うように思われます。
これだと、もっと違う結果になっていてもおかしくなさそうな気がしますけれど?
蛇足ですが、10,000行あると、一行ずつ削除してゆく方法の場合は多少時間がかかるかもしれません。(削除対象となる行数によりますが)
Union等で範囲をまとめておいて、一気にまとめて消す方法にすれば、速度は上がります。また、この場合はチェックを最終行から上向きに行わなくてもすみます。
別法として、フィルターをかけた状態で、別のシートに全体をコピペすれば表示行だけがコピーされますので、こちらの方が簡単かつ速い可能性があります。
うわーー!!これとても良いですね!!
>別法として、フィルターをかけた状態で、別のシートに全体をコピペすれば表示行だけがコピーされますので、こちらの方が簡単かつ速い可能性があります。
こちらに書き直しをしてみます!
うまく書けるか心配ですがチャレンジしてみます!!
No.2
- 回答日時:
フィルタは表示だけのことなので 「非表示」とは違います。
私だったら
一行づつ見ていって、指定された文字があるか判定して、あったらその行は削除する を最後の行まで行う
という風にやります
ありがとうございます!!
確かにそのほうが確実ですよね。まとめて削除のほうが処理が早いかな?
と思ったのですが
思った結果が出ていない以上、一行ずつ見ていくように変更も考えてみます!
ありがとうござます
No.1
- 回答日時:
早速ありがとうございます!!大変勉強になりました。
今回設定シートを作成したのは、残したい国名や国数が変わる為そこで自由に設定できればと思ったからでした。
頂いたURLをちゃんと理解して応用できるよう勉強励みます。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
【VBA】条件に一致しない行を削除したい 複数条件
Visual Basic(VBA)
-
Excel VBA A列が特定の値以外の場合、その行を削除
Excel(エクセル)
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
-
4
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
5
EXCEL VBA 条件に合致しない行を削除したい
Visual Basic(VBA)
-
6
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
7
VBAで特定の文字を含まない列の削除方法について
Excel(エクセル)
-
8
EXCELで条件に合わない行を削除して詰めて新しいシートに表示したいのですが
Excel(エクセル)
-
9
エクセルVBA 特定文字以外の行削除
Excel(エクセル)
-
10
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
11
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
12
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
13
【Excel VBA】複数の条件を満たすデータを行削除
Excel(エクセル)
-
14
VBAで重複データを合算したい
Excel(エクセル)
-
15
VBAでのリスト不一致抽出について
Visual Basic(VBA)
-
16
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
17
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
18
エクセルVBAで 2種のリストを比べて重複していないデータを最下行に追加するには
Excel(エクセル)
-
19
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
20
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
エクセルのデータがない行には...
-
数値に見えるものはすべて数値...
-
マクロで最終行を取得してコピ...
-
Excel VBAでオートフィルタで抽...
-
ピポットテーブルのマクロについて
-
【VBA】条件に一致しない行を削...
-
VBAによりマッチング操作
-
エクセルのVBAで指定した行数の...
-
Excel VBA オートフィルタの結...
-
マクロにて指定の文字間の文字...
-
Access2003レポート:最終ペー...
-
Excel マクロ 検索結果を別シ...
-
excel2021で実行できないマクロ...
-
EXCEL VBAでA列にある空白行よ...
-
Excel 別ブックから該当データ...
-
テキストファイル読み込みにお...
-
WPSOffice_マクロの有効化について
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
数値に見えるものはすべて数値...
-
エクセルのデータがない行には...
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
【VBA】条件に一致しない行を削...
-
エクセルのVBAで指定した行数の...
-
VB.net
-
Excel VBAでオートフィルタで抽...
-
マクロにて指定の文字間の文字...
-
Excel97 指定した行だけマク...
-
EXCEL VBAでA列にある空白行よ...
-
excel2021で実行できないマクロ...
-
Excel 別ブックから該当データ...
-
VBAでの重複データに色付け
-
Excel VBA オートフィルタの結...
-
エクセルで階層図を作る方法
-
VBAで特定の行と一つ上の行を削...
-
【至急】Excel 同一人物の情報...
-
Excelで、マウスで範囲を選択し...
おすすめ情報
ご指摘どおり正しくは↓↓
'フィルタで一致するもののみ表示する
.Range("D5:D" & m1).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Worksheets("設定").Range("C2:C" & m2)
でした。