プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
Accessによる文字列抽出において、型式による抽出方法を探しています。
クエリーまたは標準モジュールへのユーザー定義関数で処理を行いたいです。

文字列例)
埼玉県小川町1100番1
東京都武蔵野市200番

抽出結果①)
埼玉県小川町
東京都武蔵野市

抽出結果②)
1100番1
200番

Instr関数にて、数値型の開始位置を調べればMid関数で抽出できるかと考えているのですが、
型式による判定の方法がわからない状況です。
このほかにも良い案があれば教えていただきたいです。

よろしくお願いいたします。

質問者からの補足コメント

  • うれしい

    めぐみん_ さま
    回答ありがとうございます。教えていただいた内容で結果の通り取得できました。

    ただ、「住所」に文字と数値のどちらか一方しかないものがある場合、そのレコードで処理が止まってしまうようです。
    私の例文にはそのようなパタンを記載していなかったので恐縮なのですが、
    「住所」に ”埼玉県小川町”のみや”1100”しかない状態でも処理が実行されるように修正いただけないでしょうか。また、この状態の場合は、「抽出1」「抽出2」に何も格納されない結果を希望します。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/11/05 13:00

A 回答 (3件)

お礼・補足を見て。



当該項目の場合は『Null』を返すようにしてみました。
ご検証願います。

Function cyu(a As String, b As Integer) As Variant
Dim myReg As Object

Set myReg = CreateObject("VBScript.RegExp")
myReg.Pattern = "^(\D+)(\d.+)$"

If myReg.Test(a) Then
cyu = myReg.Execute(a)(0).SubMatches(b - 1)
Else
cyu = Null
End If

Set myReg = Nothing

End Function
    • good
    • 0
この回答へのお礼

めぐみん_さま
教えていただいたないようで処理できました!
とても助かりました。ありがとうございますm(__)m

お礼日時:2021/11/08 13:34

No.1です。



その結果です。
「Access 文字列抽出 型式による開始」の回答画像2
この回答への補足あり
    • good
    • 1
この回答へのお礼

めぐみん_さま
回答ありがとうございます。
こちらの例文の不手際で恐縮ですが「住所」に文字か数値のどちらかしか入力されていない場合は、そのレコードで処理がストップしてしまうようです。
「住所」に”埼玉県小川町”または”1100”しかないような場合は、「抽出1」「抽出2」に何も格納しない結果とし、処理が進むように修正していただけないでしょうか?

お礼日時:2021/11/05 13:05

正規表現なら。



抽出1:cyu([住所],1)
抽出2:cyu([住所],2)

Function cyu(a As String, b As Integer) As String
Dim myReg As Object

Set myReg = CreateObject("VBScript.RegExp")
myReg.Pattern = "^(\D+)(\d.+)$"

cyu = myReg.Execute(a)(0).SubMatches(b - 1)

Set myReg = Nothing

End Function
「Access 文字列抽出 型式による開始」の回答画像1
    • good
    • 2
この回答へのお礼

めぐみん_ さま
回答ありがとうございます。
教えていただいた内容で実行することができました。

お礼日時:2021/11/05 13:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!