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をつかって、マクロを作ってみるといいかもしれませんね。