エクセルのRIGHT関数の応用方法

このQ&Aのポイント
  • エクセルのRIGHT関数を使用して、URLのような文字列から指定した位置以降の文字列を抽出する方法について教えてください。
  • 特定の文字列内で最後に現れる「/」以降の文字列を取得したい場合、RIGHT関数を利用することができます。
  • RIGHT関数の引数には「セルの参照」と「取得する文字数」を指定します。セルの参照には抽出したい文字列が入っているセルを指定し、取得する文字数にはセルの参照の右から数えて何文字取得するかを指定します。
回答を見る
  • ベストアンサー

エクセルのRIGHT関数の応用方法?について

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関数を使う方法でない場合は、その旨ご教示いただけると助かります。 どうか宜しくお願いいたします。

  • bp45
  • お礼率41% (7/17)

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

  • ベストアンサー
回答No.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,<右から切り出す文字数>)  抽出完了。

bp45
質問者

お礼

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

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>一番右(最後)のスラッシュより右側 その通りに計算すると =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で入力するとか。

bp45
質問者

お礼

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

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

例があまりよろしくないような気もしてしまうのですが。 > ⇒「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を扱えるようになってユーザー定義関数でも作っておけば早いですよ。 一回作ればあとは式一発でできますから。

bp45
質問者

お礼

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

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

"/index"の文字列が、左から何番目にあるかを検索… これで良いかな?

bp45
質問者

お礼

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

関連するQ&A

  • Excelの関数に詳しい方、お願いします。

    わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.

  • Excelの関数を使用したデータ抽出

    Excelの関数を使用したデータ抽出 Excelの関数を使用して以下のようなデータ抽出をすることは可能でしょうか? Aに以下の基本データがあります。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA りんご 100 1/1 1/1 80 001 AAA りんご 120 1/3 1/3 80 002 BBB みかん 200 1/1 1/1 90 003 BBB みかん 210 1/5 1/5 90 004 BBB みかん 220 1/5 1/5 90 005 --------------- Bに型番のみのデータがあります。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA BBB BBB CCC AAA AAA AAA CCC BBB BBB BBB --------------- Aから抽出したデータをBに反映させたいです。 以下のような形です。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA りんご 100 1/1 1/1 80 001 BBB みかん 200 1/1 1/1 90 003 BBB みかん 210 1/5 1/5 90 004 CCC ぶどう AAA りんご 120 1/3 1/3 80 002 AAA りんご AAA りんご CCC ぶどう BBB みかん 220 1/5 1/5 90 005 BBB みかん BBB みかん --------------- 宜しくお願い致します。

  • EXCEL2010で同じ文字列のセルの数を数え・・

    EXCEL2010で一つのワークシート上に様々な文字列が散らばっているとします。 この中でたとえばAAAという文字列が何個あるかを抽出してAAA 1、またBBBという文字列が何個あるかを抽出してBBB 3というように表示させたいのですが、方法をご存じの方、よろしくお願いいたします。VBAを使わずに解決して下さると嬉しいです。 ちなみに、COUNTIFなどの関数は、あらかじめ探したい文字列が分かっている場合には使えますが、本件はそうではなく、ワークシート上にどんな文字列があるのか一目ではわからないくらいたくさんあります。 理想は、その文字列が入っている全てのセルを範囲選択しておいて、何か関数で抽出させ、 AAA 3 ABC 19 BBB 21 DCF 3 などといったリストが作成されることです。 よろしくお願いいたします。

  • 3つ目のスラッシュまでを取り出す方法

    例えばhttp://www.hoge.com/aaa/bbb.htmのような文字列データがあり、そこから3つめのスラッシュまでの http://www.hoge.com/のみを取り出したい場合どうしたらよいのでしょうか? 言語はPERLです。

    • ベストアンサー
    • Perl
  • エクセルの文字処理

    以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD    A   B   C   D  1|    AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は  ・セル内にスペースで区切られない文字列があった場合には、B列に入れる  ・それ以外はスペースで区切って、A列B列C列D列に入れる  ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。

  • エクセル 集計するには

    __________A___________B_____________C 1______A001/A002______AAA___________10 2________A001________BBB____________15 3________A001________CCC____________20 (※文字の間隔を保つためにアンダーバーを入れていますが 実際はありません) 上のような表があります。 A列にあるA001やA002は商品名で、セル内に一つの商品名が ある場合と複数の商品名がスラッシュで区切られて入っている 場合があります。 それぞれの条件がB列にあり、A001がAAAの時、値は10と言う 感じでこの表は出来ています。 この表を 商品ごとに下記のように集計しなしたいのです. 問題はA列の商品名がスラッシュで区切られているので 困っています。 ________A________B________C_______D 10____________AAA______BBB_______CCC 11___A001______10_______15 _______20 12___A002______10 B2:D3に入れる関数式が解る方いらっしゃいましたら 是非教えていただけませんか? よろしくお願いいたします。

  • strcmp関数などでの複数の文字列の比較

    以下の例はランダムなiの値で文字列にアクセスして その文字列がどの文字列であるかを判定しているプログラムです。 char *string[] = {   "aaa",   "bbb",   "ccc", } ; int i = rand() % 3; if ( strcmp( string[ i ], "aaa" ) == 0 ) {   printf("aaaです"); } if ( strcmp( string[ i ], "bbb" ) == 0 ) {   printf("bbbです"); } if ( strcmp( string[ i ], "ccc" ) == 0 ) {   printf("cccです"); } するとこのようにif文の羅列になってしまいます。 (strstr関数を使う場合などでも同じような感じです。) 複数の文字列を判定する場合などにもっと良い手法は無いでしょうか?

  • エクセル 関数

    エクセルの関数について教えて下さい。 例えば、 項目  内容  時間 AAA 123 5.0 BBB 456 2.0 CCC 789 5.0 AAA 123 8.0 CCC 789 1.5 とゆう表があったとして、ここから項目のAAAはTOTAL何時間かかった のかを関数で出したいんですが、どんな関数をつかえばいいですか? 1000行くらいをまとめなくてはいけなくて・・・ それぞれ、どのくらい時間がかかったか知りたいです。 申し訳ないですが、分かる方教えてください。 よろしくおねがいします。

  • Excel VBAでのテキスト出力について

    excel vbaでの文字列出力について エクセルからテキスト(メモ帳とか)に出力したいのですが 下記のように出力できなくて困っております。 どなたか教えてほしいです。 ●入力エクセル AAA BBB CCC DDD EEE セル(1,1)~(1,5)にそれぞれ文字列が入っている状況です。 これを下記のように出力したいのです。 ●テキスト出力 "AAA","BBB",CCC,"DDD",EEE CCCとEEEをダブルクォーテーションを付けないで出力したいのです。 出力の方法でwriteとprintがありますが writeで Write #1, Cells(1,1),Cells(1,2),Cells(1,3),Cells(1,4),Cells(1,5) やると、自動で全ての文字がダブルクォーテーションで囲まれて、カンマが自動でつき "AAA","BBB","CCC","DDD","EEE" のようになってしまします。CCCとEEEのダブルクォーテーションが不要です。 printで Print #1, CStr(Cells(1,1)), & "," CStr(Cells(1,2)), & "," Cells(1,3), & "," CStr(Cells(1,4)), & "," Cells(1,5) とすると "AAA", "BBB", CCC, "DDD", EEE となり、カンマの後ろに空白が何個か入った状態になります。 (ブラウザでは空白が分かりづらいですが、テキストですと入っております。) Trim関数でTrim(",")とか色々試しましたが上手くいきません。 どうしたら望み通りの出力ができるでしょうか。 ぜひ教えて頂きたいです。 よろしくお願いします。

  • エクセル / 重複する文字の行番号を抜き出す。

    お世話になります。 XP/2003 使用です。 エクセルで下記のようなケースの行番号を抜き出したいです。 できれば、関数のみがありがたいのですが、 マクロでもOKです。 ----------- 抽出したい行番号  重複する文字が入力された 「先頭の行」 と 「最後の行」 の行番号 ----------- 例 同じ列に、重複する単語が入力されています。 重複する単語は、必ず上下に並んでいますが、 1単語のみ場合もあります。 1  AAA 2  AAA 3  AAA 4  AAA 5  BBB 6  BBB 7  CCC 8  CCC 9  CCC 10 DDD 上記の場合の抽出した行番号 単語 → 先頭の行/最後の行 AAA → 1/4 BBB → 5/6 CCC → 7/9 DDD → 10/10 行番号は、B列、C列などに抽出できれば良いです。 何卒よろしくお願いします。

専門家に質問してみよう