• 締切済み

エクセル上のデーターを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の列にデーターがある限り)行いたいのです。 エクセルはそれなりに使っているのですが、マクロとなるとさっぱり分からず困っております。 お助け願えませんでしょうか?

みんなの回答

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.3

>セル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

onehour
質問者

お礼

無事、解決できました。 ありがとうございます! コードが変わった際には、自分で修正できるくらいまで、成長出来ればと思っています(まだ未知ですが・・・)。 注意しておきべきコードがどの当たりか、お教え願えれば幸いです。

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.2

こういうコードは、メンテナンスが大変ですよ!! 私は、お遊びでしかやりませんが・・・。 新規ブックの標準モジュールに '============================================================ 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で試した限りは正常に作動しています。

onehour
質問者

お礼

お返事が遅れまして、申し訳ありません。 無事に動きました。 ありがとうございます。 ただ、私の質問が悪い点があり、本当にやりたいことと少しだけ違っています。 セルA1に配列を示していますが、同様の配列がA2,A3,A4,,,,と多数あるとして、A2を検索し、B2,C2 (現状ではB3)に書き込み、終わったら、連続的にA3を検索し、B3, C3に、、、という感じで、沢山の配列を一度に解析したいのです。 どの辺を変えていけば思った通りになるのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

通りすぎる方が無難ですが、不快覚悟で言います。質問の状況が良く判りません。 >文字(以下「配列」)が書いてあります 文字列とは言いますが。シートのセルに配列を書くとは、何のことか判りません。配列は専門用語で、データ構造の一種ですが、文字列値に構造を持ち込んでいるのですか。信じられない。 >この配列をwebで検索( とはどういうことですか。文字列でWEBのあるサイトの検索機能を借りて照会し・・の意味と想像しますが。 ご紹介のWEBにA2のデータを張り付け、検索(どういう検索かはブラックボックスとして)に当たるボタンをクリックして、出てきた(返ってきた)WEBページ上の結果(またはその一部)を、B列にでもセットしたい、しかもシートの列の各行のデータについて行いたいということですか。 また、まだまだ海外のWEBを読みこなすというのも大変と思います。その辺考慮して読者に読む負担を少なくして、質問しては。 ーー 多分 エクセルVBA->ブラウザであるWEBページの所定の枠にデータセットー>そのWEBページの検索ボタンを押し下げをプログラムでシミュレートーー>結果を採るーー>エクセルシートの検索語と対応するセルに値をセット 初めと終わりはVBAで簡単ですが、間の部分は他のソフト(ブラウザ)との連携になり、そちらはVBAというものはありません、VBAを一通り出来るレベルでも、VBAの本などには書いてないものです。 ただし、プログラムでWEBを利用面で(検索などで)操ることは、株価照会などで、株の取引などに取り組んでいる例(もちろんプログラムコード例)があります。それらをWEBで探してはどうですか。 もし良い回答が今後出ないなら、私の上記に書いたことも取り入れて(参考)に、質問を書き直し、再質問してはどうですか。 ーー >マクロとなるとさっぱり分からず困っております。 お助け願えませんでしょうか? のレベルでは、エクセルVBAも相当勉強する必要もアリ、WEB関係は公開されている体系的解説がほとんど無いと思いますから苦労すると思います。

onehour
質問者

お礼

厳しいご指摘ありがとうございます。 配列は、意味があるのです。 私の分野で恐縮なのですが、ACDEFGHIKLMNP・・・というのは1文字がアミノ酸を示しており、それが連なったものをアミノ酸配列といいます。 タンパク質の構成要素というモノです。 IT関係の方にどう伝えようか悩んでいたのですが、自分がわからなくなると意味がないので、上記のような記述方法になりました。 質問した内容につきましては、私のレベルでは苦労レベルというのもはっきり分かっているつもりです。 通りすがりでも、言いにくいことをズバリ言って頂いて、良かったかなぁとおもいます。

関連するQ&A

  • エクセル2010 検索と抽出

    エクセル2010を 使っています。 以前教えていただいた、数式を改変して応用したいのですが、うまくいきません。 やりたいのは画像の処理で、 B83の値を E列から探しその関連セルであるF列、G列の値を、C列D列に抜き出すという作業です。 改変した数式は以下の様なもので、C83に入力後、オートフィルで使おうと思っていました。 詳しい方、教えていただけませんか? =IFERROR(INDEX(F83:F162,SMALL(IF(E83:E162=B83,ROW(E83:E162)),ROW(A1))),"") (配列数式) 3キー打鍵 よろしくお願い致します。

  • C言語の結果データをエクセル表示することについて

    C言語の結果データをエクセルで表示すると配列をした場合でも全部A列に表示するのですが、A列、B列、C列・・・と表示を分けることは可能なのですか? VBAでやれば速いかもしれませんが、よろしくお願いします。

  • Swiss-ProtでTranslateした結果に出てくるアミノ酸配列の「5'3' Frame 1」というのは何ですか?

    例えば、このページ http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?db=nucleotide&val=62240391 の一番下のORIGINのところにある、mRNAの配列をコピーアンドペーストで、 Swiss-ProtのTranslate tool ( http://kr.expasy.org/tools/dna.html )に入力してTRANSLATE SEQUENCEをクリックし、結果を見ると、 「5'3' Frame 1」「5'3' Frame 2」「5'3' Frame 3」 「3'5' Frame 1」「3'5' Frame 2」「3'5' Frame 3」という6つの配列が出てきますが、 この「5'3' Frame 1」等というのは何ですか? 基礎的なことがわかっていないからだと思うのですが、このように6つ出てくるのがどういうことなのか、わかりません。 初歩的な質問ですみませんが、よろしくお願いします。

  • エクセルでのデータ抽出方法について

    Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名   列D・列E→列A・列Bから抽出したい情報        【列A】    【列B】    【列C】    【列D】    【列E】      【行1】   11111   山田 太郎    -      11119    (※「山田 九郎を」入れたい) 【行2】   11112   山田 二郎    -      11112    (※「山田 二郎を」入れたい)     【行3】   11113   山田 三郎    -       11118    (※「山田 八郎を」入れたい)     【行4】   11114   山田 四郎    -       11114    (※「山田 四郎を」入れたい) 【行5】   11115   山田 五郎              【行6】   11116   山田 六郎                【行7】   11117   山田 七郎           【行8】   11118   山田 八郎 【行9】   11119   山田 九郎         : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。

  • エクセルのデータの並び替え方

    エクセルのデータで、一つの列にあるデータを、2つおきに別の3つの列にそれぞれ並び替えるにはどの様にすればできますか? (例) A列に1,2,3,4,5,…と並んでいるデータを、B列に1,4,7,…C列に2,5,8,…D列に3,6,9,…といった感じで並び替えたいのですが出来ますでしょうか。

  • エクセル2007 データ抽出(関数)について

    教えてください。エクセルシートにて郵便番号と住所が重複しているデータを抽出したいのです。 例)ある顧客の情報として、シート1のA列に、1から10までの新規顧客の氏名、B列には生年月日が入力されています。C列,D列は空白で、E列には全ての顧客(新規顧客を含みます)の氏名、F列には生年月日、G列には郵便番号、H列には住所が入力されています。このふたつの情報の中から、新規顧客データと全ての顧客データの氏名、生年月日が重複している顧客のみ、C列にその郵便番号、D列に住所を表示させたいのです。 OSはXP エクセル2007です。 困っています。よろしくお願いします。

  • エクセルのデータ抽出について・・・

    はじめまして。 みなさまのお力が借りたく、質問いたします。 わかりずらい質問だとは思いますが、宜しくお願い致します。 例として、エクセルのファイルが2個あるとします。 A.xls B.xls とします。 AにはIDを入力するシートが1枚 BにはそのIDの人の名前・住所・生年月日などを規則性無く入れてあるシートが7枚程あるとします。 AのID列に「10」といれると Bの全7枚のシートの中から該当する人のデータを抜き出し、 Aの所定のセルに表示する。といった事は可能でしょうか? VLOOKUP関数を使ってみたのですが、検索するシートを1枚じゃないとダメみたいで・・・ シートを複数指定するとエラーになってしまいます。 問題は、抜き出したい「ID 10」が7枚のシートの中の何枚目にあるかがわからないのです。 ちなみに、該当する「ID 10」があるシートには必ず名前、住所、生年月日も同じ列に付随して存在します! このようなことは不可能なのでしょうか? もし可能ならばどうしたらいいか教えてください! 宜しくお願い致します。

  • エクセルの関数でデータ抽出をしたい

    エクセルの関数でデータの抽出をしたいのですが、出来るか分からないですが、やり方を教えてください。 まず、現状の管理簿ではA列に発注管理番号、B列に管理エリア、C列に納期他をランダムに打ち込んでいます。 今回、新たにシートを追加して、納期の日付毎に管理できるカレンダーを作成していきたいと考えています。 具体的には新たなシートのA列に1日から31日までを事前に入力していて、B列にその日に該当する納期のある発注管理番号とエリアを全て表示させたいと考えています。 例として、管理簿のシートが A B C 1 22-1 南 2010/2/1 2 22-2 北 2010/2/3 3 22-5 南 2010/3/4 4 22-12 西 2010/2/17 5 22-31 東 2010/2/3 6 22-8 北 2010/2/4 カレンダーのシートで A B 1 2010/2/1 22-1南 2 2010/2/2 3 2010/2/3 22-2北,22-31東 4 2010/2/4 22-8北 5 2010/2/5 6 2010/2/6 7 2010/2/7 こんな感じにしたいと思っています。 よろしくお願いします。

  • エクセルの関数を使った検索について

    エクセルで、例えばA,Bの2列を検索して、 A列、B列共に、指定した検索値(例:A=海外旅行、 B=ベトナム)に合致している行のC列の値(例:\50,000)を取り出したいのです。 自分で数日間、考えてみたのですが、 どうしてもわかりませんでしたので、 どなたか詳しい方にお頼りさせて頂きたく思います。 もし、おわかりの方、いらっしゃいました、 どうか御教え下さい。 何卒宜しく御願い致します。

  • Excelデータ上の抽出ワザは?

         日付A 番号 日付B 1行目  2日  01  2日 2行目  2日  02  1日 3行目  3日  03  2日 4行目  4日  03  2日 5行目  5日  03  3日 6行目  5日  04  3日 7行目  6日  04  3日 いま、上記のようなエクセルデータがあったときに、 「番号列」が等しく、かつ「日付B列」も等しい場合に 「日付A列」で一番大きい日付以外の行を削除したい (上記例の場合、3行目と6行目を削除したい) のですが、実行するにはどうすればいいのでしょうか? 初心者で申し訳ないのですが、 マクロとかいう代物を使用すれば解決するのでしょうか? それともAccessが絡むのでしょうか? アドバイスいただければ幸いです。 よろしくお願いいたします。

専門家に質問してみよう