2017-07-29 15 views
0

ユーザーのコメントを含むデータベースにフィールドがあります。文字列から一連の参照番号を抽出する

これらのコメントには、注文番号、配送参照番号、またはキャリア参照が含まれることがあります。注文の参照は、形式に従って

  • X ##########
  • 配達参考文献:TR ######
  • キャリア参考文献:FC#####

これらの参照はユーザーのコメントに他の情報で囲まれているため、固定パターンなしで散発的に表示されます。

例データ:私がやりたい何

を「項目が原因盗難に可能性も重複X1234567890を注文する失われた」ユーザーを検索し、その後、私のテーブルにこれらの参考文献のそれぞれに1つずつ3つの余分な列を作成していますこれらの参照を正当な列に抽出します。

これはAccess内で実行されますが、Excelでも必要です。

これを行うには誰でもVisual Basic関数を使用できますか?

助けてください!私は私の髪を引き出している!

+0

これは、150,000を超えるレコードを計算するために使用されます。 –

+0

データによっては、正規表現が役立つ場合があります。 –

+0

私はこれを正規表現で試してみるのにかなりの時間を費やしましたが、方法を見つけることはできません。私が得た閉鎖は、参照の開始位置を見つけるためにExcelの検索機能を使用していましたが、 ワイルドカードは、残念ながらそれを認識しない番号のみを認識します。そして、リファレンスの前にXがあれば、それはうまくいきません。 –

答えて

4

正規表現を使用することができます。

次の関数は、ペアのVBA.Collectionを返します。ペアの最初の項目には番号の種類(XまたはTRまたはFC)が含まれ、2番目の項目には番号が含まれます。

Public Function ParseComment(comment As String) As VBA.Collection 

    Set ParseComment = New VBA.Collection 

    Static RegExp As Object 
    If RegExp Is Nothing Then 
     Set RegExp = CreateObject("VBScript.RegExp") 
      RegExp.IgnoreCase = True 
      RegExp.Pattern = "\b(X|TR|FC)(\d+)\b" 
      RegExp.Global = True 
    End If 

    Dim match As Object 
    For Each match In RegExp.Execute(comment) 
     ParseComment.Add Array(match.SubMatches(0), match.SubMatches(1)) 
    Next match 

End Function 
関連する問題