正規表現を使う(②文字の種類が何かを調べる)
こんにちは。
派犬事務員のコロ子です。
正規表現を使う②
下記のようなフォルダ内に
サンプル番号-会社名のルールでファイルが存在する場合。
サンプル番号112233のファイルを検索して開きたい。
でもよく見ると
サンプル番号112233は枝番号がある!
これじゃサンプル番号で検索したら
4つヒットちしゃう。開きたいのは112233なのに、どうしよう・・・。
サンプル番号の後ろにどんな文字があるかを正規表現を使って調べてみればいいのかも。
サンプル番号-数字:枝番号あり
サンプル番号-文字:枝番号なし(対象のファイル)
(もしかしたら数字から始まる会社名もあるかもしれませんが、コロ子の会社では社名の和文は全角表記なので文字として扱います。)
サンプル番号6桁、ハイフン1桁、
なので8桁目が数字か文字かを判定すればOK。
Sub OpenFile() Dim SampleNo As String Dim FileName As String SampleNo = "112233" FileName = Dir("C:\パス名" & "\" & SampleNo & "*") Dim buf As String Dim Expression As Object '正規表現を使用する Set Expression = CreateObject("VBScript.RegExp") Expression.Pattern = "\D" 'パターンに数字以外の1文字をセット Do Until FileName = "" buf = Mid(FileName, 8, 1) '8文字目を取得 If Expression.test(buf) Then 'パターンにマッチした場合はTrueを返す Workbooks.Open "C:\パス名" & "\" & FileName Exit Do End If FileName = Dir() Loop Set Expression = Nothing End Sub
判定する文字が1文字だからいいけど、長いとちょっとややこしい・・・。
自分メモ
英字3桁の文字列-数字3桁(例:AAA-123)
または
英字3桁の文字列-数字3桁-数字1桁(AAA-123-1)
をマッチさせるパターンを作る場合
Expression.Pattern = "([A-Z]{3}-\d{3}$|[A-Z]{3}-\d{3}-\d$)"
[A-Z]{3}:英字3桁
-:ハイフン
\d{3}:数字3桁
$:文字列の末尾
| :又は