14歳の自分に衝撃の事実を告げてください

標題、以下のような型があります。

これが、ある行に入っています。その行には、不規則に入っています。
ただし、型は1つしか必ずありません。

この場合、関数やマクロにて、10-1234-1234-1 だけを別のセルへ
抜き出す事はできますか?

ご存じの方、宜しくお願いします


例1 あいうえお 10-1234-1234-1
例2 かきくけこ「」10-1234-1234-1

●●-●●●●-●●●●-●
※●には、半角の数字が入ります
例 10-1234-1234-1

A 回答 (5件)

回答の数式のうち、入口となる部分は、文字列の中から1文字づづ抽出する


=MID(A1,ROW(INDIRECT("$1:$"&LEN(A1))),1)・・・①
の部分です。
上記数式で1文字づつ抽出して、その後で、数字かハイフンかどちらでもないかを判定し、判定結果を2と1と0とに変換してCONCAT関数で再度結合するという作業を行っています。

この結合する部分でスピル機能が必要になるのではないかと思った訳であって、この数式がスピル機能を体現しているものではありません。
従って、スピル機能で調べても回答の数式にたどりつきません。

回答の数式は、上記①の部分と
=CONCAT(配列)・・・②
および
=FIND(検索文字,~)・・・③
の組合せで出来ていますので、①②③について、お調べになってください。
    • good
    • 0

No.3です。



前回回答の数式中の「FIND("22122221222212",~)」の部分は、ご質問者が例示された「10-1234-1234-1」の数字を2に,‐を1に変換したものです。

従って、ご質問者のいう15桁の「●●-●●●●-●●●●●-●」という形であれば、「221222212222212」とすればよいので、前回回答の数式の「FIND("22122221222212",~)」の部分を「FIND("221222212222212",~)」として、数式末尾の「,14),"")」の部分を「,15),"")」に修正すればよいはずです。
    • good
    • 0
この回答へのお礼

出来ました。いつもご指導ありがとうございます。
本関数は初めて見ましたが

調べ方は スピル機能で良いでしょうか?
勉強したいと考えています

お礼日時:2024/02/16 08:33

A列に対象文字列があるとして、A1セルの数式を考えてみました。



=IFERROR(MID(A1,FIND("22122221222212",CONCAT(2-ISERROR(MID(A1,ROW(INDIRECT("$1:$"&LEN(A1))),1)*1)*2+(MID(A1,ROW(INDIRECT("$1:$"&LEN(A1))),1)="-"))),14),"")

でどうでしょう。
スピル機能の有効なバージョンでしか確認していないので、スピル機能のないバージョンだとエラーになるかもしれません。
    • good
    • 0
この回答へのお礼

動きました。ありがとうございます。
すいません、質問なのですが14⇒15ケタに変更
以下のようにするには、どこをいじれば良いでしょうか。

お手すきな時に、宜しくお願いします

●●-●●●●-●●●●●-●

お礼日時:2024/02/15 08:10

No1です。



>関数やマクロにて、~~
というご質問でしたので、マクロでの回答をしましたが、どうやらわからない方のようなので・・

A1セルに対象文字列があるとして
=IFERROR(MID(A1,FIND("11211112111121",TEXTJOIN("",0,INDEX((47<CODE(MID(A1,ROW(OFFSET(A$1,,,LEN(A1))),1)))*(CODE(MID(A1,ROW(OFFSET(A$1,,,LEN(A1))),1))<58)+(MID(A1,ROW(OFFSET(A$1,,,LEN(A1))),1)="-")*2,))),14),"")
とかでも可能と思います。

※ TEXTJOIN関数を使えるバージョンが前提です。
    • good
    • 0

こんばんは



関数でもできるでしょうけれど、面倒なので、ユーザ定義関数で正規表現を利用するのが簡単だと思います。

ごく簡単な一例としては、
 Function hoge(s As String) As String
  Dim re, m
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "\d{2}-\d{4}-\d{4}-\d"
  Set m = re.Execute(s)
  If m.Count Then hoge = m(0).Value Else hoge = ""
 End Function
みたいな感じでしょうか。

上記だと
 9910-1234-1234-1999
みたいなものからも、10-1234-1234-1 を抜き出しますので、それではまずい場合には、パターンを調整してください。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
こちらは、標準モジュールに入れるのでしょうか?

お礼日時:2024/02/14 08:02

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


おすすめ情報