ExcelでWebスクレイピング!Power Queryで任意のデータを抽出する方法【コピペから解放】

毎週のコピペ地獄、終わらせませんか?

ウェブサイトから同じデータを定期的にコピペしてる人、手を上げて!🙋

「毎週月曜、このサイトから最新ランキングをコピペしてExcelに貼る…」
「コピペ中に行がずれて、また最初から…」
「明日また同じことやるの…?😭」

わかります。私も毎週やってました。

でもある日気づいたんです。
「これ、Excelの標準機能でできるじゃん!」って。

今日は、プログラミング知識ゼロでできるExcelウェブスクレイピングを徹底解説します!

「Webスクレイピング」って何?

ウェブサイトから自動的にデータを抽出することです。

普通はPythonとか特別なツールが必要…って思いますよね。
でもExcelの「Power Query」だけでできちゃうんです!

しかも一度設定すれば:
– クリック一つで最新データに更新
– 毎週同じ作業から解放
– ミスもなくなる

最高じゃないですか?✨

まず知っておきたい:Excel標準機能の限界

Excelには「Webから」という機能があります。

簡単にできるパターン

ウェブページにテーブルがあれば、超簡単!

Webからデータ取得

手順:
1. Excel「データ」タブ→「Webから」
2. URL入力
3. テーブル選択

URL入力画面

テーブル選択

はい、完了!簡単ですよね😊

でも…困るパターン

問題:欲しいデータがテーブルじゃない!

例えば、YouTubeの急上昇ランキングサイト:
リスト要素の例

これ、<li>要素(リスト)で作られてるんです。
テーブルじゃない!

テーブルがない

「Table 0」が表示されない…😭
Excelに読み込めません。

でも大丈夫!今日はこれを解決する方法を教えます!

今日やること:全体の流れ

リスト要素でも抽出できるように、ページを文字列として読み込んで加工していきます。

処理の流れ

5つのステップ:
1. ページを文字列として読み込み
2. リスト要素の開始位置まで削除
3. リスト要素の終了位置まで保存
4. <li>要素を行に分ける
5. 記号で列に分ける

「難しそう…」って思いました?
一つずつやれば大丈夫! 私も最初はそう思ってました😊

ステップ1:文字列として読み込み

1-1. 基本の読み込み

まずは普通に「Webから」で読み込みます。

Webから選択

URL例:https://ytranking.net/trend/?date=2022022010

ナビゲーター画面

1-2. Power Queryエディターで編集

重要!「OK」じゃなくて「データの変換」をクリック!

Power Queryエディター

Power Queryの編集画面が開きます✨

最初の掃除:
右側の「ナビゲーション」ステップは不要なので×で削除しましょう。

ナビゲーション削除

1-3. 文字列モードに切り替え

ここがポイント!

数式バーを見てください。Web.Pageになってますよね。
これをLines.FromBinaryに書き換えます。

Web.Page

書き換え後:
Lines.FromBinary

わお! HTMLソースが文字列のリストとして読み込まれました🎉

Why? なんで文字列で読み込むの?
テーブル要素がないページでも、HTML全体を文字列として取得して、
自分で好きな部分を切り出せるようにするためです!

ステップ2:リスト要素の開始位置まで削除

2-1. 欲しいデータの開始位置を探す

読み込まれたHTMLソースをスクロールして、欲しいデータの開始位置を探します。

データの開始位置

この例では、151行目に<li id="rank1">がありました!
これが欲しいデータの開始地点です。

2-2. 不要な部分を削除

先頭150行は不要なので削除します。

操作:
「アイテムの削除」→「上位アイテムの削除」

上位削除メニュー

150と入力:
150入力

結果:
li要素が先頭に

<li id="rank1">が先頭になりました!✨

2-3. もっと賢く:柔軟な削除方法

でも、ここで問題!

「もしサイトが更新されて、<li id="rank1">が151行目じゃなくなったら?」

処理が壊れちゃいますよね😭

解決策:文字列で判定する!

数式バーを見るとList.Skip(ソース,150)になってます。
これをList.RemoveFirstNに書き換えます。

手順:

①欲しい開始行の文字列をコピー
文字列コピー

1行目をクリックすると、下に文字列全体が表示されます。これをコピー!

②新しいクエリを作成
新しいクエリ

左側の空白で右クリック→「新しいクエリ」→「その他のソース」→「空のクエリ」

③コピーした文字列を貼り付け
文字列貼り付け

④クエリ名を変更
クエリ名変更

「li開始位置」と名付けます。

⑤数式を書き換え
数式書き換え前

Before:

List.Skip(ソース, 150)

After:

List.RemoveFirstN(ソース, each _ <> li開始位置)

数式書き換え後

What does this mean?
li開始位置と一致しない行を削除し続ける」
= 最初に<li id="rank1">が出てくるまで削除

これなら、行数が変わっても大丈夫! 🎯

ステップ3:リスト要素の終了位置まで保存

終了位置も同じ要領です!

3-1. 終了位置を探す

終了位置

403行目が最後の</li>でした。

最終行

全体が562行なので、後ろから159行(562-403)削除します。

3-2. 下位アイテムを削除

下位削除

「アイテムの削除」→「下位アイテムの削除」

159入力

159と入力。

結果

403行になりました!

3-3. これも柔軟に

開始位置と同じく、文字列で判定するように改善します。

①最終行の文字列をコピー
最終行コピー

②新しいクエリ「li終了位置」を作成
終了位置クエリ

③数式を書き換え
Before

Before:

List.RemoveLastN(削除された最初の項目, 159)

After:

List.RemoveLastN(削除された最初の項目, each _ <> li終了位置)

After

完璧!これで行数が変わっても大丈夫✨

ステップ4:<li>要素を行に分ける

現在のリストは、HTMLソースの元々の改行で行が分かれています。
でも欲しいのは「<li>ごと」に分かれたデータですよね。

4-1. 全行を一つの文字列に結合

ステップ挿入

「削除された下の項目」を右クリック→「後にステップの挿入」

数式編集

数式を編集:

Text.Combine(削除された下の項目)

結合後

全部が一つの文字列になりました!

4-2. <liで分割

再度ステップ挿入

「カスタム1」を右クリック→「後にステップの挿入」

分割数式

数式:

Text.Split(カスタム1, "<li")

これで<liで文字列が分割されます!

4-3. 不要な1行目を削除

1行削除

「アイテムの削除」→「上位アイテムの削除」→「1」

結果

やった!<li>要素が1行になりました🎉

ステップ5:記号で列に分ける

最後のステップ!要素の中身を列に分けます。

5-1. まずテーブルに変換

テーブル変換

「リスト」→「テーブルへ」

変換後

5-2. 記号を統一

HTMLの区切り記号は複数あります:" , = > <

これらを全部@に統一して、後で分割しやすくします。

操作:
「列」→「値の置換」で一つずつ置き換え

置換する記号(順番に):
1. "@
2. ,@
3. =@
4. >@
5. <@

Pro Tip 💡
複数の置換を一度にやるM言語もありますが、
最初は一つずつ置換の方がわかりやすいです!

5-3. @で列に分割

列分割

「列」→「列の分割」→「区切り記号による分割」

区切り記号:@

やった!列に分かれました! 🎊

5-4. 不要な列を削除

不要列削除

データが入ってない列や、不要な列を削除します。

5-5. 列名を変更

列名変更

列名をわかりやすく変更しましょう:
– Column1.1 → ランク
– Column1.3 → タイトル
– Column1.5 → チャンネル名
など

5-6. 完了!Excelに読み込み

完成

「閉じて読み込む」をクリック!

Excelシート

完成! ウェブサイトのデータがExcelに✨

更新も簡単!クリック一つ

ここからが本当にすごいところ。

次からは:
「データ」タブ→「すべて更新」

これだけ! 最新データに更新されます🎉

毎週のコピペ地獄から解放です!

トラブルシューティング

Q1: Lines.FromBinaryでエラーが出る

A: ファイルがバイナリ形式じゃない可能性があります。

Web.Pageのステップまで戻って、
Lines.FromBinary(Web.Contents(...))
の形になってるか確認してください。

Q2: 列分割がうまくいかない

A: 記号の置換忘れがないかチェック!

5つの記号(",=,>,<)全部を@に置換しましたか?

Q3: データが取得できなくなった

A: サイトの構造が変わった可能性があります。

「li開始位置」と「li終了位置」のクエリを更新してください。

Q4: Excelがフリーズする

A: データ量が多すぎるかも。

Power Queryで不要な行を削除するステップを追加しましょう。
例:上位50件だけ取得など。

応用例:こんなことができる!

この方法を使えば:

競合サイトの価格監視
→ 毎日自動で価格チェック

SNSトレンド追跡
→ 急上昇ワードを記録

在庫状況の監視
→ 在庫切れをすぐキャッチ

ニュース記事の収集
→ 特定トピックを自動収集

使い道は無限大! 🌟

まとめ:あなたもコピペ地獄から卒業できる!

長い記事でしたね。お疲れ様でした!😊

今日学んだこと:
1. ExcelだけでWebスクレイピングができる
2. テーブル要素じゃなくてもOK
3. 一度設定すれば、更新はクリック一つ
4. 行数が変わっても柔軟に対応できる

最初の感想:
「難しそう…」

やってみた後:
「あれ?意外とできた!」

これが多くの人の反応です😊

今日の宿題 📝
1. 自分がよく見るウェブサイトを一つ選ぶ
2. そのサイトでこの方法を試してみる
3. うまくいったら、コメントで教えてください!


Watch Out! ⚠️ 大事な注意事項

Webスクレイピングする前に:
利用規約を確認してください
robots.txtをチェック
アクセス頻度は控えめに(サーバーに負荷をかけない)
個人利用の範囲で

ルールを守って、賢くデータ収集しましょう!


次に読む記事:
– Power Queryの基礎知識 (coming soon!)
– M言語の便利関数まとめ (coming soon!)
– Web APIでもっとスマートにデータ取得 (coming soon!)

質問やリクエストは?
コメント欄かお問い合わせからどうぞ!
「このサイトのデータ取りたいんだけど…」って相談も歓迎です😊

P.S.
この記事で時間節約できた人、教えてください!
「毎週2時間かかってたのが5分になりました!」とか聞くと、
めちゃくちゃ嬉しいです🎉

コメント

タイトルとURLをコピーしました