• ベストアンサー

セル内の数字も混じった文字列から特定パターンの数字列を取り出す

またまたお世話になります。  (1)セル内に1つまたは2つのハイフンでつながる数字列を含む文字列(ブランクも含みます)がある場合にそこからその数字列のみを取り出す方法をアドバイス願います。  例 cを文字、xを数字(最大7桁)とします。 セル内の文字列 cccccc cccc cccc xxxxxxx-xx-x ccccccc cccc cccc からxxxxxxx-xx-x を取り出して文字列として別のセルに置く方法です。 (2) もしこのxxxxxxx-xx-x が[ と ] で囲まれていた場合はもう少し容易になりますか?  よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.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

filefish
質問者

お礼

Ja7awuさん、再度ありがとうございます。うまくいったようです。 Module1とModule2ができるとModule1を消さないとModule1が先に実行されてしまうようです。 Module1と2をKeepしておいてそれぞれ別個に作動させることはできるんですよね。私はユーザー定義関数を勉強しておく必要がありそうですね。 

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

問題の意味を良く捉えられていないのですが B1セルに=IF(ISERROR(FIND("fgh",A1)),"",A1)のような関数式ではダメでしょうか。 A1セルにfghを含むasdfghなどが、入っていれば B1にその文字列を入れる。

filefish
質問者

お礼

imogashiさんありがとうございます。 ハイフンの前後の数字は任意でまたその長さも可変なのでご提示の方式が仕えるかどうか不明です。 またお願いします。 

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

まぁ、位置も桁数も不定なら、ユーザー定義関数を使うことでしょうね。 それで良かったら、次のように操作してみてください。簡単で~す。 ・ 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  

filefish
質問者

補足

ja7awuさん、ありがとうございます。 部分的に大成功です。 但し数字とハイフンが入っていればすべて持ってきてしまいます。 xxxxxxx-xx-x の形があるときのみを取り出したいときにはどうすればよろしいでしょうか? 又、この組み合わせが1セル内に複数あるときもその複数をカンマで区切って出してくれれば最高なんですが. もしよろしければお願いします。  

  • kamiero
  • ベストアンサー率31% (88/282)
回答No.1

(1) Xの開始位置が一定なら、(Cの長さが一定なら)データ→データの区切り位置 でデータを切ってしまうのが早いです。 Cの長さが不規則でも、Xはハイフンでつながっているので、データ→区切り位置 で、スペースで切ってしまえば、X以降だけが別のセルにすることはできます。 (2) はい。特定の文字で囲われているのなら、それをもとに、データ→データの区切り位置→ で、記号できってあげればよろしいかと。 参考まで。

filefish
質問者

お礼

kamieroさんありがとうございます。  データの区切り位置の挿入は一行ごとにやらねばならないように思いますので、多数行を一度にやるには不向きかと思われます。説明が不足して申し訳ありません.次回又おねがいします。 

関連するQ&A

  • ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて

    ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて 例のようにA列の文字の中からカッコ内(4桁数字“ハイフン”7桁数字)を B列に表示するにはどうしたらよいでしょうか。 ちょっと面倒なのはカッコは複数ある場合があり(xxxx-xxxxxxx)の条件に 合ったものだけを隣のセルに表示したいのです。 カッコとカッコ内は半角でxは不特定な数字です。 (例) A1=あいうえお(abcde)かきくけこ(xxxx-xxxxxxx)さしすせそ B1=xxxx-xxxxxxx よろしくお願いいたします。

  • Excel セル内の文字列の数字の桁数を増す方法について

    エクセル2000にて、セル内に4桁、6桁、7桁、8桁の文字列の数字が、別々に入っているとき、文字列の数字が7桁の時のみ 0 を書き加えて、8桁にする方法を教えてください。 例)A1 4001 33000018 6200095 →06200095 6100092 →06100092 4176 200025 6100061

  • セルに入力されている数字列を 一文字ずつセルにふりわけたい

    たびたびよろしくお願いします。 ひとつのセルに6~7桁の数字が入力されてます。 (数字と数字の間にはスペースはありません) A 7桁の場合はこの数字を一文字ずつ  別のセルひとつひとつに  振り分けたいのですが 可能でしょうか? 例 「9654321」→   「9」「6」「5」「4」「3」「2」「1」 B 6桁の場合は頭にゼロを入力して   同様に別のセルひとつひとつに   振り分けたいのですが 可能でしょうか? 例 「654321」→   「0」「6」「5」「4」「3」「2」「1」  

  • エクセルでセルに入っている数字と数字を|でつなぎ一つのセルに

    横に並びあう複数のセルに文字列で5桁の数字が入っています。 これらを"|"をつかってつなげ、一つのセルに入れたいのですが、 いい方法はないでしょうか。 ▼最終形がこのようになり、一つのセルに入れたいのです。 20432|20433|20434 どうぞよろしくお願いいたします。

  • セルに最初からある文字列を表示させておいて、そのセルを選択したら、その文字列の後から3桁数字を入力できるようにしたい

    タイトルが長くてすみませんm(_ _)m エクセル(97)に関しての質問です。 例えば、セルの中に最初から「15-G」という文字列を 表示させておいて、(ダブルクリックして編集という 形じゃなくて)そのセルを選択しただけで、 その文字列の後から3桁の数字を入力できるように したいのですがいい方法はないでしょうか? 他にやってみた方法で、ユーザー定義(私が考えた定義→「"15-G"@」)でセルに3桁の数字(例えば567)を入力しますと、「15-G567」というように表示させる事が出来たのですが、何も入力されてない時は当たり前ですが空白のままです。 出来れば、最初から「セルの中の始めに15-Gという文字列を」表示させておきたいのですが…

  • Excelの数字の文字列入力で

    Excel2003です。 セルに   "651,652,653" のような3ケタ分の数字とカンマの文字列を入力しようとすると    651652653 という数値にみなされてしまいます。 入力するときに、文字列の先頭に ’ を付けると文字列に みなしてもらえるのですが、つい忘れてしまい面倒です。 セルに指定などで設定する方法は何かありますでしょうか。 よろしくお願いします。

  • エクセル:セル内の文字列の最後の「,]を消したい。

    エクセル:セル内の文字列の最後の「,]を消したい。 以下のように、数字(1桁または2桁)がカンマでわかれたデータがあります。 この文字列の中で、一番最後の「,」だけ消したいのですが、 何か良い方法はないでしょうか。 1,1,1,1, ⇒最後のカンマを消したい 1,2,3,4  ⇒カンマがないのでそのままでOK 1,1,2,3,4  1,2,3,   1,11,12,

  • エクセルでセルを文字列設定しているのに頭の0が取れる件

    EXCEL2003について質問です。 似た類の質問は結構みるのですが、根本的な原因がわからないので わかる方がいたらエクセルの仕組みを教えてください。 頭に0が入った記号を含む数字から任意の記号を一括で抜こうとしたときに、文字列設定なのに頭の0が抜けてしまう原因です。 例えば (1)新規のシートでまずは0120-111と入力します。 ハイフンを手動で消すと、数字として扱われて120111になります。 これはわかります。 (2)次に、初めにセルの書式を「文字列設定」にしてから同様のことをすると、0120111となって文字列に扱いになりました。 これもわかります。 (3)今度は(2)でハイフンを手動ではなく「置換」で取ると結果は120111と 0が取れているにも関わらずセルの書式は文字列のままです。 なぜ(3)で勝手に0が外れてしまうんでしょうか? 桁数もバラバラ、頭が0でない、記号がない場合もある数字のリストの中で一個一個手動ではなく範囲指定したセルを一括で変更する方法って ないんですかね?

  • Excel2000のセル内の文字列の数字の先の2桁を取り出す方法について

    年のいった初心者です。 以前の質問に対する回答有難うございます。また、教えてください。  エクセル2000です。セル内に数字の文字列で、4桁、6桁、8桁のものが有ります。4桁のものには"01"を、6桁のものには"60"を、表示し、8桁のものには数種類あり、8桁の場合は、各文字列で上位の2桁を表示したいのです。 =IF(LEN(A1)=4,"01",IF(LEN(A1)=6,"60",IF(LEN(A1)=8,?????? 4桁、6桁については以前に教えていただいた、関数等でいけたのですが、8桁のときが分かりません。困っています。お願いします。     A列    B列 1 7532 →→ 01 2 280573 →→ 60 3 34964821 →→ 34 4 06839775 →→ 06 5 67500023 →→ 67

  • 1つのセルの数字を複数のセルに1文字づつ表示したい

    こんばんは。 いつも勉強させていただいています。 下記について、ご教示いただければ幸いです。 K1セルには、最小で1桁から最大で9桁までの数値が入力されます。 それを A1からI1までに1つづつ表示させたいのです。 例1) K1 に 10105 と入力した場合 A1からD1まではブランク E1に1、F1に0、G1に1、H1に0、I1に5 例2) K1 に 101050235 と入力した場合 A1に1、B1に0、C1に1、D1に0、E1に5、F1に0、G1に2、H1に3、I1に5 なお、同じシートの他のセルには0を入力する場合があるため、「ゼロ値のセルにゼロを表示する」のチェックを外すことはできません。 私なりに考えたのは、K1セルの数値をL1に =TEXT(K1,"000000000")として文字にし、M1から右のセルに =MID($K$1,1,1) というように各桁を抜き出す方法だったのですが、10000 のように丸い数字をK1に入力すると 1 は表示できても 0 がブランクになってしまいます。 いい方法がありましたら、ぜひご教示下さい。 よろしくお願いいたします。

専門家に質問してみよう