- 締切済み
エクセル上のデーターをweb検索し、結果を抽出
エクセル上(例えばA2,A3,A4・・・の列)に、文字(以下「配列」)が書いてあります。 この配列をwebで検索(http://tw.expasy.org/tools/pi_tool.html )し、表示される結果の一部の値をエクセル上に抜き出したいのですが、どうすればよいでしょうか? 具体的な例を挙げますと、 エクセル上のA2に配列:ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY があるとして、これを http://tw.expasy.org/tools/pi_tool.html のページの白枠部分にペーストし Click here to compute pI/Mw をクリックした後に出てくる Theoretical pI/Mw: の後の数字、(例では6.94と4773.46)をエクセルファイルのB2とB3にそれぞれ抽出したいのです。 そして、これを連続して(Aの列にデーターがある限り)行いたいのです。 エクセルはそれなりに使っているのですが、マクロとなるとさっぱり分からず困っております。 お助け願えませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- lark_0925
- ベストアンサー率63% (37/58)
>セルA1に配列を示していますが、同様の配列がA2,A3,A4,,,,と多数あると >して、A2を検索し、B2,C2 (現状ではB3)に書き込み、終わったら、連続的 >にA3を検索し、B3, C3に、、、という感じで、沢山の配列を一度に解析し >たいのです。 前回のコードから↑この変更が出来ないのなら、このコードを使うと 大変ですよ(Webサイト側にちょっとした変更があっても 提示したVBAコードは作動しませんから・・・)。 '============================================================== Option Explicit Sub main() Dim crng As Range Dim rng As Range Call mk_smaple_data 'ここでサンプルデータを作成しています ' 実際のデータで試す場合は、↑を削除すること MsgBox "ok" Set rng = Range("a2", Cells(Rows.Count, "a").End(xlUp)) If rng.Row > 1 Then For Each crng In rng With crng .Range("b1:c1").Value = get_pI_Mw(.Value) End With Next End If End Sub '============================================================== Function get_pI_Mw(mystr As Variant) As Variant Dim ie As Object Dim idoc As Object Dim wk As Variant Const url_str As String = "http://tw.expasy.org/tools/pi_tool.html" Const d_str _ As String = "ExPASy Home pageSite MapSearch ExPASyContact usSwiss-ProtProteomics tools" Set ie = CreateObject("InternetExplorer.Application") With ie .Visible = True .navigate url_str Do While .Busy = True Or .readyState <> 4 Loop End With Set idoc = ie.document On Error Resume Next idoc.all.Item("protein").Value = mystr idoc.all.Item(79).Click With ie Do While .Busy = True Or .readyState <> 4 Loop End With Set idoc = ie.document wk = Replace(Mid(idoc.body.innerText, _ InStr(idoc.body.innerText, idoc.all(56).innerText) + _ Len(idoc.all(56).innerText) + Len(" Theoretical pI/Mw: ") - 1), _ d_str, "") wk = Split(wk, " / ") get_pI_Mw = Array(Val(wk(0)), Val(wk(1))) ie.Quit Set idoc = Nothing Set ie = Nothing End Function '============================================================== Sub mk_smaple_data() Dim g0 As Long Cells.Clear For g0 = &H41 To &H49 Cells(g0 - &H3F, 1).Value = String(5, Chr(g0)) Next Range("a1").EntireColumn.AutoFit End Sub
- lark_0925
- ベストアンサー率63% (37/58)
こういうコードは、メンテナンスが大変ですよ!! 私は、お遊びでしかやりませんが・・・。 新規ブックの標準モジュールに '============================================================ Sub main() Range("a2,b2:b3").Value = "" With Range("a2") .Value = "ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY" .EntireColumn.AutoFit End With Range("b2:b3").Value = Application.Transpose(get_pI_Mw(Range("a2").Value)) End Sub '============================================================== Function get_pI_Mw(mystr As Variant) As Variant Dim ie As Object Dim idoc As Object Dim wk As Variant Const url_str As String = "http://tw.expasy.org/tools/pi_tool.html" Const d_str _ As String = "ExPASy Home pageSite MapSearch ExPASyContact usSwiss-ProtProteomics tools" Set ie = CreateObject("InternetExplorer.Application") With ie .Visible = True .navigate url_str Do While .Busy = True Or .readyState <> 4 Loop End With Set idoc = ie.document On Error Resume Next idoc.all.Item("protein").Value = mystr idoc.all.Item(79).Click With ie Do While .Busy = True Or .readyState <> 4 Loop End With Set idoc = ie.document wk = Replace(Mid(idoc.body.innerText, _ InStr(idoc.body.innerText, idoc.all(56).innerText) + _ Len(idoc.all(56).innerText) + Len(" Theoretical pI/Mw: ") - 1), _ d_str, "") wk = Split(wk, " / ") get_pI_Mw = Array(Val(wk(0)), Val(wk(1))) ie.Quit Set idoc = Nothing Set ie = Nothing End Function でmainを実行してみてください。 対象サイトにて、 セルA1に設定された文字列 ACDEFGHIKLMNPQRSTVWYACDEFGHIKLMNPQRSTVWY を入力した結果表示される数値をセルB2、B3に書き込みます。 Win2000 Excel2002 IE6.0で試した限りは正常に作動しています。
お礼
お返事が遅れまして、申し訳ありません。 無事に動きました。 ありがとうございます。 ただ、私の質問が悪い点があり、本当にやりたいことと少しだけ違っています。 セルA1に配列を示していますが、同様の配列がA2,A3,A4,,,,と多数あるとして、A2を検索し、B2,C2 (現状ではB3)に書き込み、終わったら、連続的にA3を検索し、B3, C3に、、、という感じで、沢山の配列を一度に解析したいのです。 どの辺を変えていけば思った通りになるのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
通りすぎる方が無難ですが、不快覚悟で言います。質問の状況が良く判りません。 >文字(以下「配列」)が書いてあります 文字列とは言いますが。シートのセルに配列を書くとは、何のことか判りません。配列は専門用語で、データ構造の一種ですが、文字列値に構造を持ち込んでいるのですか。信じられない。 >この配列をwebで検索( とはどういうことですか。文字列でWEBのあるサイトの検索機能を借りて照会し・・の意味と想像しますが。 ご紹介のWEBにA2のデータを張り付け、検索(どういう検索かはブラックボックスとして)に当たるボタンをクリックして、出てきた(返ってきた)WEBページ上の結果(またはその一部)を、B列にでもセットしたい、しかもシートの列の各行のデータについて行いたいということですか。 また、まだまだ海外のWEBを読みこなすというのも大変と思います。その辺考慮して読者に読む負担を少なくして、質問しては。 ーー 多分 エクセルVBA->ブラウザであるWEBページの所定の枠にデータセットー>そのWEBページの検索ボタンを押し下げをプログラムでシミュレートーー>結果を採るーー>エクセルシートの検索語と対応するセルに値をセット 初めと終わりはVBAで簡単ですが、間の部分は他のソフト(ブラウザ)との連携になり、そちらはVBAというものはありません、VBAを一通り出来るレベルでも、VBAの本などには書いてないものです。 ただし、プログラムでWEBを利用面で(検索などで)操ることは、株価照会などで、株の取引などに取り組んでいる例(もちろんプログラムコード例)があります。それらをWEBで探してはどうですか。 もし良い回答が今後出ないなら、私の上記に書いたことも取り入れて(参考)に、質問を書き直し、再質問してはどうですか。 ーー >マクロとなるとさっぱり分からず困っております。 お助け願えませんでしょうか? のレベルでは、エクセルVBAも相当勉強する必要もアリ、WEB関係は公開されている体系的解説がほとんど無いと思いますから苦労すると思います。
お礼
厳しいご指摘ありがとうございます。 配列は、意味があるのです。 私の分野で恐縮なのですが、ACDEFGHIKLMNP・・・というのは1文字がアミノ酸を示しており、それが連なったものをアミノ酸配列といいます。 タンパク質の構成要素というモノです。 IT関係の方にどう伝えようか悩んでいたのですが、自分がわからなくなると意味がないので、上記のような記述方法になりました。 質問した内容につきましては、私のレベルでは苦労レベルというのもはっきり分かっているつもりです。 通りすがりでも、言いにくいことをズバリ言って頂いて、良かったかなぁとおもいます。
お礼
無事、解決できました。 ありがとうございます! コードが変わった際には、自分で修正できるくらいまで、成長出来ればと思っています(まだ未知ですが・・・)。 注意しておきべきコードがどの当たりか、お教え願えれば幸いです。