プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (6件)

ドットが最小で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)))),"")))
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

とりあえずうまくできました。

質問する時に書き忘れていたのですが、ドットの数は3個以上の場合もあります(まれですが)。
また、bbb.ccc という形もあります。
つまり、ドットが一つの場合です。 
この場合は、そのまますべてを取り出します。
つまり、bbb.ccc を取り出します。
アドバイスの方法でこれも問題なくうまく表示されました。

あとは、ドットの数が3個以上の場合なのですが、この場合はどのようにすればいいのか教えていただけませんか?

お礼日時:2010/11/08 19:59

#2です。

質問に落ち度のある分は多少目を瞑りますが、
はっきり言って、数式を理解しようとしない質問者に
回答するのは不満です。それでも、理解してくれるれることを願っての回答。
=IF(LEN(A1)-LEN(SUBSTITUTE(A1,".",""))<=2,A1,
RIGHT(A1,LEN(A1)-FIND("☆",SUBSTITUTE(A1,".","☆",
LEN(A1)-LEN(SUBSTITUTE(A1,".",""))-1))))

IF関数で条件分岐すればよいだけの話です。
回答でわからない部分を再質問するのは大歓迎です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/09 00:25

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.fffdd.fffdd.fff
ss.dd.f.ggh.j.kj.kj.k
ss.dfgss.dfgss.dfg
a.s.d.f.ggggh.hggggh.hggggh.h
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/08 21:09

 文字列中に含まれている「.」の個数が決まっておらず、右から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文字の組合せであれば、何でも構いません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/08 19:53

>右から2つ目のドットの前までを取り出す方法になります。


=RIGHT(A1,LEN(A1)-FIND("☆",SUBSTITUTE(A1,".","☆",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))-1)))
説明通りに数式を作ってみました。ただし、「☆」が文字列にないこと
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/08 19:51

セルA1 に、aaa.bbb.ccc が入力されていると仮定するならば、




=RIGHT(A1,LEN(A1)-FIND(".",A1))
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/08 19:50

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