
元データの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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
オンライン健康相談gooドクター登場
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
【VBA】条件に一致しない行を削除したい 複数条件
Visual Basic(VBA)
-
ExcelのVBAプログラム作成について
Visual Basic(VBA)
-
for Each の入れ子で、できそうなのですが。。。。
Visual Basic(VBA)
-
4
VBAのやり方
Visual Basic(VBA)
-
5
VBAで数値を左から蓄積していきたいのですが、下記コードを直すとしたらどうすればいいか教えて下さい。
Visual Basic(VBA)
-
6
【エクセルVBA】お願いします。csvファイルを文字列形式のxlsxに変換したいのですが・・・
Visual Basic(VBA)
-
7
条件によりオートシェイプを操作したい
Visual Basic(VBA)
-
8
WorkSheets Add について
Visual Basic(VBA)
-
9
excelVBAについて
Visual Basic(VBA)
-
10
VBA 入力月で該当シートを選択する方法
Visual Basic(VBA)
-
11
For Eachを使わないVBA マクロ
Visual Basic(VBA)
-
12
VBAでプログラム考えているのですが、困っています。
Visual Basic(VBA)
-
13
VBSでフォルダ内の最新VBAファイルを開き実行したい
Visual Basic(VBA)
-
14
Excel VBA Changeイベントのコードで実行しない件について
Visual Basic(VBA)
-
15
Excel VBA に関する質問です。
Visual Basic(VBA)
-
16
vba 進捗状況
Visual Basic(VBA)
-
17
VBA
Visual Basic(VBA)
-
18
エクセルVBA→シート名でCSV出力する際、シートの文字列はそのままで、CSVでは文字を置き換えて出
Visual Basic(VBA)
-
19
VBA コードを実行すると画面が真っ白になる
Visual Basic(VBA)
-
20
ExcelVBAで以下のマクロを作成したのですが特定のPCで出力結果が異なってしまいます
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルVBAでデータの蓄積方法?
-
5
複数セルの入れ替え方法 excel vba
-
6
エクセルのVBAで指定した行数の...
-
7
【VBA】条件に一致しない行を削...
-
8
Excel VBAでオートフィルタで抽...
-
9
縦に並ぶ大量の資格データを、...
-
10
エクセルで空白行を削除する ...
-
11
エクセルで階層図を作る方法
-
12
エクセルVBAで3つ以上の複...
-
13
excel2013 マクロで自動に保存...
-
14
Excelのマクロでボタンを押すと...
-
15
複数のExcelブックから特定シー...
-
16
マクロ 自動でパスワード及び指...
-
17
VBAで保存しないで閉じると空の...
-
18
エクセルの、記録を終了したマ...
-
19
EXCELのマクロが他のパソコンで...
-
20
個人用マクロのショートカット...
おすすめ情報
ご指摘どおり正しくは↓↓
'フィルタで一致するもののみ表示する
.Range("D5:D" & m1).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Worksheets("設定").Range("C2:C" & m2)
でした。