アプリ版:「スタンプのみでお礼する」機能のリリースについて

URLのような文字列で、複数の「/」(スラッシュ)が含まれる場合、一番右(最後)のスラッシュより右側の文字列のみを抽出したいときは、どのような関数を記述すれば良いか、を是非お教えください。

http://www.abc.com/aaa/index01.html
⇒「index01.html」のみを抽出したい
http://www.abc.com/aaa/bbb/index02.html
⇒「index02.html」のみを抽出したい
http://www.abc.com/aaa/bbb/ccc/index03.html
⇒「index03.html」のみを抽出したい

※もし、RIGHT関数を使う方法でない場合は、その旨ご教示いただけると助かります。

どうか宜しくお願いいたします。

A 回答 (4件)

No.3の方の答えに似てますが、Rightを使う前提で考えると



元の文字列のセルをA1とすると

=RIGHT(A1,LEN(A1)-SEARCH("(^-^)",SUBSTITUTE(A1,"/","(^-^)",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))),1))

やってることを順番に書くと

1)LEN(A1)-LEN(SUBSTITUTE(A1,"/","")
 区切りの文字 / を消し、元の文字列の文字数差を出す。※区切り文字個数が確定。
2)SUBSTITUTE(A1,"/","(^-^)",<区切り文字の個数>)
 元の文字列の最後の区切り文字を、通常文字列に出現しない文字列に置き換える。※例では顔文字(^-^)
3)LEN(A1)-SEARCH("(^-^)",<最後の区切り文字を(^-^)に置き換えた文字列>,1))
 (^-^)の出現位置を調べ、ここより前は不要なので、元の文字列の文字数との差を出す。※右から切り出す文字数が確定
4)RIGHT(A1,<右から切り出す文字数>)
 抽出完了。
    • good
    • 0
この回答へのお礼

質問で言及したRight関数を前提に考えていただき、また関数の中身を噛み砕いて説明いただき、本当に助かります。結果もバッチリでした!
悲しいかな、現在は結果だけで喜んでいますが、ご説明いただいた内容を必ずやものにして、今後他にも応用できるようにしたいものです。有難うございました!

お礼日時:2013/08/06 15:41

>一番右(最後)のスラッシュより右側



その通りに計算すると
=IF(ISNUMBER(FIND("/",A1)),MID(A1,FIND("\\\",SUBSTITUTE(A1,"/","\\\",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,99),"")
とか

=MID(A1,MAX(IF(MID(A1,ROW($A$1:$A$999),1)="/",ROW($A$1:$A$999)))+1,99)
と記入して、こちらは必ずコントロールキーとシフトキーを押しながらEnterで入力するとか。
    • good
    • 0
この回答へのお礼

まさにやりたかったことを端的に示していただき有難うございました!
正直なところ、複合している関数の一つ一つをまだ理解し切れておらず、結果だけ見て喜んでいるところもありますが、噛み砕いて応用する機会を、今後増やしたいと思います。
配列数式についても同様ですね。
(まだまだだなぁ・・・)

お礼日時:2013/08/06 15:38

例があまりよろしくないような気もしてしまうのですが。



> ⇒「index01.html」のみを抽出したい
> ⇒「index02.html」のみを抽出したい
> ⇒「index03.html」のみを抽出したい

抽出したい文字数が全て同じ(11文字)ですから、
素直に(元のURLがA1セルにあるとしたら
  =RIGHT(A1,11)
で事足りますね。



まぁ、これだけでは面白くないので、
この「文字数」が不定であるとして、考え方の一例を。

添付図の通りです。
元の「URL」が、A1:A3にあるとして、まずはその範囲を選択しておきます。
リボンの「データ」タブ⇒「区切り位置」をクリック。
※2003以前なら「データ」メニュー⇒「区切り位置」をクリック。
 質問の際は使っている「ヴァージョン」を書いておくと良いですよ。
ウィザードが走りますので、
  ・1/3・・カンマやタブなどの~~ を選択して次へ
  ・2/3・・「その他」にチェック、隣のインプットボックスに「/」を入力、次へ
  ・3/3・・上書きしていいならそのまま完了。
   図のように他のセルに置きたいなら、表示先を指定(A6)し完了。
A11セルに以下の式
  =OFFSET(A6,0,COUNTA(6:6))
を入力して、必要分コピー貼り付けして完成。

機能の詳細・関数については別途お調べくださいませ。



ちなみに、この作業が「今後もちょこちょこ発生する作業」であるなら、
VBAを扱えるようになってユーザー定義関数でも作っておけば早いですよ。
一回作ればあとは式一発でできますから。
「エクセルのRIGHT関数の応用方法?につ」の回答画像2
    • good
    • 0
この回答へのお礼

コメント有難うございます。
まさにご指摘いただいた通り、例が悪かったです。文字数が不定のことを想定した回答をいただきたかったので、例示いただいた解決方法とても助かりました。
OFFSET関数はこれまで活用したことがなかったですが、これから活用の度合いが増えそうです。

お礼日時:2013/08/06 15:25

"/index"の文字列が、左から何番目にあるかを検索…



これで良いかな?
    • good
    • 0
この回答へのお礼

最初にご回答いただき有難うございます。コメントいただいた通りです。
(最後のスラッシュ以降の文字数が一定数でなく、各セルごとに文字数をカウントし抽出したいと思っていましたが、別の方からご指摘いただいたように、質問での書き方が不十分でした・・・)

お礼日時:2013/08/06 15:23

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