【エクセル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】For~Next文で簡潔にプログラムを書く
  3. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  4. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  5. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  6. 【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し
  7. 【初心者向けエクセルVBA】InputBoxでの日付入力と月末日の自動算出
  8. 【初心者向けエクセルVBA】Worksheetのコピーを活用して複数の請求書を作る
  9. 【初心者向けエクセルVBA】ファイルのコピーを使って取引先別の請求書を作る
  10. エクセルVBAでDateAdd関数を使って年月を条件としてSumIfs関数を使う方法
  11. 宣言もセットも不要!エクセルVBAでワークシートをオブジェクト名で取り扱う方法
  12. エクセルVBAでシートの列の挿入も簡単に対応できちゃう列挙体の使い方