Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


16397 / 76738 ←次へ | 前へ→

【65809】Re:()間の文字の抽出について
発言  ichinose  - 10/6/29(火) 5:25 -

引用なし
パスワード
   おはようございます。
>列Aに
>Aaa bbb (25A, 45A) ccc ddd, eee (261) fff (7, 44, 47).
>
>とある場合に()間の文字を
>列B 列C 列D 列E 列F 列G・・・
>25A 45A 261 7  44  47
>
>といったように抜き出したいと思っています。
正規表現を使ってみました。

標準モジュールに

'========================================================================
Sub test()
  Dim rng As Range
  Dim ele1 As Variant
  Dim result As Variant
  Dim crng As Range
  Dim pat As String
  Dim wk As Variant
  Dim g0 As Long
  Dim ele2 As Variant
  Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
  pat = "\([^(\(|\))]+\)"
  For Each crng In rng
    result = mymatches(crng.Value, pat)
    If TypeName(result) <> "Boolean" Then
     Dim distarray()
     g0 = 1
     For Each ele1 In result
       wk = Split(Mid(ele1, 2, Len(ele1) - 2), ",")
       For Each ele2 In wk
        ReDim Preserve distarray(1 To g0)
        distarray(g0) = ele2
        g0 = g0 + 1
       Next
     Next
     crng.Offset(0, 1).Resize(, UBound(distarray())).Value = distarray()
     Erase distarray()
    End If
  Next
  Set rng = Nothing
  Set crng = Nothing
End Sub
'=============================================================
Function mymatches(strng As Variant, pat As Variant) As Variant
  Dim regEx, Match, Matches
  Dim g0 As Long
  Dim ans() As Variant
  Set regEx = CreateObject("VBScript.RegExp")
  ' 正規表現を作成します。
  regEx.Pattern = pat
  regEx.IgnoreCase = True ' 大文字と小文字を区別しないように設定します。
  regEx.Global = True  ' 文字列全体を検索するように設定します。
  Set Matches = regEx.Execute(strng)  ' 検索を実行します。
  g0 = 1
  ReDim ans(1 To Matches.Count)
  For Each Match In Matches
   ans(g0) = Match.Value
   g0 = g0 + 1
  Next
  If Matches.Count > 0 Then
   mymatches = ans()
  Else
   mymatches = False
  End If
  Set regEx = Nothing
  Set Match = Nothing
  Set Matches = Nothing
  Erase ans()
End Function

アクティブシートのA列1行目から、

Aaa bbb (25A, 45A) ccc ddd, eee (261) fff (7, 44, 47).

このようなデータが入っているとすると、
上記testを実行してみてください。
0 hits

【65808】()間の文字の抽出について なのは 10/6/29(火) 4:11 質問
【65809】Re:()間の文字の抽出について ichinose 10/6/29(火) 5:25 発言
【65813】Re:()間の文字の抽出について なのは 10/6/29(火) 9:27 質問
【65846】Re:()間の文字の抽出について Hirofumi 10/6/30(水) 13:56 回答
【65878】Re:()間の文字の抽出について なのは 10/7/4(日) 23:51 お礼
【66380】Re:()間の文字の抽出について UO3 10/9/1(水) 22:05 発言
【66382】Re:()間の文字の抽出について なのは 10/9/2(木) 6:51 発言
【66383】Re:()間の文字の抽出について かみちゃん 10/9/2(木) 8:59 発言
【66384】Re:()間の文字の抽出について UO3 10/9/2(木) 9:19 発言
【66385】Re:()間の文字の抽出について かみちゃん 10/9/2(木) 9:30 発言
【66389】Re:()間の文字の抽出について UO3 10/9/2(木) 15:35 発言
【66390】Re:()間の文字の抽出について UO3 10/9/2(木) 16:46 回答
【66392】Re:()間の文字の抽出について UO3 10/9/2(木) 17:26 発言
【66391】Re:()間の文字の抽出について かみちゃん 10/9/2(木) 17:22 発言
【66393】Re:()間の文字の抽出について UO3 10/9/2(木) 18:22 回答

16397 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free