毎週のコピペ地獄、終わらせませんか?
ウェブサイトから同じデータを定期的にコピペしてる人、手を上げて!🙋
「毎週月曜、このサイトから最新ランキングをコピペしてExcelに貼る…」
「コピペ中に行がずれて、また最初から…」
「明日また同じことやるの…?😭」
わかります。私も毎週やってました。
でもある日気づいたんです。
「これ、Excelの標準機能でできるじゃん!」って。
今日は、プログラミング知識ゼロでできるExcelウェブスクレイピングを徹底解説します!
「Webスクレイピング」って何?
ウェブサイトから自動的にデータを抽出することです。
普通はPythonとか特別なツールが必要…って思いますよね。
でもExcelの「Power Query」だけでできちゃうんです!
しかも一度設定すれば:
– クリック一つで最新データに更新
– 毎週同じ作業から解放
– ミスもなくなる
最高じゃないですか?✨
まず知っておきたい:Excel標準機能の限界
Excelには「Webから」という機能があります。
簡単にできるパターン
ウェブページにテーブルがあれば、超簡単!
手順:
1. Excel「データ」タブ→「Webから」
2. URL入力
3. テーブル選択
はい、完了!簡単ですよね😊
でも…困るパターン
問題:欲しいデータがテーブルじゃない!
これ、<li>要素(リスト)で作られてるんです。
テーブルじゃない!
「Table 0」が表示されない…😭
Excelに読み込めません。
でも大丈夫!今日はこれを解決する方法を教えます!
今日やること:全体の流れ
リスト要素でも抽出できるように、ページを文字列として読み込んで加工していきます。
5つのステップ:
1. ページを文字列として読み込み
2. リスト要素の開始位置まで削除
3. リスト要素の終了位置まで保存
4. <li>要素を行に分ける
5. 記号で列に分ける
「難しそう…」って思いました?
一つずつやれば大丈夫! 私も最初はそう思ってました😊
ステップ1:文字列として読み込み
1-1. 基本の読み込み
まずは普通に「Webから」で読み込みます。
URL例:https://ytranking.net/trend/?date=2022022010
1-2. Power Queryエディターで編集
重要!「OK」じゃなくて「データの変換」をクリック!
Power Queryの編集画面が開きます✨
最初の掃除:
右側の「ナビゲーション」ステップは不要なので×で削除しましょう。
1-3. 文字列モードに切り替え
ここがポイント!
数式バーを見てください。Web.Pageになってますよね。
これをLines.FromBinaryに書き換えます。
わお! HTMLソースが文字列のリストとして読み込まれました🎉
Why? なんで文字列で読み込むの?
テーブル要素がないページでも、HTML全体を文字列として取得して、
自分で好きな部分を切り出せるようにするためです!
ステップ2:リスト要素の開始位置まで削除
2-1. 欲しいデータの開始位置を探す
読み込まれたHTMLソースをスクロールして、欲しいデータの開始位置を探します。
この例では、151行目に<li id="rank1">がありました!
これが欲しいデータの開始地点です。
2-2. 不要な部分を削除
先頭150行は不要なので削除します。
操作:
「アイテムの削除」→「上位アイテムの削除」
<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と入力。
403行になりました!
3-3. これも柔軟に
開始位置と同じく、文字列で判定するように改善します。
Before:
List.RemoveLastN(削除された最初の項目, 159)
After:
List.RemoveLastN(削除された最初の項目, each _ <> li終了位置)
完璧!これで行数が変わっても大丈夫✨
ステップ4:<li>要素を行に分ける
現在のリストは、HTMLソースの元々の改行で行が分かれています。
でも欲しいのは「<li>ごと」に分かれたデータですよね。
4-1. 全行を一つの文字列に結合
「削除された下の項目」を右クリック→「後にステップの挿入」
数式を編集:
Text.Combine(削除された下の項目)
全部が一つの文字列になりました!
4-2. <liで分割
「カスタム1」を右クリック→「後にステップの挿入」
数式:
Text.Split(カスタム1, "<li")
これで<liで文字列が分割されます!
4-3. 不要な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に✨
更新も簡単!クリック一つ
ここからが本当にすごいところ。
次からは:
「データ」タブ→「すべて更新」
これだけ! 最新データに更新されます🎉
毎週のコピペ地獄から解放です!
トラブルシューティング
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分になりました!」とか聞くと、
めちゃくちゃ嬉しいです🎉













































コメント