重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

不規則な文章(1行)から以下のハイフン付き数値を抜き出す関数を教えて下さい
ご存じの方、アドバイスor関数を教えて下さい

●●-●●●●-●●●●-● 形式の数値を抜き出したいです


あいうえお10-1234-2508-1あい ⇒ 10-1234-2508-1

あいう90-1234-2508-2あいうえお⇒ 10-1234-2508-2

A 回答 (5件)

>本コードは主にどんなステートメントを使っているのでしょうか?


>いつも見るコードからは想像が出来ないです


正規表現を使用しています。

詳細は「VBA 正規表現」 で検索してください。

https://www.sejuku.net/blog/33541

https://codezine.jp/article/detail/1655

https://qiita.com/kisa/items/74085046abc6c0ac2607

正規表現は言語毎に多少の違いがありますが、
基本的な考え方は一緒なので、正規表現を覚えておいてください。


提示したスクリプトを解説すると
Public Function Get_Number(ByVal tel_str As String) As String
Dim reg As Object
Dim matches As Variant
Get_Number = ""・・・①
Set reg = CreateObject("VBScript.RegExp")・・・②
reg.Pattern = "(^|\D+)(\d{2}-\d{4}-\d{4}-\d)(\D+|$)"・・・③
Set matches = reg.Execute(tel_str)・・・④
If matches.count = 0 Then Exit Function・・・⑤
Get_Number = matches(0).submatches(1)・・・⑥
End Function


①戻り値を空白("")に設定
②正規表現用オブジェクトの作成
③正規表現のマッチパターンを設定(ここがポイントです)
④マッチの実行を行い、結果をmatchesに格納
⑤マッチしないなら終了
⑥マッチした部分の
●●-●●●●-●●●●-●
の部分を取り出し、戻り値に設定する
    • good
    • 1
この回答へのお礼

丁寧な解説ありがとうございます
大変、難しい論点だと思いましたが

難しいとやる気もでますね
ご指南、きっかけありがとうございます

お礼日時:2025/04/08 23:48

ユーザー定義関数になります。


以下のマクロを標準モジュールに登録してください。
この関数に文字列を渡すと、ハイフン付き数字が返ってきます。
添付図は、この関数の使用例です。
A列に文字列があるとき、B列にハイフン付き数字を抜き出す例です。
B1へ
=Get_Number(A1)
と入力し、オートフィルで下の行へコピーします。
該当数字がない場合は、空白("")が返ります。


Public Function Get_Number(ByVal tel_str As String) As String
Dim reg As Object
Dim matches As Variant
Get_Number = ""
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "(^|\D+)(\d{2}-\d{4}-\d{4}-\d)(\D+|$)"
Set matches = reg.Execute(tel_str)
If matches.count = 0 Then Exit Function
Get_Number = matches(0).submatches(1)
End Function
「【関数】不規則な文章から●●-●●●●-」の回答画像4
    • good
    • 0
この回答へのお礼

お返事ありがとうございます
うまく、出来ました。大変、感動しています

本コードは主にどんなステートメントを使っているのでしょうか?
いつも見るコードからは想像が出来ないです

勉強のヒントになるステートメントやメソッドがあれば
教えて下さい

宜しくお願いします

お礼日時:2025/04/07 23:53

どのようなパターンで数値を抜き出すのかという事が不明です。



>●●-●●●●-●●●●-● 形式の数値を抜き出したいです

という条件なら

あいう90-1234-2508-2あいうえお

の場合は

⇒ 90-1234-2508-2

になると思うのですが、何故

⇒ 10-1234-2508-2

になるのでしょうか?
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
すいません、こにらの間違いです

仰るとおり
90-1234-2508-2
です

お礼日時:2025/04/07 21:02

関数REGEXEXTRACTを使用します。

下記ページの「例1: 電話番号の抽出」が参考になります。
https://sakata-engineer.com/2024/05/22/excel-%E3 …
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
ためしてみます

お礼日時:2025/04/07 19:08

文字列が


あいう7890-1234-2508-2345あいうえお
の場合でも、
10-1234-2508-2
を抜き出せばよいですか。
それとも、この場合は、該当しないのでしょうか?
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
この場合は、該当いたしません
また、10-1234-1234-1の形式しか含まれていません
アドバイスありましたら、宜しくお願い致します!

お礼日時:2025/04/07 19:07

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A