Home » エクセルマクロ・Excel VBAの使い方 » マクロのサンプル » 301リダイレクト用PHPファイルを作成するExcelマクロ

301リダイレクト用PHPファイルを作成するExcelマクロ

対象:Excel2003, Excel2007, Excel2010, Excel2013

先週末、このサイト・インストラクターのネタ帳のカテゴリーを構成し直しました。

このサイトをMovable Typeで運用し始めて以来、
http://www.relief.jp/itnote/archives/cat_3.php
といった形で、カテゴリーアーカイブを作っていました。
(上記のURLはWord関連記事の一覧のものでした。)

私がMovable Typeを使い始めた頃は、カテゴリーを階層化できなかったこともあって、個別記事と同じフォルダに、「cat_」というプレフィックスを付けたphpファイルをカテゴリーアーカイブにしていたのです。

しかし、最近はさすがにデメリットのほうが大きくなってきたので、先週末に思い切ってカテゴリーを再構成しました。

例えば、Wordのカテゴリーアーカイブは
http://www.relief.jp/itnote/Word/
というURLに変更しました。

その変更作業は、Movable Typeでテンプレートを修正して行えばいいのですが、問題は古いほうのURLへのアクセスをどうするかです。

調べてみると、PHPファイルで個別に301リダイレクトをできることがわかりました。

ですが、インストラクターのネタ帳のカテゴリーは70以上も存在しています。
さすがに70個以上のPHPファイルを手作業で作るのは無謀です。

[スポンサードリンク]

そのためのExcelマクロをVBA(Visual Basic for Applications)で作成しましたので、ご紹介しておきます。

Windows上で何等かのファイル処理をする場合、最近はFileSystemObjectを利用することが多いはずですが、折角Excelマクロにするのだから、FileSystemObjectを使わないレガシーな方法で、今回はマクロを作ってみました。

▼301リダイレクト用PHPファイルを作成するマクロ
Sub ファイルを作成する_301リダイレクト用PHP()
 Const TMPLT = "template_301redirect.txt"
 
 Dim me_path As String
 Dim cat_old As String
 Dim cat_new As String
 Dim buf As String
 Dim i As Long
 Dim msg As String
 
 msg = "アクティブシートを元にして"
 msg = msg & "301リダイレクト用ファイルを作成しますか?"
 If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub

' テンプレートの読み込み
 me_path = ThisWorkbook.Path & "\"
 Open me_path & TMPLT For Input As #1

' アクティブシートの2行目からリストの最後までループ処理
 For i = 2 To Range("A1").End(xlDown).Row
  cat_old = Cells(i, 1).Value '元のカテゴリファイル名
  cat_new = Cells(i, 2).Value '新しいカテゴリーのURL
' 読み込み開始位置をテンプレートの先頭に移動
  Seek #1, 1 
' ファイルを作成
  Open me_path & cat_old For Output As #2
' 文字列を置換しながら書き込み
  Do Until EOF(1)
   Line Input #1, buf
   buf = Replace(buf, "★", cat_new)
   Print #2, buf
  Loop
' 作成したファイルを閉じる
  Close #2
 Next i

' テンプレートを閉じる
 Close #1
End Sub

上記のマクロを実行すると、マクロの書かれているExcelファイルのあるフォルダに、アクティブシートのA列に書かれている名前のテキストファイルが一気に作成されます。

A列には「cat_3.php」という元のカテゴリーアーカイブのPHPファイルの名前、B列には「http://www.relief.jp/itnote/Word/」という新しいカテゴリーアーカイブのURLが入力しておいてください。

元のカテゴリー用PHPファイル新しいカテゴリーのURL
cat_3.phphttp://www.relief.jp/itnote/Word/
cat_4.phphttp://www.relief.jp/itnote/Excel/

↑のような感じで。

元にするテンプレートファイルは、以下のような書式で、Excelファイルと同じフォルダにtemplate_301redirect.txtという名前で作成しておいてください。

<?php
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: ★" );
? >

この「★」の部分をアクティブシートのB列に書かれている文字列に置換しながら、ファイルをどんどん作っていきます。

テンプレートの読み込みを行う、
 me_path = ThisWorkbook.Path & "\"
 Open me_path & TMPLT For Input As #1
ファイルの作成をする、
  Open me_path & cat_old For Output As #2
ファイルに書き込みをする、
  Do Until EOF(1)
   Line Input #1, buf
   buf = Replace(buf, "★", cat_new)
   Print #2, buf
といったあたりの処理は、Excel MVPの大先輩・田中亨さんのサイトの「テキストファイルを操作する」を読んでいただくほうが、理解が早いでしょう。

読み込み開始位置をテンプレートファイルの先頭に移動する
  Seek #1, 1
という部分については、同じく田中さんのサイトの「Seekステートメント」を、是非ご確認ください。

実行確認を
 msg = "アクティブシートを元にして"
 msg = msg & "301リダイレクト用ファイルを作成しますか?"
 If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
と最初にやってはいますが、あとはエラー処理など一切入れていませんので、上記のマクロを実務で利用される場合、しっかりテストをして、必要なエラー処理などを追加して、くれぐれも自己責任でお願いします。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » マクロのサンプル » 301リダイレクト用PHPファイルを作成するExcelマクロ

「マクロのサンプル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.