VBA+SeleniumBasicで検索順位チェッカー作成
VBAでSeleniumBasicを使って検索順位チェッカーを作ってみます。
SEO対策として各キーワードでの検索順位チェックは欠かせませんが、
簡単に使えてキーワードを大量に指定できる良いツールがなかなかありません。
掲載したVBAコードの利用については、各自のご判断でお願いします。
そこで、エクセルVBAでSeleniumBasicを使い、Googleの検索結果から順位を取得するVBAを作成してみました。
Seleniumについて
今回は技術解説というより、上記記事の実践編サンプルとしての位置づけになります。
コードだけを掲載しておきますので参考にしてください。
css selectorや、class,tagについては、chromeデベロッパーツールで確認してください。
VBA自体は難しいものではないと思います。
作成時間の多くは、対象の適切なエレメントを探す時間に費やされることになります。
シート構成

A4~:キーワード(個数制限なし)
B3:取得日
C4~:検索結果に掲載されているページタイトル
B4~:検索結果に掲載されているページURL
E列以降:前回以前の順位履歴
検索順位チェッカーのVBA全コード
Option Explicit
Private Driver As Selenium.WebDriver
Private Const gUrl As String = "https://www.google.co.jp/"
'検索ボックスのCSS selector
Private Const gSearch As String = "#tsf > div:nth-child(2) > div > div.RNNXgb > div > div.a4bIc > input"
Sub RankCheker()
'起動シートの初期処理
Dim ws As Worksheet
Set ws = ActiveSheet
Dim siteUrl As String
siteUrl = ws.Range("C1") 'サイトURL
'Seleniumの初期処理
Dim sKey As New Selenium.Keys
Dim elm As Selenium.WebElement
Set Driver = New Selenium.WebDriver
Driver.Start "chrome"
Dim i As Long
Dim cntRank As Long
With ws
'前回実行日は前日以前なら履歴を残す
If .Range("B3").Value < Date Then
.Columns("E").Insert
Intersect(.Range("A3").CurrentRegion, .Columns("B")).Copy _
Destination:=.Range("E3")
.Columns("E").AutoFit
End If
'出力範囲を初期クリア
.Range("A3").CurrentRegion.Offset(1, 1).Resize(, 3).ClearContents
For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
Driver.Get gUrl
Set elm = Driver.FindElementByCss(gSearch)
'検索ボックスへキーワード送信
elm.Clear
elm.SendKeys .Cells(i, 1)
elm.SendKeys sKey.Enter
'検索結果からサイト掲載要素を取得
Set elm = getElement(siteUrl, _
.Cells(i, 1).Value, _
cntRank)
If Not elm Is Nothing Then
.Cells(i, 2) = cntRank
.Cells(i, 3) = elm.FindElementByTag("h3").Text
.Cells(i, 4) = elm.Attribute("href")
Else
.Cells(i, 2) = "圏外"
End If
Next
'実行日設定
.Range("B3") = Date
End With
'終了処理:Close,Quitは無くても良いけど
Driver.Close
Driver.Quit
Set Driver = Nothing
MsgBox "取得完了"
End Sub
'指定selectorの要素を取得:ページ内に無い場合は「次へ」
Private Function getElement(ByVal siteUrl As String, _
ByVal sCss As String, _
ByRef cntRank As Long) _
As Selenium.WebElement
Set getElement = Nothing
Dim elm As Selenium.WebElement
Dim elms As Selenium.WebElements
Dim cntPage As Long
cntRank = 0
On Error Resume Next
Do
'検索結果表示領域全体:キーワードにより表示が違う場合あり
Set elm = Driver.FindElementByCss("#rso > div:nth-child(2) > div")
If Err Then
Err.Clear
Set elm = Driver.FindElementByCss("#rso > div > div")
If Err Then
Exit Function
End If
End If
'10件表示が<div class="g">で繰り返されている
Set elms = elm.FindElementsByClass("g")
If Err Then Exit Function
For Each elm In elms
cntRank = cntRank + 1
'<div class="g">の中に入っているので
Set elm = elm.FindElementByClass("r").FindElementByTag("a")
If Err Then Exit Function
If elm.Attribute("href") Like siteUrl & "*" Then
Set getElement = elm
Exit Function
End If
Next
'100位まで
cntPage = cntPage + 1
If cntPage >= 10 Then
Exit Function
End If
Driver.FindElementByLinkText("次へ").Click
If Err Then
Exit Function
End If
Loop
End Function
動作が安定しないときは、画面切り替わり直後に適宜待ち時間を入れてください。
Driver.Wait ミリ秒
Google検索のスクレイピングはGoogle利用規約に反する可能性もあり、
過度な検索実行は控えてください。
最後に
お好みに合わせて変更し、上手く使えば結構役に立つツールにできると思います。
同じテーマ「マクロVBA技術解説」の記事
VBAで正規表現を利用する(RegExp)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点
特殊フォルダの取得(WScript.Shell,SpecialFolders)
参照設定、CreateObject、オブジェクト式の一覧
VBAのスクレイピングを簡単楽にしてくれるSelenium
VBA+SeleniumBasicで検索順位チェッカー作成
VBA+SeleniumBasicで検索順位チェッカー(改)
.Net FrameworkのSystem.Collectionsを利用
WshNetwork(ネットワークドライブの割り当て等)
新着記事NEW ・・・新着記事一覧を見る
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)
SQL基礎問題4:2つのテーブルの不一致を抽出|SQL入門(2025-10-29)
SQL基礎問題3:文字列の一部をキーにして集計|SQL入門(2025-10-29)
SQL基礎問題2:文字列「-nn-」のnnが偶数のみ抽出|SQL入門(2025-10-28)
SQL基礎問題1:最大在庫数を持つ製品の在庫金額|SQL入門(2025-10-28)
「ADO + VBA」でSQLを実行するときのVBAサンプル|SQL入門(2025-10-28)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBA+SeleniumBasicで検索順位チェッカー作成
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
