• ベストアンサー

aaa.bbb.ccc という、「ドット」で区切られた文字列があった場

aaa.bbb.ccc という、「ドット」で区切られた文字列があった場合、この文字列からbbb.ccc だけを取り出す方法を知りたいと思っています。 別の言い方をしますと、右から2つ目のドットの前までを取り出す方法になります。 Excel 2007 でのやり方を教えてください。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

ドットが最小で1個、最大で3個までの文字でしたら次の式で求めることができます。 =IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=1,A1,IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=2,RIGHT(A1,LEN(A1)-FIND(".",A1)),IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=3,RIGHT(RIGHT(A1,LEN(A1)-FIND(".",A1)),LEN(RIGHT(A1,LEN(A1)-FIND(".",A1)))-FIND(".",RIGHT(A1,LEN(A1)-FIND(".",A1)))),"")))

arbert
質問者

お礼

ご回答いただきありがとうございます。 とりあえずうまくできました。 質問する時に書き忘れていたのですが、ドットの数は3個以上の場合もあります(まれですが)。 また、bbb.ccc という形もあります。 つまり、ドットが一つの場合です。  この場合は、そのまますべてを取り出します。 つまり、bbb.ccc を取り出します。 アドバイスの方法でこれも問題なくうまく表示されました。 あとは、ドットの数が3個以上の場合なのですが、この場合はどのようにすればいいのか教えていただけませんか?

その他の回答 (5)

回答No.6

#2です。質問に落ち度のある分は多少目を瞑りますが、 はっきり言って、数式を理解しようとしない質問者に 回答するのは不満です。それでも、理解してくれるれることを願っての回答。 =IF(LEN(A1)-LEN(SUBSTITUTE(A1,".",""))<=2,A1, RIGHT(A1,LEN(A1)-FIND("☆",SUBSTITUTE(A1,".","☆", LEN(A1)-LEN(SUBSTITUTE(A1,".",""))-1)))) IF関数で条件分岐すればよいだけの話です。 回答でわからない部分を再質問するのは大歓迎です。

arbert
質問者

お礼

ご回答いただきありがとうございます。 IF関数勉強しなおします。

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

FIND関数でやると式が長くなるのは目に見えているのでユ-ザー定義関数での例を示す。 標準モジュールにユーザー定義関数を作る。 ーー (1)Split関数を使う方法 Function saigo2(a) x = Split(a, ".") s = "" For i = UBound(x) - 1 To UBound(x) s = s & x(i) & "." Next i saigo2 = Left(s, Len(s) - 1) End Function セルに=saigo2(A1)などと入れて下方向に式を複写。 文字列が1つしかない(.が無い)場合はチェックをしてませんが。 ーーーー (2)InstrRev関数を使う方法 Function saigo2B(a) x = InStrRev(a, ".", Len(a)) MsgBox x x = InStrRev(a, ".", x - 1) MsgBox x saigo2B = Right(a, Len(a) - x) End Function セルに=saigo2B(A1)などと入れて下方向に式を複写。 ーー 例データと結果A列例データ  右2つは両方の関数の結果 aa.aa.sss.dd.fff dd.fff dd.fff ss.dd.f.ggh.j.k j.k j.k ss.dfg ss.dfg ss.dfg a.s.d.f.ggggh.h ggggh.h ggggh.h

arbert
質問者

お礼

ご回答いただきありがとうございます。 早速トライしてみます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 文字列中に含まれている「.」の個数が決まっておらず、右から2個目の「.」よりも、右側にある文字列を取り出せば宜しいのですか?  それでしたら、今仮に元の文字列のデータがA1セルに存在しているものとしますと、取り出した文字列を表示させるセルに、次の数式を入力して下さい。 =IF(ISERROR(SQRT(LEN(A1)-LEN(SUBSTITUTE(A1,".",))-2)),"",MID(A1,FIND("゛゜",SUBSTITUTE(A1,".","゛゜",LEN(A1)-LEN(SUBSTITUTE(A1,".",))-1))+1,LEN(A1)))  尚、元の文字列に必ず「.」が2個以上含まれている場合には、入力する数式を次の様にするだけでも充分です。 =MID(A1,FIND("゛゜",SUBSTITUTE(A1,".","゛゜",LEN(A1)-LEN(SUBSTITUTE(A1,".",))-1))+1,LEN(A1))  因みに、上記の数式中の "゛゜" の部分は、今回は濁点と半濁点としましたが、元の文字列中に存在し得ない2文字の組合せであれば、何でも構いません。

arbert
質問者

お礼

ご回答いただきありがとうございます。 質問する時に書き忘れていたのですが、bbb.ccc という形もあります。 つまり、ドットが一つの場合です。  この場合は、そのまますべてを取り出します。 つまり、bbb.ccc を取り出します。 アドバイスの方法だと、該当するセルが空白になってしまいました。

回答No.2

>右から2つ目のドットの前までを取り出す方法になります。 =RIGHT(A1,LEN(A1)-FIND("☆",SUBSTITUTE(A1,".","☆",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))-1))) 説明通りに数式を作ってみました。ただし、「☆」が文字列にないこと

arbert
質問者

お礼

ご回答いただきありがとうございます。 質問する時に書き忘れていたのですが、bbb.ccc という形もあります。 つまり、ドットが一つの場合です。  この場合は、そのまますべてを取り出します。 つまり、bbb.ccc を取り出します。 アドバイスの方法だと、この場合に「#VALUE」と表示されてしまいました。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

セルA1 に、aaa.bbb.ccc が入力されていると仮定するならば、 =RIGHT(A1,LEN(A1)-FIND(".",A1))

arbert
質問者

お礼

ご回答いただきありがとうございます。 早速試してみましたが、不完全ではありますができました。 質問する時に書き忘れていたのですが、bbb.ccc という形もあります。 つまり、ドットが一つの場合です。  この場合は、そのまますべてを取り出します。 つまり、bbb.ccc を取り出します。 アドバイスの方法だと、ccc だけが取り出されてしまいました。

関連するQ&A