【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法


button

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAでIEを操作するシリーズです。

前回はこちらの記事でテーブルの情報を取得する方法についてお伝えしました。

【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
初心者向けエクセルVBAでIEを操作するシリーズ7回目。今回はHTMLにおけるテーブルの構成の仕方に触れつつ、そのテーブル内のデータを取得するというWEBスクレイピングらしいテクニックを解説します。

今回は少し趣向を変えまして、IEを操作してWEBページ内の検索窓に任意のキーワードを入力して送信する方法です。

エクセルに検索したいキーワードをリストアップしておいて、それを順番に検索してその結果を取り出す…というようなプログラムが想定できますね。便利そうです。

では、行ってみましょう!

今回のお題:検索窓に任意の文字列を入力して検索

今回は当ブログ「いつも隣にITのお仕事」のサイト内検索をしたいと思います。

皆さんは当ブログの検索窓はそんなに使わないかも知れませんが、その位置はページの中盤あたりにあります。

検索窓

ここまで行くの面倒ですね。

ではVBAで操作しちゃいましょう。

この検索窓にInputBoxで入力してもらった文字列を入力し検索結果を表示する、というのを今回のお題とします。

GoogleChromeの検証を活用してformタグを見つけ出す

では方針を決めるべく、現在のページの検証をしていきます。

Google Chromeにはその名も検証という素敵な機能がありますので、この機能を活用して目指す検索窓の作りを調査していきます。

検証で目的の要素を見つける

まずGoogle Chromeで本サイトのトップページを開いた状態で Ctrl + Shift + I を押して「検証」をします。右クリックでも出ます。

検索窓がどの部分で表現されているか探したいので、右側のウィンドウで▶マークを開いたり閉じたりしながら探してみましょう。現在カーソルがある位置が左側のウィンドウでブルーに網掛されます。

GoogleChromeの検証機能

上記の例ではid=”header”のdivタグのエリアがブルーに網掛されている、ということになります。

探してみますと、ここにありました。

GoogleChromeの検証で入力フォームを探す

id=”sidebar-widget”のdivタグの中のformタグが該当しています。

HTMLに詳しい方ならわかると思いますが、テキストやラジオボタン、リストボックスなどの入力フォームはすべてこのformタグの中に記述しますね。

ですから、逆に検索しちゃえば速く見つけることができます。この右側のウィンドウがアクティブになっている状態で Ctrl + F で検索窓が出てきますのでここに「<form>」と入力してください。

目的の要素のHTMLをごっそりコピーする

次にformタグが選択されている状態で右クリックして「Copy→Copy outerHTML」としますと、このform要素がごっそり取得できます。

GoogleChromeの検証でouterHTMLを取得

ペーストしてみますと

となっています。

form要素はid=”searchform”、入力フォームにinput要素はid=”s”で取得できますね。idが振られている場合は、そのHTMLドキュメントの中で一意に要素を掴めるのでとても助かります。

では、これを活用してプログラムを組んでいきましょう。

IEで検索窓にキーワードを入力して送信するプログラム

以上を踏まえてプログラムを書いてみますとこうなります。

おおまかな流れとしては

  1. InputBoxで検索するキーワードを入力
  2. トップページを開いてドキュメントを取得
  3. form要素と入力フォームのinput要素を取得
  4. 検索窓にキーワードを入力
  5. 送信

という流れになります。

getElementByIdを用いてidをキーに要素を掴む

先ほど少し触れたように、要素にidが振られている場合はそのHTMLドキュメント内で一意に決まりますので簡単に要素を掴むことができます。

方法としては、getElementByIdを用いて

HTMLドキュメント.getElementById(ID)

と記述すればOKです。getElementByIdは要素一つだけを取得します。

今回で言うと

この部分です。

類似の命令でgetElementsByTagNameやgetElementsByClassNameなどがありますが、これらはElementsつまり複数形であることに注意してください。取得できるものも1つの要素ではなくて、要素のコレクションになります。

input要素に値を入力

input要素に値を入力する場合

input要素.Value=値

とします。

id=”s”で入力フォームに該当するinput要素を取得できましたので、この入力フォームに値を入力します。

ここまでを実行しますと、まずInputBoxで「空白セル」と入力してEnter。

VBAのInputBoxで検索キーワードを入力

IEが立ち上がり、入力フォームに値が入力されます。

IEで入力フォームに値を入力

formの内容を送信する

続いて送信ボタンを押すのですが、実は送信をする場合はform要素に対して以下のように命令をします。

form要素.submit

これで送信がされます。なんとなくtype=”submit”のinput要素に対してsubmitをしたくなりますが、違いますので気を付けて下さい。

送信した結果がこちらです。

IEで検索フォームに入力して送信

ちゃんと「空白セル」の検索結果ページに遷移していますね。バッチリです。

まとめ

以上、VBAでIEで検索窓にキーワードを入力して送信するプログラムについてお伝えしました。

WEBスクレイピングではGoogleChromeの検証機能がとても強い味方になります。検証できて筋道が決まってしまえば、もうプログラムは8割がた完成と言っても良いかも知れません。

ぜひどんどん活用してマスターしてくださいね。

次回はブログの記事一覧を取得する方法についてをお伝えできればと思います。

【エクセルVBAでIE操作】ページをクロールしてブログの記事一覧を取得する方法
初心者向けエクセルVBAでInterneteExplorer(IE)を操作するシリーズです。今回から何回かにわたって、ブログサイトの記事一覧をWEBスクレイピングで取得する方法をお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作してWEBスクレイピング

IEを操作してWEBページのデータを取得して、エクセルのデータとして取り込む、つまりWEBスクレイピングをエクセルVBAで実現します。各種WEBページを課題として様々なデータの取得の仕方を解説していきたいと思います。
  1. 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
  2. 【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
  3. 【エクセルVBAでIE操作】ブラウザの読み込み待ちをしないとダメなのです
  4. 【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
  5. 【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
  6. 【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
  7. 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
  8. 【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
  9. 【エクセルVBAでIE操作】ページをクロールしてブログの記事一覧を取得する方法
  10. 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
  11. 【エクセルVBAでIE操作】ページャーを最後のページまでどんどんリンクする
  12. 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする

連載目次:データ一覧から請求書を自動で作る

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
  3. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  4. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  5. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  6. 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
  7. 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
  8. 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
  9. 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
  10. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  11. 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
  12. 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
  13. 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
  14. 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
  15. 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
  16. 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
  17. 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
  18. 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
  19. 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
  20. 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
  21. 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
  22. 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る

The following two tabs change content below.
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ ★フォロー頂ければ嬉しいです。

コメント

  1. スコ より:

    いつも大変参考にさせて頂いております。本もとても勉強になりました。
    1店伺いたいのですが、htmlの中にidがない場合は、どのように要素をつかめばいいのでしょうか?

  2. スコ より:

    迅速なご返信ありがとうございました。また、もう一件伺いたい事がございますので、お声いただけますと幸いです。
    サイトによって要素を取得できないなどあるのでしょうか?
    あるサイトでname属性で値を入力出来たのだますが、自社の社内システムで同様に取得しようとしたところ失敗致しました。
    このような事象はあるのか、また対策などあるのかお教え頂きたく思います。

    • はい、サイトによっては目的の要素を取得するのが難しいこともあるかと思います。
      こればかりは、サイトの作りや環境に依存してしまうので、解決法は一概には言えません。

      • スコ より:

        やはり、そうした事象はあるのですね。お答え下さりありがとうございました。