【Excel VBA×Selenium】不動産管理サイトから2,000件超の物件データを自動スクレイピング!Google広告ダイナミック広告用データフィードを一括生成するExcelマクロ
不動産管理サイトの全物件情報を自動取得!
Google広告ダイナミック広告用データフィードをExcel VBAで一括生成した事例
こんにちは!
「不動産管理サイトに掲載している物件情報を、Google広告のダイナミック広告用データフィードとして整備したいが、2,000件以上の物件を一つずつ手作業で転記するのは現実的ではない…」
「物件の追加や削除があるたびにデータフィードを手動で更新する必要があり、常にGoogle広告のデータと実際の掲載状況にタイムラグが生じてしまう…」
「物件名・所在地・価格・画像URL・物件URLなど、Google広告が要求する複数の項目を正確にフォーマットして出力する作業が煩雑で、入力ミスのリスクが高い…」
不動産業界においてGoogle広告のダイナミック広告(動的リマーケティング広告)を活用するためには、物件データを所定のフォーマットに整形したデータフィード(ビジネスデータ)の定期的な更新が不可欠です。しかし、掲載物件数が数百件から数千件規模になると、手作業でのデータフィード管理は膨大な時間と労力を要し、データの不整合や更新漏れによる広告効果の低下を招きかねません。
今回は、不動産管理サイト(賃貸物件ポータルサイト)に掲載されている全物件の情報を、Selenium WebDriverによるブラウザ自動操作で一括スクレイピングし、Google広告ダイナミック広告用データフィードのフォーマットに準拠した形でExcelファイル(xlsm)に自動出力するVBAマクロを開発した事例をご紹介します。
導入前は、数千件の物件情報をサイト上で一つずつ確認しながらスプレッドシートに手動で転記しており、1回のデータ更新作業に丸2日以上を費やしていました。本ツールの導入により、マクロの実行ボタンを押すだけ、あるいはタスクスケジューラーによる完全自動実行で、2,000件超の物件データを数十分で正確に取得・更新できるようになりました。

Excel VBAマクロが出力したGoogle広告用データフィード:2,000件超の物件情報がListing ID・物件名・URL・画像・所在地・価格・物件タイプの列構成で一覧化
不動産物件データ自動収集ツールの全体像
Google広告ダイナミック広告に必要なデータフィード項目
Google広告のダイナミック広告(不動産カテゴリ)では、広告配信時にユーザーが過去に閲覧した物件情報を動的に挿入するため、以下のような項目を含むデータフィードの登録が求められます。本ツールは、これらの項目すべてをスクレイピングによって自動取得し、Google広告のビジネスデータ仕様に準拠した列構成でExcelファイルに出力します。
自動取得するデータフィード項目:
| 列 | フィード項目名 | 取得内容 |
|---|---|---|
| A列 | Listing ID | 一意の物件識別番号(自動採番) |
| B列 | Listing name | 物件名(半角25文字・全角12文字以内に自動調整) |
| C列 | Final URL | 物件詳細ページへの直接リンクURL |
| D列 | Image URL | 物件の外観写真画像URL |
| E列 | City name | 所在地(都道府県+市区町村+町名、自動調整済) |
| F列 | Description | 築年数・階建など物件概要 |
| G列 | Price | 最安賃料(「○○,○○○ JPY」形式) |
| H列 | Property type | 物件タイプ(アパート・マンション・一戸建て等) |
これらに加えて、Listing type、Business profile、Contextual keywords、Address、Tracking template、Custom parameter、Final mobile URL、Android app link、iOS app link、iOS app store IDの列も含めた19列構成で出力されるため、Google広告管理画面へそのままアップロード可能なフォーマットになっています。
xlsmファイルのシート構成
本ツールは、1つのExcelマクロ有効ブック(xlsm)に処理ロジックとデータ出力先を集約した設計です。
「oheya」シート(管理用シート):
ツールのバージョン情報を管理するシートです。ツールの更新履歴やバージョン番号を記録し、運用中のツールがどのバージョンであるかを一目で確認できます。
「data」シート(データ出力先):
スクレイピングによって取得した全物件データの出力先シートです。ヘッダー行にはGoogle広告データフィードの項目名がそのまま設定されており、マクロ実行のたびにデータが最新の状態に自動更新されます。2,000件以上の物件情報が整然と格納され、CSV変換やGoogle広告管理画面へのアップロードに即座に利用可能な状態で保持されます。

不動産管理サイトからGoogle広告データフィードを生成するまでの自動処理フロー全体像
スクレイピング処理の技術的な仕組み
Selenium WebDriverによるサイト自動巡回
本プログラムの中核は、VBA(Visual Basic for Applications)からSelenium WebDriverライブラリを通じてGoogle Chromeブラウザを自動操作するスクレイピング処理です。
ブラウザの初期設定:
ChromeDriverの起動時に、ウィンドウの最大化(start-maximized)、サンドボックスの無効化(no-sandbox)、日本語ロケールの設定(lang=ja-JP)といった最適化オプションを適用しています。これにより、スクレイピング対象サイトが日本語で正しく表示され、ウィンドウサイズに依存する表示崩れを防止しつつ、安定した自動操作が実現されています。
対象サイトへのアクセスと物件カテゴリの選択:
プログラムは、まず不動産管理サイトのエリア選択ページにアクセスし、掲載されているすべての物件カテゴリ(チェックボックス)を自動でチェックします。XPath(//*[@class='p-check-list__item']//label)を用いてチェックボックス要素を検索し、全カテゴリを一括選択した上で、JavaScriptのmovePage('list_building')関数を実行して物件一覧画面へ遷移します。
表示件数の最大化とページネーション処理:
物件一覧画面では、1ページあたりの表示件数を100件に変更(SelectByValue 100)し、ページあたりの取得効率を最大化しています。さらに、ページ下部の「次へ」ボタン(c-pager__next)を自動検知してクリックすることで、全ページを漏れなく巡回します。ページ遷移後は、先頭物件のタイトルが前ページと異なることを確認する「重複チェック待機」処理を実装し、ページ読み込みの完了を確実に検知しています。

スクレイピング対象サイトの物件情報画面
各物件から取得する情報の詳細
物件一覧ページに表示される各物件カード(p-property-box__item)から、以下の情報をXPath指定で自動抽出します。
Listing name(物件名)の取得と文字数調整:
物件名はh3タグのテキストとして取得されます。Google広告のデータフィード仕様では、Listing nameの文字数に制限があるため、取得した物件名は半角25文字(全角12文字相当)以内に自動で切り詰められます。この文字数カウントは、半角と全角の文字幅を正確に判定する独自関数(GetCharacterWidth)を実装して対応しており、日本語と英数字が混在する物件名でも適切な長さに調整されます。
Final URL(物件詳細ページURL)の取得:
物件名のアンカータグ(h3/a)からhref属性値を取得し、物件詳細ページへの直接リンクURLを記録します。このURLがGoogle広告のランディングページとなります。
Image URL(物件画像URL)の取得:
物件カード内のimgタグからsrc属性値を取得し、物件の外観写真URLを記録します。この画像がダイナミック広告に表示される物件イメージとして使用されます。
City name(所在地)の取得と文字数調整:
物件情報テーブル(p-property-box__information)の1列目から所在地テキストを取得します。物件名と同様に、半角25文字以内への自動調整処理が適用されます。
Description(物件概要)の取得:
物件情報テーブルの3列目から、築年数や階建などの概要情報を取得します。この項目にも文字数調整処理が適用されます。
Price(賃料)の取得と最安値の自動選定:
物件カード内の賃料テーブル(p-building-room-list)に表示されている全部屋の賃料を走査し、最も安い賃料を自動的に選定します。取得した賃料は万円単位から円単位に変換(×10,000)され、「○○,○○○ JPY」のフォーマットで出力されます。複数の部屋タイプが存在する物件では、最安値を基準価格として採用することで、Google広告でユーザーにとって最も訴求力の高い価格を表示できるようにしています。
Property type(物件タイプ)の取得:
物件カードのタイプ表示要素(p-property-box__title-type)から、アパート・マンション・一戸建て等の物件種別を取得します。
Listing ID(物件識別番号)の自動採番:
新規に取得した物件には、既存データと重複しない一意のIDが自動採番されます。getId関数が既存のListing IDを走査し、未使用の最小の番号を割り当てるロジックを実装しています。
データの差分管理と重複排除
本ツールの重要な特徴のひとつが、サイト上の物件データとExcelファイル内の既存データの差分を自動管理する仕組みです。
重複チェック機能(isExist関数):
各物件のスクレイピング時に、取得したListing name(物件名)とFinal URL(物件URL)の組み合わせを既存データと照合し、すでに登録済みの物件はスキップします。このチェックにより、マクロを複数回実行しても同一物件が二重に登録されることはありません。既存物件が見つかった場合は、当該行のセルに赤色(Interior.Color = 255)の色付けフラグを設定し、現在もサイトに掲載されている物件であることを視覚的にマーキングします。
掲載終了物件の自動削除:
全ページのスクレイピングが完了した後、色付けフラグが設定されていない行(=サイト上に掲載されなくなった物件)を自動的に検出し、該当行を削除します。この処理により、Excelファイルのデータは常にサイトの最新の掲載状況と完全に同期された状態を維持できます。掲載が終了した物件がGoogle広告のデータフィードに残り続けることによる「リンク切れ広告」の発生を、構造的に防止する設計となっています。

Google広告管理画面のアイテムステータスレポート:スクレイピングしたデータが「有効」ステータスで正常に登録されている状態
安定稼働を支えるエラーハンドリングと自動実行機能
堅牢なエラーハンドリング設計
2,000件以上の物件データを取得する処理では、ネットワーク遅延やサイト側のレスポンス遅延などの問題が不可避的に発生します。本ツールでは、以下のような多層的なエラーハンドリング機構を実装し、長時間の連続稼働でも安定した動作を保証しています。
要素検出の待機処理(waitForXpath関数):
スクレイピング対象の要素がページ上に表示されるまで、500ミリ秒間隔でポーリングを行い、指定回数(デフォルト10回)経過しても検出されない場合はページ全体をリロードして再取得を試みます。それでも検出できない場合(50回試行後)は、処理を安全に中断してリソースを解放します。
ページ遷移の確実な検知:
ページネーション時に、次ページのコンテンツが完全に読み込まれるまでの待機処理を実装しています。先頭物件のタイトルテキストが前ページと異なることを確認するロジックにより、ページの部分的な読み込みによる不完全なデータ取得を防止しています。読み込みに失敗した場合は、ページのリフレッシュと再待機を自動的に繰り返します。
実行前の確認ダイアログ:
マクロの実行ボタンを押した際に「実行を行いますか?」という確認ダイアログが表示されるため、誤操作による意図しないスクレイピングの実行を防止できます。
ChromeDriverの自動更新:
マクロ実行時にupdateChromedriver関数が呼び出され、使用しているGoogle Chromeブラウザのバージョンに対応したChromeDriverが自動的にダウンロード・更新されます。これにより、Chromeのバージョンアップに起因するSelenium接続エラーを未然に防止し、常に最新の環境でスクレイピングを実行できます。
タスクスケジューラーによる完全自動実行
本ツールには、Windowsタスクスケジューラーと連携して完全な無人自動実行を実現する**VBScript実行ファイル(executeMacro_oheya.vbs)**が付属しています。
VBScriptの処理内容:
VBScriptは、xlsmファイルが既にExcelで開かれているかをチェックし、開かれていない場合はExcelアプリケーションを自動起動してxlsmファイルを開き、マクロ(oheya関数)を実行します。処理完了後は、ファイルの自動保存とExcelの終了を行います。xlsmファイルが既に別のプロセスで開かれている場合は、既存のワークブックを再利用してマクロを実行するため、ファイルの競合が発生しません。
タスクスケジューラーでの設定:
Windowsタスクスケジューラーに上記VBScriptを登録することで、毎日・毎週など任意のスケジュールでスクレイピングを自動実行できます。たとえば、「毎日午前3時に物件データを自動更新し、Google広告のデータフィードを最新状態に保つ」といった運用を、人の介入なしに実現できます。
これにより、不動産会社の担当者はデータフィードの更新作業を一切意識することなく、Google広告のダイナミック広告に常に最新の物件情報を反映させることが可能になります。
導入効果:データフィード管理業務の劇的な効率化
2日以上かかっていたデータ更新作業を数十分に短縮
これまで2,000件以上の物件情報を一つずつサイト上で確認しながらスプレッドシートに転記していた作業が、マクロの実行ボタンを押すだけで数十分で完了するようになりました。タスクスケジューラーを利用すれば、その数十分すら人が関与する必要がなく、業務時間外に自動で処理が完了します。
この大幅な時間短縮により、担当者は物件撮影、内見対応、顧客フォローアップなど、より付加価値の高い業務に時間を充てることが可能になりました。
データフィードの正確性向上とリンク切れ広告の完全防止
手作業でのデータ入力では避けられなかった、物件名の入力ミス、URL の転記間違い、価格の記載漏れといったヒューマンエラーがプログラムによる自動取得で構造的に排除されました。
特に、掲載終了物件の自動検出・自動削除機能により、「すでに成約済みの物件がGoogle広告に表示され続け、クリックしてもページが存在しない」という、広告費の無駄遣いとユーザー体験の悪化を同時に引き起こすリンク切れ広告の問題が根本的に解消されています。
Google広告の運用効果の最大化
データフィードが常に最新の状態に保たれることで、Google広告のダイナミック広告が持つ本来のパフォーマンスを最大限に発揮できるようになりました。ユーザーが過去に閲覧した物件が正確にリマーケティング広告として表示され、物件詳細ページへの再訪問率とコンバージョン率の向上が期待できます。
また、新規掲載物件が即座にデータフィードに反映されるため、掲載開始直後から広告配信のターゲットに含めることができ、物件の早期成約に貢献します。
誰でも運用できるシンプルな操作性
本ツールの運用に必要な操作は、「xlsmファイルを開いてマクロ実行ボタンを押す」の1ステップのみです。VBAやプログラミングの知識は一切不要であり、Excelの基本操作ができる方であれば誰でもすぐに利用開始できます。
タスクスケジューラーによる自動実行を設定すれば、操作すら不要になります。担当者の異動や退職があっても、ツールが自動でデータフィードを更新し続けるため、業務の属人化を完全に解消できます。
開発費用と費用対効果
今回のような「不動産管理サイトからの全物件データ自動スクレイピング・Google広告ダイナミック広告用データフィード自動生成・差分管理による掲載終了物件の自動削除・タスクスケジューラー連携による完全自動実行」を包括的に実現するExcel VBAマクロの開発費用は、およそ30,000円〜40,000円ほどです。
このツールの導入により、以下のコストを継続的に削減できます。
- データ更新作業の人件費削減:丸2日以上かかっていたデータフィード更新作業を数十分に短縮し、月間で数十時間分の工数を削減
- 広告費の無駄遣い防止:掲載終了物件のリンク切れ広告を自動防止し、広告予算を有効な物件の訴求に集中投下
- ヒューマンエラーの完全排除:物件情報の転記ミスやURL入力間違いをプログラムが構造的に防止
- 広告効果の継続的な最大化:データフィードの鮮度を常に最新に保ち、ダイナミック広告のコンバージョン率を向上
- 教育・引継ぎコストの削減:シンプルな操作性と自動実行により、新任担当者でも即日運用開始が可能
1回のデータ更新作業で削減できる人件費だけでも投資回収が見込める、費用対効果の高いソリューションです。
このようなお悩みをお持ちの企業様・不動産事業者様におすすめです
- 不動産ポータルサイトの物件情報をGoogle広告のデータフィードとして活用したいが、手作業での転記に限界を感じている
- 物件の追加・削除のたびにデータフィードを手動更新しており、広告データとサイトの掲載状況にタイムラグが生じている
- Google広告のダイナミック広告を導入したいが、データフィードの初期構築と継続的な更新作業がネックになっている
- 掲載終了物件がGoogle広告に残り続けることで、リンク切れ広告が発生し広告費が無駄になっている
- 特定の担当者にデータ管理業務が属人化しており、担当者不在時にデータフィードが更新されないリスクがある
- タスクスケジューラーを使って完全自動でデータフィードを更新し、運用負荷をゼロにしたい
不動産物件データの収集やGoogle広告用データフィードの自動化にご興味がございましたら、どんな小さなことでも構いませんので、まずはお気軽にご相談ください。
貴社の物件管理フローとGoogle広告運用に最適なExcel VBA自動化ソリューションをご提案いたします。


