派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

正規表現を使う(②文字の種類が何かを調べる)

こんにちは。
派犬事務員のコロ子です。

正規表現を使う②

下記のようなフォルダ内に
サンプル番号-会社名のルールでファイルが存在する場合。

f:id:SNegishi:20190428174253p:plain

サンプル番号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桁
$:文字列の末尾
| :又は