4/20/2021

Excel。VBA。オートフィルターでセルの一部が合致するデータを抽出して別シートにコピーしたい。【Copy to sheet】

Excel。VBA。オートフィルターでセルの一部が合致するデータを抽出して別シートにコピーしたい。

<Excel VBA>

大量のデータを読み込んだりした後に、該当するデータを抽出して処理をするということは、よくあります。


作業自体の流れとしては、オートフィルターなどをつかって、データを抽出するわけですね。

ただ、いつも同じ条件で抽出して決まったシートにコピーするという作業は、単純作業になってしまうので、面倒くさい作業になってしまいます。


さらに、抽出条件が、「セルの一部が合致する」ものを抽出したいということで、オートフィルターの抽出設定も面倒となるわけです。


それがこのデータ。


やりたいことは、C列の住所にある「横浜市」のデータを抽出して別のシートにコピーしたいわけです。


オートフィルター機能を使った場合には、「テキストフィルター」にある「指定の値を含む」から、「横浜市」と設定することで抽出してくれます。


「テキストフィルター」の中にはいっての設定ですから、やっぱり面倒ですね。

ところで、「指定の値で始まる」というのは、どのように表現したらいいのでしょうか?


「テキストフィルター」にある、「指定の値で始まる」「指定の値で終わる」「指定の値を含む」は、ワイルドカードを使用することで表現することが出来ます。


横浜市から始まるデータを抽出したいので、ワイルドカードをつかった条件は「横浜市*」とすることで抽出できます。

横浜市以降の複数の文字が含まれていますので「*(アスタリスク)」を使います。


都道府県まで含まれていた場合は、「*横浜市*」とします。

ただ注意しないといけないのは、「中央区」とか「緑区」など、他の地域でも使われていることが想定される場合には、「東京都中央区」とか「横浜市緑区」など範囲を広げて、ワイルドカードを使ってあげる必要があります。


それでは、プログラム文を確認しておきましょう。


Sub ワイルドカードで抽出()

    Range("a1").AutoFilter field:=3, Criteria1:="横浜市*"

    Range("a1").CurrentRegion.Copy Destination:=Worksheets("COPY").Range("a1")

    Range("a1").AutoFilter

End Sub


それでは、実行してみましょう。


このように、「横浜市」から始まるデータを抽出することができました。

それでは、プログラム文を確認しておきましょう。


Range("a1").AutoFilter field:=3, Criteria1:="横浜市*"

AutoFilterでオートフィルターを設定します。

field:=3は、左から3列目ということで、住所の列が対象です。


Criteria1:="横浜市*" で、横浜市という文字で始まるデータが抽出条件です。

ここで、「*(ワイルドカード)」を使います。


Range("a1").CurrentRegion.Copy Destination:=Worksheets("COPY").Range("a1")

Range("a1").CurrentRegion.Copyで、A1から連なっている範囲(CurrentRegion)をコピーします。


Destination:=Worksheets("COPY").Range("a1")は、COPYシートのA1をコピー先とする意味ですね。


Range("a1").AutoFilter

コピーが終了したので、オートフィルターを残しておいてもしょうがないので、オートフィルターを解除するのがこの行です。


たった3行のプログラム文ですが、作業効率を改善できるかもしれませんので、通常作業も、Excel VBAをつかって、マクロを作ってみるといいかもしれませんね。