業務上の必要があって、ウェブサイトの全URLをサイトマップから自動で拾ってくるExcelマクロを作りました。
このマクロの使い方
対象サイトのサイトマップURLを特定します。
サイトマップのアドレスまで自動では探せませんので、ご自身で特定してください。
例: https://curio-shiki.com/blog/sitemap.xml
マクロを起動します
上記リンクからダウンロードしたzipを解凍し、出てきたマクロ有効Excelファイル (sitemapindex-autoloader-v100.xlsm) を開きます。
開いた際、Excelのセキュリティにより次のようなボタンが出た場合は、「コンテンツの有効化」をクリックしてください。

すると大きなボタンが出ますので、これを押してください。

クリックすると、サイトマップのURLを入れる窓が開きます。

サイトマップのURLを入力し、「取得実行」
ここにサイトマップの実際のURLをフルで入力し、「取得実行」をクリックします。

しばらく待つとサイトマップが取得できます。
クリックすると下記の状態となります。エラーが出ない限りしばらくお待ちください。マクロが自動的にサイトマップインデックスをひとつずつたどって、URLをインポートしていきます。

保存ダイアログが出たら場所と名前をきめて保存します。
きめた名前.xlsxとして保存されます。マクロは保存されず、変換ツールは実行前の状態で保持されますので、開きなおせばまた変換できます。

実行結果
サイトマップインデックス内の各サイトマップが、シートに展開され、それぞれのURLがシート上に読み込まれます。

取得したサイトマップをさらに処理するには?
実際に当店ではこのあと、URLを一覧に加工したり、各URLの<title></title>タグを自動で取得したり、いろんなことをやっています。
公開できる形になりましたら、本記事を更新し機能追加をいたします。
コメント
早速のお返事ありがとうございます。
rintOutメソッドは開始・終了しか指定できないのですね。
知りませんでした。
Sub Numbering()
Dim i As Long
For i = 1 To 10
Range(“A1”).Value = i
‘Worksheets(1).PrintPreview
Columns(“i:p”).Hidden = True
ActiveSheet.PrintPreview
Columns(“i:p”).Hidden = False
Next i
End Sub
とご教授頂いたものを試しましたら
うまくできました。
ありがとうございました。
非表示・再表示とはおもいつきませんでした。
ありがとうございました。
うまく動いたのですね、よかったです!
まもなく、サブスクリプション版のExcelにAIがやってきます。このあたりの制御までAIで補助してくれるのか、楽しみです。
いつもお世話になってます。
マクロについての質問なのですが、
ご教授お願い致します。
エクセルの1シートに3ページあり、
1ページめにナンバリングをしたく
Sub Numbering()
For i = 1 To 200
Range(“A1”).Value = i
Worksheets(1).PrintOut
Next i
End Sub
としたのですが
印刷したいものが
1ページと3ページ目を両面印刷をしたいのですが、
1ページ目と3ページ目を指定して
上記のマクロを実行しても1ページから3ページ目まで印刷されてしまいます。
1ページと3ページだけ両面で印刷したいです。
印刷範囲設定で1ページと3ページを指定して上記マクロを
実行してもうまくいきませんでした。
Sub Test()
For i = 1 To 200
Range(“A1”).Value = i
Worksheets(1).PrintOut
Next i
End Sub
のどこか記述を変更すればいいのか
お教え願いたいです。
どうぞ宜しくお願い致します。
Excelの印刷ダイアログをご覧いただくと分かるのですが、「ページ範囲の設定」として、開始ページと終了ページは指定できます。ところが、とびとびの「1ページと3ページ」は指定できません。
これはVBAのPrintOutメソッドでも同様のようで、開始・終了しか指定できないようです。
そこで、おっしやるような動作をさせるためには、「2ページ目にあたる行を「非表示」にして印刷し、印刷後に再表示する」しかないのかな、と思います。
Rows(“25:50”).Hidden = True
ActiveSheet.PrintOut
Rows(“25:50”).Hidden = False
といった感じですね。おためしください。