プロが教えるわが家の防犯対策術!

メールの文章をエクセルに抽出して、その文章(1セル内)からID(数字12桁)のみを抽出したいです。
たとえば、
「太郎さんと次郎さんの家123は、①と②の間の住所番地は001122334455の場所にあります。」
→抽出結果 001122334455

Excelの関数、VBAなどありましたらご教授ください。

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

  • 特に30代の方に回答となっていますが、間違えです。すみません。

      補足日時:2020/12/01 12:08
  • メールから文章を抽出する部分は完了しているので、後半の文章内を検索して、12桁数値と合致した所だけ抜き出す部分の方法をご教授いただきたいです。

      補足日時:2020/12/01 12:11
  • メールから取り出しまではVBAでしています。
    文章内に12桁の数値は複数あるかもしれませんが、
    一番初めに出てくる12桁の数値を取り出せれば、良い感じです。
    12桁以上あることはありません。
    勉強不足もあり、メールから取り出すとこまではできたのですが、その文章から12桁数値を取り出す考え方がうまく思いつかないという所です。

      補足日時:2020/12/01 23:38

A 回答 (4件)

以下のようにしてください。


Get12Digitが文字を与えると、その中から12桁の数字を取り出す。
関数です。(該当の数字がないときは""を返します)
sampleはA列の文字を与え、取得結果をB列に設定しています。
C列は、Get12Digitをユーザー定義関数として使用した場合です。
C1へ
=Get12Digit(A1)
と記入すると、取得結果をC1へ設定します。
---------------------------------------------------
Public Sub sample()
Dim wrow As Long
For wrow = 1 To 10
Dim str As String
str = Get12Digit(Cells(wrow, 1).Value)
If str = "" Then
Cells(wrow, 2).Value = "12桁の数字なし"
Else
Cells(wrow, 2).Value = str
End If
Next
End Sub

Public Function Get12Digit(str As String) As String
Dim reg As Object
Dim mat As Variant
Dim mat0 As Variant
Get12Digit = ""
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "(\D|^)(\d{12})(\D|$)"
reg.Global = False
Set mat = reg.Execute(str)
If mat.Count <> 1 Then Exit Function
Set mat0 = mat(0)
Get12Digit = mat0.submatches(1)
End Function
「文章から12桁数値(完全一致)で取り出し」の回答画像4
    • good
    • 1
この回答へのお礼

ありがとうございます。勉強になります!

お礼日時:2020/12/04 23:15

No1です



>その文章から12桁数値を取り出す考え方がうまく思いつかないという所です。
だと思ったので、No1に参考を挙げておいたのですが、意味が伝わっていないのかな?

以下は、正規表現での抽出例です。

Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "\d{12}"

testString = "太郎さんと次郎さんの家123は、①と②の間の住所番地は001122334455の場所にあります。"

Set m = reg.Execute(testString)
If m.Count Then res = m(0).Value Else res = "該当なし"
MsgBox "抽出値: " & res
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2020/12/04 23:15

私が回答できる保証はありませんが、


1.1つのセル内に12桁数値が、2つ以上存在することはありますか。
その場合、その数分、取り出すのですか。最初の1つ良いのですか。
2.13桁以上の数値があった場合、その数値は取り出し対象外と判断して良いですか。
上記が判ると回答が付きやすくなるかと。
    • good
    • 1
この回答へのお礼

ありがとうございます!補足しました!

お礼日時:2020/12/04 23:16

こんにちは



>メールから文章を抽出する部分は完了しているので
多分、VBAでなさっているのではないかと推測しました。

であるなら、そのままVBAで抽出まで行ってしまうのが便利そうですね。
12桁以上連続していたらどうするのかなど、詳細が不明ですが、Like演算子や正規表現を用いるのが簡単かと思います。

◇ Like演算子
https://docs.microsoft.com/ja-jp/dotnet/visual-b …

◇ 正規表現
https://docs.microsoft.com/ja-jp/dotnet/standard …
    • good
    • 1
この回答へのお礼

なるほど、ありがとうございます!

お礼日時:2020/12/04 23:16

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