複雑な表の中から必要な文字列だけを残して、他は削除するマクロがほしい!って思ったことないでしょうか。
もちろん標準機能のフィルター機能でも同様の効果が得られるですが、今回紹介したいのは、
✓ 文字列の種類が多すぎてフィルターで選択する作業がめんどう!
✓ 文字列が特定できているので他の行は全削除でよい!
こんな要望がある人向けです。
通常、繰り返しの処理をセルに与えてしまうとひどく時間がかかってしまうので、本VBAコードでは不要な行をまとめて選択させておいて、一気に削除する方法を取っています。
そのため、数百数千行の表であってもサクッと処理を完了させることができる優れモノです。
指定シートの不要行を一括で削除し、さらに高速化
不要行を削除するVBAコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Sub さる以外削除() Dim lRow As Long Dim i As Long Dim r As Range Dim ws As Worksheet Set ws = Worksheets("行削除") ws.Activate '下の範囲に数値で代入(数式削除) Set r = Range("B4:C100") 'rを数値に変更 r = r.Value Set r = Nothing lRow = ws.Cells(Rows.Count, 3).End(xlUp).Row '最終行を取得 For i = lRow To 4 Step -1 '最終行から4行目まで順に If ws.Cells(i, 3) <> "さる" Then '3列目が"さる"ならば If Not r Is Nothing Then 'もしrが空でない場合 Set r = Union(r, ws.Range(i & ":" & i)) 'rにRange(i:i)範囲を追加 Else Set r = ws.Range(i & ":" & i) 'Range(i:i)をrにセット End If End If Next i ' MsgBox r.Address 'rを確認したいときに使用する r.Delete Shift:=xlUp End Sub |
基本はコピペで使えますが、処理を開始する行の位置や、ワークシートの名称は変更する必要があります。
難しいことはまったくないです。
イメージと合わせて変更箇所を説明します。
コピペで使用する場合の変更箇所
変更が必要な箇所をマークして示します。
少し見づらいですが全部で6箇所、書き換える必要があります。
ピックアップして詳細を説明していきます。
要変更箇所のピックアップと説明
まずは、ワークシートの名称を指定してあげます。
これで対象のワークシートが決まります。
続いて、セルの範囲です。
上図の例ではB4~C100の範囲を選択しています。
表の範囲が多い場合は、すべて選択してあげてください。
次に対象が何列目にあるかを記入します。
下図のとおりです。
最後に、残したい対象の文字列を記入します。
下図の例では3行目の”さる”を見つけて、それ以外の行を削除するようにしています。
以上です。
これでマクロを実行すると、指定した文字列以外の行を削除することができます。
行を削除して不可逆なので、対象のsheetをコピーしてくるVBAと相性が良い
sheetコピーVBAのイメージ
毎回マクロボタンを作成するのが面倒なので、データを読み込んでくるシートを事前に準備しておきましょうという趣旨です。
準備しておきましょうと言っても、マクロボタンを一つこしらえておくのみ。
① データを読み込むマクロボタンを押し、
② 不要行を削除するマクロボタンで必要な行のみ残す
といった手順です。
瞬時にデータをもってきて、瞬時に必要な行だけ残す。
とっても効率的ですね!
業務効率化にもお役に立てると思います。
コメント