とまでは行かなくとも出来るだけ汎用性のある処理方法を知りたいのですが、例えば
http://www.google.co.jp/search?num=100&hl=ja&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&lr=
上記 URL のような文字列から
num=100
や
q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
などを取り出したい場合、どんな方法があるのでしょうか。
こんな感じはどうでしょうか。
=MID(対象セル,SEARCH(区切り文字,A1,1),SEARCH("&",RIGHT(対象セル,LEN(対象セル)-SEARCH(区切り文字,対象セル,1)+1),1)-1) 例 ・num=100 =MID(A1,SEARCH("num=",A1,1),SEARCH("&",RIGHT(A1,LEN(A1)-SEARCH("num=",A1,1)+1),1)-1) ・q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE =MID(A1,SEARCH("q=",A1,1),SEARCH("&",RIGHT(A1,LEN(A1)-SEARCH("q=",A1,1)+1),1)-1)
ただし、必ずクエリが複数ないと("&"で区切っているため)エラーに
なります。
完全なものは関数では無理だと思います。
http://www.google.co.jp/search?num=100&hl=ja&q=%E6%AD%A3%E8%A6%8...
この本で説明されてることとは違いますか?
http://photogear.net/modules/amazon/detail.php/books/asin=475031...
ソフト
http://www.vector.co.jp/vpack/filearea/win95/prog/vb/by_date_006...
ありがとうございます。
前者は非常に近い内容と思われますが、今探しているものは単に方法だけです。
後者のソフトウェアに依存する方法は、質問のとおり対象外です。
SEARCH 関数、FIND 関数 を使用してみてはいかがでしょうか?
ワイルドカードの使用可否や、大文字小文字の区別可否等、一長一短があるようですが、
適宜上手く組み合わせて使用すれば良いかと思います。
以下、オンラインヘルプより抜粋
--------------------------------------------------------------------------------------
SEARCH 関数
SEARCH 関数は、開始位置を先頭にして、指定された文字列 (検索文字列) をほかの文字列 (対象) の中で検索し、その文字列が最初に現れる位置の文字番号を返します。SEARCH 関数を使用すると、ある文字列に含まれる特定の文字列の位置を調べることができ、さらに MID 関数や REPLACE 関数と組み合わせて、その文字列を置き換えることができます。
書式
SEARCH(検索文字列,対象,開始位置)
SEARCHB(検索文字列,対象,開始位置)
SEARCH 関数および SEARCHB 関数では、文字列を検索するとき、英字の大文字と小文字は区別されません。
FIND 関数
FIND 関数では、指定された文字列 (検索文字列) を他の文字列 (対象) の中で検索し、その文字列が他の文字列内で最初に現れる位置を左端から数え、その番号を返します。SEARCH 関数と同じような働きをしますが、FIND 関数では英字の大文字と小文字を区別できる代わりに、ワイルドカード文字を使用することができません。
書式
FIND(検索文字列,対象,開始位置)
FINDB(検索文字列,対象,開始位置)
ありがとうございます。
なるほど、この場合 SEARCH("num=",A1,0) と SEARCH("&",A1,SEARCH("num=",A1,0))と MID, LEN の組み合わせで
なんとか作れそうです。
例外処理が大変そうです。
http://ponytail.jpn.org/lightnovel/
URLはダミーです。
対象となる文字列の構造が分かっているのであれば、
切り出したい文字列の開始位置と終了位置を
findかsearchで探して、midで切り出せます。
かなり面倒だと思います。
ありがとうございます。
URLだと構造が可変になりがちで、確かに面倒そうですね。
今試しに使ってみたら、MIDって開始位置と文字数の指定なんですね。(終了位置を指定するのかと思っていた)
でもこれはLENの組み合わせで出来そうです。
こんな感じはどうでしょうか。
=MID(対象セル,SEARCH(区切り文字,A1,1),SEARCH("&",RIGHT(対象セル,LEN(対象セル)-SEARCH(区切り文字,対象セル,1)+1),1)-1) 例 ・num=100 =MID(A1,SEARCH("num=",A1,1),SEARCH("&",RIGHT(A1,LEN(A1)-SEARCH("num=",A1,1)+1),1)-1) ・q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE =MID(A1,SEARCH("q=",A1,1),SEARCH("&",RIGHT(A1,LEN(A1)-SEARCH("q=",A1,1)+1),1)-1)
ただし、必ずクエリが複数ないと("&"で区切っているため)エラーに
なります。
完全なものは関数では無理だと思います。
http://www.google.co.jp/search?num=100&hl=ja&q=%E6%AD%A3%E8%A6%8...
ありがとうございます。
なるほど、対象クエリが末尾に来る場合の処理を別箇でIF文で誤魔化せば
ある程度まで汎用性を上げられそうです。
これ見て思いついたのが
"&num=100" または "?num=100" を検索するつもりで処理して、
最後に"&"をはずす、というのでも汎用性が上がりそうです。
素晴らしいです!ありがとうございます。
【追記】
この場合 A1&"&" という文字列にしてしまえば&がなくてもエラー出なくなりました。
この技いろんな場面で応用できそうです。
まだいくつか問題点がありました。
例えば
他にもあるかも?
つまらない補足ですが、すみません。
http://www.google.co.jp/search?num=100&hl=ja&q=%E6%AD%A3%E8%A6%8...
いえいえ、ありがとうございます!
今のところまとめると、こうなりました。
=IF(ISNUMBER(SEARCH(検索クエリ,A1&"&",1)),MID(A1&"&",SEARCH(検索クエリ,A1&"&",1),SEARCH("&",RIGHT(A1&"&",LEN(A1&"&")-SEARCH(検索クエリ,A1&"&",1)+1),1)-1),"")
充分使えそうな式になりました!
皆さんありがとうございました。
ありがとうございます。
なるほど、対象クエリが末尾に来る場合の処理を別箇でIF文で誤魔化せば
ある程度まで汎用性を上げられそうです。
これ見て思いついたのが
"&num=100" または "?num=100" を検索するつもりで処理して、
最後に"&"をはずす、というのでも汎用性が上がりそうです。
素晴らしいです!ありがとうございます。
【追記】
この場合 A1&"&" という文字列にしてしまえば&がなくてもエラー出なくなりました。
この技いろんな場面で応用できそうです。