【VBAでIE操作】サイトから商品情報を取得しリスト化するVBAの作り方

 

ネットの情報を取得して一覧表を自動作成したい!

 

こんな問題を解決するために「VBAを使った商品検索ツール」を開発しました。

 

商品開発ツールの概要がこちら

商品検索ツール概要

  • amazonのサイトから「商品名」「価格」「評価」「URL」を取得しリスト化
  • 楽天のサイトから「商品名」「価格」「評価」「URL」を取得しリスト化
  • モノタロウのサイトから「商品名」「価格」「評価」「URL」を取得しリスト化

 

調べたい商品名での検索結果を1つの一覧表にリスト化することができます。

 

このツールは以下の問題を抱えている方におすすめ

  • 複数のサイトを比較して最安値を調べたい
  • 口コミ件数が多くて評判の良い商品を調べたい
  • パソコン操作が苦手!てっとり早く商品を検索したい

3つのサイトで「価格の比較」「評価が高い商品の比較」を行うことで効率よくお目当ての商品を検索することができます。

 

関連記事「商品検索ツールVBA」では商品検索ツールが設定されたエクセルファイルをダウンロードすることが可能。

興味のある方はチェックしてみてください。

 

>>> ダウンロードはこちら

 

この記事では、

開発した商品検索ツールを使ってVBAでサイト情報を取得しリスト化する方法

を解説していきます。

 

サイト情報をリスト化するエクセル業務がある方は是非参考にしてみてください。

 

広告

サイト情報を取得してリスト化するVBAの作り方

 

「サイト情報を取得してリスト化するVBA」は

画像を見てマウスでクリック!商品名をドラッグしてコピー!一覧表に貼り付け!

という操作をプログラミングでやっちゃおうというイメージです。

 

VBA作成の流れがこちら

  1. サイトのURLを調べる
  2. サイトのソースコードを分析する
  3. ソースコードから「取得したい情報」に関するコードを把握する
  4. サイトを開くVBAを作成
  5. 情報を取得し一覧表にするVBAを作成

 

「手順が多いなぁ、、」と感じるかもしれませんが慣れてしまえば素早くVBAの作成が可能になります。

順を追って解説していきますので是非挑戦してみてください。

 

サイトのURLを調べる

サイトのURLを取得する方法はとても簡単です。

サイトを開いて上のバーに表示されているURLをコピー(「CTrl」+「C」)するだけ

これでサイトのURLの取得は完了です。

 

「IEを操作するVBAをもっと自由に扱いたい!」と考えるようになると、

検索窓にキーワードを入力し、検索ボタンをクリック。検索後に表示されるサイト情報を取得したい!

このように感じるはずです。

この方法については関連記事「」で紹介していますので併せてチェックしてみてください。

 

サイトのソースコードを分析する

「サイトの情報を取得する」ということは、

サイトを構成しているソースコードから情報を取得する

ということです。

 

ソースコードはサイトを開いた状態で「Ctrl」+「U」で確認することができます。

 

amazonのソースコードはこんな感じ

 

パッと見ただけではなにがなんだか意味不明ですよね。

 

 

コードがズラズラ羅列されて難しい!と感じると思いますが、

「文字を表示するコード」「ボタンを表示するコード」「おしゃれな画像を表示するコード」のような一つ一つの要素(Document)で構成されていている

だけ。

 

Right Caption

拒否する人

難しく見える羅列されたコードに騙されてはいけません

 

ソースコードを要素ごとに分けて一覧表にした結果がこちら

 

「Name」「InnerText」「InnerHTML」などの要素に分解することでソースコードを見やすく表示することができます。

 

ソースコード分析VBAがこちら

Sub ソースコード分析ツール()
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    Dim txtInput As HTMLInputElement
    Dim txtoutput As HTMLInputElement
    Dim button As HTMLInputElement
    Dim n As Long
    Dim objTAG As Object
    Dim word As String
    ''''''''''''''''''''''検索商品キーワードの検索''''''''''''''''
    word = Cells(4, 2)
    If Cells(4, 2) = "" Then
    MsgBox "URLをB4セルに入力してください"
    Exit Sub
    Else
    End If
    Call リセット
    objIE.Visible = True
    objIE.Navigate word
    Application.ScreenUpdating = False
    Do While objIE.Busy Or objIE.ReadyState < READYSTATE_COMPLETE
    DoEvents
    Loop
        On Error Resume Next
        n = 6
        'Set txtInput = objIE.Document
        For Each objTAG In objIE.Document.all
            n = n + 1
            Cells(n, 1) = objIE.Name
            Cells(n, 2) = "'" & TypeName(objTAG)
            Cells(n, 3) = "'" & objTAG.tagName
            Cells(n, 4) = objTAG.Name
            Cells(n, 5) = "'" & Left(objTAG.innerText, 256)
            Cells(n, 6) = "'" & Left(objTAG.innerHTML, 256)
            Cells(n, 7) = "'" & Left(objTAG.outerHTML, 256)
            Cells(n, 8) = objTAG.href
        Next
End Sub

 

興味のある方は上記のサンプルVBAをコピペして使ってみてください。

 

関連記事「ソースコード分析VBA」では分析VBAの使い方の説明やダウンロード方法が紹介されています。

 

ソースコードから「取得したい情報」に関するコードを把握する

ソースコードの分析結果から「取得したい情報」に関するコードを把握します。

 

この作業がIE操作VBAで一番難しいポイントになるので注意必要です。

 

具体的にイメージできるよう「amazonのサイトを例」にして解説ていきします。

 

「amazonのソースコード」から「商品の価格を取得する」VBAを作ろうとしたとき分析結果一覧表で注目すべきポイントがこちら

  • C列(tagName)に「A」というテキストがあるか
  • F列(innerHTML)のテキスト内に「a-price-symbol」というテキストがあるか
  • 上記2つが該当したとき、3つ下の行のE列(innerText)に「商品価格」があるか

 

「分析結果一覧表」と「実際に設定したVAB」を比較するとこんな感じ

 

For~Nextを使って項目を順番に検索していき、「A」と「a-price-symbol」を検知したとき「商品価格」を取り出す!

というイメージ。

 

ソースコードの規則性を把握することができれば、サイトから「商品名」「URL」などの情報も取得可能です。

 

サイトを開くVBA

サイトを開くVBAがこちら

Sub OpenURL()
 Dim ie As InternetExplorer
 Set ie = CreateObject("InternetExplorer.Application")
 ie.Visible = True
 ie.Navigate "https://www.rakuten.co.jp/"
End Sub

 

2行目から4行目はインターネットエクスプローラーを操作する準備

5行目で「楽天」のサイトを開いています。

 

情報を取得し一覧表にするVBA

 

情報を取得するVBAがこちら

For i = 0 To objIE.Document.all.Length - 1
''''''''''''''''''''''''''''''商品名、価格、リンク'''''''''''''''''''''''''''''
If objIE.Document.all(i).tagName = "A" And InStr(objIE.Document.all(i).outerHTML, "title-link--3Ho6z") Then
gyo = gyo + 1
Cells(gyo, 2) = "'" & Left(objIE.Document.all(i).innerText, 256)
Cells(gyo, 3) = "'" & Left(objIE.Document.all(i + 3).innerText, 256)
Cells(gyo, 6) = objIE.Document.all(i).href
ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Cells(gyo, 6), Address:=objIE.Document.all(i).href
Else
End If
''''''''''''''''''''''''''''''評価/件数'''''''''''''''''''''''''''''
If objIE.Document.all(i).tagName = "A" And InStr(objIE.Document.all(i).outerHTML, "dui-rating -full") Then
Cells(gyo, 4) = "'" & Left(objIE.Document.all(i).innerText, 256)
Else
End If
Next

 

上記VBAは楽天のサイトから「商品名」「価格」「URL」「評価/件数」を取得するコードです。

3行目は検索結果一覧表のC列(tagName)が「A」、かつG列(outerHTML)のテキスト内に「title-link–3Ho6z」を検知したとき情報を取得する

という意味です。

 

さきほどの「分析結果一覧表とVABを比較」で解説した内容と同じですが、

キーワードが「a-price-symbol」から「title-link–3Ho6z」に変わっています。

これは「取得したい情報」や「サイト」で異なるので分析結果一覧表の規則性を見極めて自分で見つけなければなりません。

 

Left Caption

疲れ果てた人

この作業が一番難しい

 

取得した情報を一覧表にするために

取得した情報を一番下にどんどん入力していく

必要があります。

 

この処理をしているVBAが

4行目のgyo=Cells(Rows.Count, 2).End(xlUp).row

です。

 

For~Next内にgyo=Cells(Rows.Count, 2).End(xlUp).rowを記載することで、常に最終行を選択するという処理が可能。

 

このテクニックは一覧表を作成するVBAでよく使われるので自由に扱えるようにしておきましょう。

 

関連記事「行数をカウントする方法」では、VBAでのカウント関数に使い方について解説されいています。

併せてチェックしてみてください。

 

サイトから商品情報を取得しリスト化するVBAを使ってみた

作成したVBAがちゃんと動作するか検証してみました。

 

VBAを実行する前にVBAの設定を確認する必要があります。

1.VBA編集画面で「ツール」→「参照設定」をクリック

2.「Microsoft HTML Object Library」、「Microsoft Internet Controls」にチェックが付いているか確認

 

上記の状態であれば「商品検索VBA」を使用可能です。

 

「商品検索VBA」の使い方がこちら

1.B4セルに「商品名」を入力して、「検索実行」ボタンをクリック

 

たったこれだけ。

 

Left Caption

ガッツポーズの人

めちゃくちゃ簡単に扱えます

 

商品検索事例①

息子が大好きな「パウパトロール 車」で検索してみました。

URLをクリックすして商品名通りのページに移動することできました。

 

商品検索事例②

車のバッテリー交換をしようと思ってたので「カーバッテリ S-115」で検索してみました。

マイナーなキーワードでもちゃんと検索することができました。

 

3つのサイトを比較して「最安値」「評価/件数」を一目で確認できるので商品の検索時間を大幅に節約可能です。

 

 

業務内容に合わせて「サイト情報をリスト化するVBA」を導入するには

業務内容に合わせて「サイト情報をリスト化するVBA」を導入したい!

と感じた方が多いのではないでしょうか。

 

私も経験があるのですが、

サイト情報をリストする作業ってめちゃくちゃめんどくさいし、すぐ新しい情報に更新されちゃうのでやってられない!!

ですよね。。

 

業務内容に合わせてサイト情報をリスト化できればこんなストレスを一発で解決することができます。

 

業務内容に合わせて「サイト情報をリスト化するVBA」を導入するには、

「自分でVBAを設定する方法」と「VBA開発依頼をする方法」

2つの方法があります。

 

個人的な考えとしては、

プログラミングに興味があってVBAを設定する時間がある!という方は自分でVBAを設定

仕事が忙しい!プログラミングは苦手!という方はVBAの開発依頼

がおすすめです。

 

状況に合わせて2つの方法を使い分けするのが一番効率的だと思います。

 

自分でVBAを設定する方法

業務内容に合わせて「サイト情報をリスト化するVBA」を設定するには、

IEを操作するVBA、HTML、CSSの知識

が必要になります。

 

 

 

私の場合、HTMLとCSSの知識が乏しいため「サイトのソースコード」が全く理解できずめちゃくちゃ苦労しました。

 

Left Caption

疲れ果てた人

ソースコード長すぎ!!検索ボタンのコードってどの辺に書かれている理解不能

IEを操作するVBAを作り始める前にHTMLとCSSの知識を身に付けることをおすすめします。

 

HTMLとCSSの勉強なんてする暇ないよ。。。

という方は記事内でも紹介しているソースコード分析VBAを使って項目ごとに一覧表にする方法が絶対におすすめ。

HTMLとCSSを理解していなくてもソースコードの規則性を見つけることができます。

 

 

VBAの開発代行サービスを利用する

 

当ブログでは、業務内容に合わせたVBA開発の代行を受注しています。

 

依頼方法は、

現状このようなエクセル作業をしていて自動化したい!

と伝えるだけ。

 

手間のかかるエクセル作業を自動化するVBAを提案させていただきます。

 

もちろん、

この記事で紹介している「業務内容に合わせたサイトの情報をリスト化するVBAの導入」の依頼

も承っています。

 

Left Caption

ひらめく人

気になる方はお気軽にお問合せください。

>>>マメBlogのVBA開発依頼の詳細はこちら

 

関連記事「年間50件達成!!マクロ開発実績について」ではマメBlogが行ってきたVBA開発の実績が詳しく紹介されています。

 

どんなVBA開発を行っているのか、費用はどれくらいかかるのか、などVBA開発依頼サービスに興味のある方は是非チェックしてみてください。