ExcelのVBAにてファイルの拡張子の比較をしようとしたことがありました。
なかなかうまくいかなかったものが「like」演算子を使用することでうまくいったということがあったため、「like」演算子による文字列の比較方法について備忘録として書き残しておきたいと思います。
目次
1.likeの使用方法
「like」演算子は、文字列の比較を行う時に使用する演算子で、一致していれば「True」、不一致なら「False」を返します。
使い方はたとえば以下のようになります。
result = string Like pattern
上記の場合、stringが比較元の文字列、patternが比較対象文字列で、一致していればresultに「True」が、不一致なら「False」が入ります。
stringまたはpatternの文字列のどちらかが「Null」の時は結果のresultもNullとなります。
patternにはワイルドカードなども使え、パターンマッチング規則に沿った文字列を入れます。
ワイルドカードなどで入れられるものには以下のようなものがあります。
文字 | 説明 |
---|---|
? | 任意の1文字 |
* | 任意の数の文字 |
# | 0~9の半角数字 |
[charlist] | charlistに指定した全角または半角の1文字 |
[!charlist] | charlistに指定した全角または半角の1文字 |
また、"[]"と"-"を使って[A-Z]と記載すると、AからZまでのいずれかの一文字と一致していれば「True」、[1-9]と記載すると、1から9までのいずれかの一文字と一致していれば「True」となります。
たとえば、以下のように記載すると、
If string Like pattern Then 処理 End If
「string」が「pattern」と一致している時に「処理」に記載の処理を実行します。
2.使用例
実際に適用して価値があったのは、以下のようなものでした。
はじめに以下のように記載して同じフォルダ内の「.xls」ファイルを抜き出そうとしたところ、「.xls」ファイルだけではなくて、「.xlsx」ファイルや「.xlsm」ファイルも抜き出されてしまいました。
Dim buf As String, cnt As Long Path = ActiveWorkbook.Path + "\" cnt = 10 buf = Dir(Path & "*.xls") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop
これを、「like」演算子を使って以下のようにしたところ、「.xls」ファイルだけ抜き出されるようになりました。
Dim buf As String, cnt As Long Path = ActiveWorkbook.Path + "\" cnt = 1 buf = Dir(Path & "*.xls") Do While buf <> ""
If LCase(buf) Like "*.xls" Then
Cells(cnt, 1) = buf buf = Dir()
cnt = cnt + 1
Loop
はじめの例では、文「.xls」が含まれるものということで、「.xls」以外に「.xlsx」や「.xlsm」も含まれてしまいますが、2つ目の例にあるように、
If LCase(buf) Like "*.xls" Then
を加えることで、「.xls」だけが抜き出されます。
ちなみに、LCaseは大文字があれば小文字に変更するというものです。
これにより、はじめにやりたかった「.xls」ファイルだけを抜き出すということができました。
以上が、文字列比較演算子「like」の使用方法になります。