人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルのVBAの正規表現に関する質問です。
文字列 "123_abcd_fileName123.csv" を ^(.+)_(.+)_(.+)(\d+)\.csv$
のようにして、123,abcd,filename,123 をばらして取り出したいのですが、
できないのでしょうか?
通常の正規表現では当たり前にできるのでできないとは思っていないかったのですが。。。。


●質問者: kaiketsu
●カテゴリ:コンピュータ
✍キーワード:CSV VBA エクセル 文字列 正規表現
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kntr1
●35ポイント ベストアンサー

SubMatches コレクションを使って列挙できますよ。

Dim re As RegExp

Dim mc As MatchCollection

Dim m As Match

Dim i As Integer

Set re = New RegExp

'アルファベット(大文字)の後に

'アルファベット(小文字)が複数続く文字列を表す正規表現

'大文字と小文字を括弧でそれぞれグループ化する

re.Pattern = "([A-Z])([a-z]+)"

re.Global = True '複数マッチを有効にする

Set mc = re.Execute("Book Pen Apple Flower Sea Tree")

MsgBox "mc.Count = " & mc.Count 'mc.Count = 6

For i = 0 To mc.Count - 1

Set m = mc(i)

MsgBox "FirstIndex = " & m.FirstIndex & " Length = " _

& m.Length & " Value = " & m.Value & " SubMatches(0) = " _

& m.SubMatches(0) & " SubMatches(1) = " & m.SubMatches(1)

Next i

End Sub

http://codezine.jp/article/detail/1655?p=2

◎質問者からの返答

submatches というのがあるんですね。


2 ● HALSPECIAL
●35ポイント

SubMatches コレクションを使用します。



Option Explicit
Dim inpStr
inpStr = "123_abcd_fileName123.csv"

Dim oRe, oMatch, oMatches
Set oRe = New RegExp

'oRe.Pattern = "^(.+)_(.+)_(.+)(\d+)\.csv$"
oRe.Pattern = "^(.+)_(.+)_(\D+)(\d+)\.csv$"
Set oMatches = oRe.Execute(inpStr)

If oMatches.Count = 0 Then
MsgBox "not found"
Else
Set oMatch = oMatches(0)
MsgBox oMatch.SubMatches(0)
MsgBox oMatch.SubMatches(1)
MsgBox oMatch.SubMatches(2)
MsgBox oMatch.SubMatches(3)
End If


関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ