人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelで、アドインやVBAをまったく使わずに数式のみで、正規表現検索を行うことは可能でしょうか?

とまでは行かなくとも出来るだけ汎用性のある処理方法を知りたいのですが、例えば

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

などを取り出したい場合、どんな方法があるのでしょうか。

●質問者: kamiochiai
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:A1 A3 A8 AD URL
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● lego05
●10ポイント

この本で説明されてることとは違いますか?

http://photogear.net/modules/amazon/detail.php/books/asin=475031...

ソフト

http://www.vector.co.jp/vpack/filearea/win95/prog/vb/by_date_006...

◎質問者からの返答

ありがとうございます。

前者は非常に近い内容と思われますが、今探しているものは単に方法だけです。

後者のソフトウェアに依存する方法は、質問のとおり対象外です。


2 ● llusall
●20ポイント

SEARCH 関数、FIND 関数 を使用してみてはいかがでしょうか?

ワイルドカードの使用可否や、大文字小文字の区別可否等、一長一短があるようですが、

適宜上手く組み合わせて使用すれば良いかと思います。

http://www.yahoo.co.jp ダミー

以下、オンラインヘルプより抜粋

--------------------------------------------------------------------------------------

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 の組み合わせで

なんとか作れそうです。

例外処理が大変そうです。


3 ● きさら
●20ポイント

http://ponytail.jpn.org/lightnovel/

URLはダミーです。

対象となる文字列の構造が分かっているのであれば、

切り出したい文字列の開始位置と終了位置を

findかsearchで探して、midで切り出せます。

かなり面倒だと思います。

◎質問者からの返答

ありがとうございます。

URLだと構造が可変になりがちで、確かに面倒そうですね。

今試しに使ってみたら、MIDって開始位置と文字数の指定なんですね。(終了位置を指定するのかと思っていた)

でもこれはLENの組み合わせで出来そうです。


4 ● villain
●50ポイント ベストアンサー

こんな感じはどうでしょうか。


=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&"&" という文字列にしてしまえば&がなくてもエラー出なくなりました。

この技いろんな場面で応用できそうです。


5 ● villain
●20ポイント

まだいくつか問題点がありました。


例えば


他にもあるかも?


つまらない補足ですが、すみません。


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),"")

充分使えそうな式になりました!

皆さんありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ