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)で、最終データのさらに下のセルと定義することができますので、データを上書きすることはありません。