- ベストアンサー
セル内の数字も混じった文字列から特定パターンの数字列を取り出す
またまたお世話になります。 (1)セル内に1つまたは2つのハイフンでつながる数字列を含む文字列(ブランクも含みます)がある場合にそこからその数字列のみを取り出す方法をアドバイス願います。 例 cを文字、xを数字(最大7桁)とします。 セル内の文字列 cccccc cccc cccc xxxxxxx-xx-x ccccccc cccc cccc からxxxxxxx-xx-x を取り出して文字列として別のセルに置く方法です。 (2) もしこのxxxxxxx-xx-x が[ と ] で囲まれていた場合はもう少し容易になりますか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「最高7桁」というのは、条件が曖昧ですね。 じゃぁ最低は ? となりますよね。 まぁいいけど・・・ 一応、 *-**-* のバターンにマッチするものを複数カンマで区切って返します。 そんなに長い文字をセルに入れてどうするのぉ~ 大きなお世話か? Function GetNumber(s As String) As String Dim n As Integer Dim StrOut As String Dim StrBlk As String Dim Chk As Boolean Dim Cnt As Integer Do StrBlk = "" Chk = False For n = 1 To Len(s) If InStr("1234567890-", Mid(s, n, 1)) > 0 Then Chk = True StrBlk = StrBlk & Mid(s, n, 1) Else If Chk = True Then Exit For End If Next n If Len(StrBlk) > 5 And Left(Right(StrBlk, 2), 1) = "-" And _ Left(Right(StrBlk, 5), 1) = "-" Then Cnt = Cnt + 1 If Cnt = 1 Then StrOut = StrBlk Else StrOut = StrOut & "," & StrBlk End If End If s = Mid(s, n) Loop While Len(s) > 5 GetNumber = StrOut End Function
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
問題の意味を良く捉えられていないのですが B1セルに=IF(ISERROR(FIND("fgh",A1)),"",A1)のような関数式ではダメでしょうか。 A1セルにfghを含むasdfghなどが、入っていれば B1にその文字列を入れる。
お礼
imogashiさんありがとうございます。 ハイフンの前後の数字は任意でまたその長さも可変なのでご提示の方式が仕えるかどうか不明です。 またお願いします。
- ja7awu
- ベストアンサー率62% (292/464)
まぁ、位置も桁数も不定なら、ユーザー定義関数を使うことでしょうね。 それで良かったら、次のように操作してみてください。簡単で~す。 ・ Alt + F11 でメニューから[挿入]-->[挿入]-->[標準モジュール]で開いた コードウィンドウに下記コードをコピーして貼り付けます。 ・ Alt + Q でコードウィンドウを閉じ、シートに戻り、 例えば、セルA1にその文字列が入っているとして、セルB1などに =GetNumber(A1) と入力します。 これで希望どおり表示されると思います。 ※ 数字および "-" は、半角とします。 Function GetNumber(s As String) As String Dim n As Integer Dim StrOut As String Dim chk As Boolean For n = 1 To Len(s) If InStr("1234567890-", Mid(s, n, 1)) > 0 Then chk = True StrOut = StrOut & Mid(s, n, 1) Else If chk = True Then Exit For End If Next n GetNumber = StrOut End Function
補足
ja7awuさん、ありがとうございます。 部分的に大成功です。 但し数字とハイフンが入っていればすべて持ってきてしまいます。 xxxxxxx-xx-x の形があるときのみを取り出したいときにはどうすればよろしいでしょうか? 又、この組み合わせが1セル内に複数あるときもその複数をカンマで区切って出してくれれば最高なんですが. もしよろしければお願いします。
- kamiero
- ベストアンサー率31% (88/282)
(1) Xの開始位置が一定なら、(Cの長さが一定なら)データ→データの区切り位置 でデータを切ってしまうのが早いです。 Cの長さが不規則でも、Xはハイフンでつながっているので、データ→区切り位置 で、スペースで切ってしまえば、X以降だけが別のセルにすることはできます。 (2) はい。特定の文字で囲われているのなら、それをもとに、データ→データの区切り位置→ で、記号できってあげればよろしいかと。 参考まで。
お礼
kamieroさんありがとうございます。 データの区切り位置の挿入は一行ごとにやらねばならないように思いますので、多数行を一度にやるには不向きかと思われます。説明が不足して申し訳ありません.次回又おねがいします。
お礼
Ja7awuさん、再度ありがとうございます。うまくいったようです。 Module1とModule2ができるとModule1を消さないとModule1が先に実行されてしまうようです。 Module1と2をKeepしておいてそれぞれ別個に作動させることはできるんですよね。私はユーザー定義関数を勉強しておく必要がありそうですね。