11/22/2021

Excel。VBA。名簿からフリガナの行単位で抽出したい【extract】

Excel。VBA。名簿からフリガナの行単位で抽出したい

<Excel VBA>

簡単そうに思う作業程、結構面倒ということがあります。

例えば、次のような表があります。


やりたいことは、B列の氏名がカ行の人をD列に抽出したいわけです。

このカ行という行単位のデータというのが、厄介なんですね。


作業を具体的に考えるとしたら、フリガナを表示させて、その左一文字がカ~コなのか判定させて、合致したデータを抽出先に、コピーするという感じでしょうか。


かなり面倒です。


しかし、Excel VBAには、フリガナを行単位で比較的簡単に抽出する方法があるのです。


その方法は、ワイルドカードを使う方法です。


ワイルドカードをつかったら、抽出できるのでしょうか?


そもそも、最初の一文字目が異なりますので、例えば「カ*」としても、「キ~」のデータは合致しませんので、抽出対象にはなりません。


どうしてもLEFT関数をつかい、フリガナを表示するPHONETIC関数をつかうことになるわけです。


ところが、Excel VBAのワイルドカードは、Accessのように、フリガナの行選択で抽出することができるのです。


では、プログラム文を作っていきます。

Sub カ行抽出()

    Dim i As Long

    Dim lastrow As Long

    

    lastrow = Cells(Rows.Count, "a").End(xlUp).Row

    

    For i = 2 To lastrow

        If Cells(i, "b").Phonetic.Text Like "[カ-コ]*" Then

            Cells(i, "b").Copy Cells(lastrow, "d").End(xlUp).Offset(1, 0)

        End If

    Next i

End Sub


これを実行すると、カ行に該当するデータを抽出することができました。


プログラム文を確認してみましょう。


お馴染み、変数宣言です。

Dim i As Long

Dim lastrow As Long

    

lastrow = Cells(Rows.Count, "a").End(xlUp).Row


Lastrowは、データの最終行番号です。

この数値をつかって、このあとのFor文の繰り返し数で使用します。


For i = 2 To lastrow ~ Next i

For文です。見出しを除くので、2から、最終レコード行数までを繰り返し処理をします。


If Cells(i, "b").Phonetic.Text Like "[カ-コ]*" Then End If

ここが、今回のカ行を抽出するところです。


「Phonetic.Text」で、該当するセルのフリガナ情報をGetします。

そして、Like "[カ-コ]*"。


Like演算子をつかった、ワイルドカードで行を抽出できます。


「[カ-コ]*」とすると、「カ*」「キ*」…「コ*」のように、カ~コで始まるデータという意味になります。


Excel VBAでは、可能なのですが、通常のExcelのワイルドカードでは、"[カ-コ]*"という設定を行うことができません。


Excelではできないけど、Excel VBAならできるということが、ありますので、Excel VBAの知識も増やしていくと、効率の良い解決方法が、見つかるかもしれません。


If文の中の処理は、

Cells(i, "b").Copy Cells(lastrow, "d").End(xlUp).Offset(1, 0)

該当するデータがあったら、D列にコピーします。

なお、.End(xlUp).Offset(1, 0)で、最終データのさらに下のセルと定義することができますので、データを上書きすることはありません。