見出し画像

Excel VBAでHTMLタグを一括置換する方法

概要

HTMLタグ内の「指定のキーワード」から「指定のキーワード」までの、文字列を置換します。

Excel VBAを使ってフォルダー内のHTMLファイルから特定のタグを置換する方法を紹介します。具体的なコードの解説と使い方を丁寧に説明し、実際にコードを実行する際に必要なステップをステップバイステップで示します。また、コードの各部分の役割や注意点についても詳しく説明します。

目次

  1. イントロダクション

  2. 前提条件

  3. コードの詳細説明

  4. コードの使い方

  5. まとめ

  6. 参考資料


1. イントロダクション

Excel VBA(Visual Basic for Applications)は、Excelの機能を拡張するための強力なツールです。今回は、VBAを使って特定のフォルダー内にあるすべてのHTMLファイルから指定したタグを見つけて置換する方法について解説します。この方法は、ウェブ開発やHTMLファイルの一括編集に非常に便利です。


2. 前提条件

  • 基本的なExcel VBAの知識があること

  • 置換対象のHTMLファイルが保存されているフォルダーのパス

  • 置換する開始タグと終了タグ

  • 置換後の文字列


3. コードの詳細説明

以下に示すコードは、指定したフォルダー内のHTMLファイルを読み込み、特定の開始タグと終了タグに囲まれた部分を新しい文字列に置換します。

Sub ReplaceHTMLTags()
    Dim folderPath As String
    Dim startString As String
    Dim endString As String
    Dim replaceString As String
    Dim filePath As String
    Dim fileContent As String
    Dim posStart As Long
    Dim posEnd As Long
    Dim htmlFile As Variant
    Dim fileNumber As Integer
    Dim fileBytes() As Byte
    Dim fso As Object
    Dim folder As Object
    Dim subFolder As Object
    Dim file As Object

    ' フォルダーパスと置換する文字列を取得
    folderPath = ThisWorkbook.Sheets(1).Range("C2").Value
    startString = ThisWorkbook.Sheets(1).Range("A1").Value
    endString = ThisWorkbook.Sheets(1).Range("A2").Value
    replaceString = ThisWorkbook.Sheets(1).Range("A4").Value

    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderPath)

    ' メインフォルダーとサブフォルダー内のすべてのHTMLファイルを処理
    ProcessFolder folder, startString, endString, replaceString
    For Each subFolder In folder.SubFolders
        ProcessFolder subFolder, startString, endString, replaceString
    Next subFolder

End Sub

Sub ProcessFolder(folder As Object, startString As String, endString As String, replaceString As String)
    Dim file As Object
    Dim filePath As String
    Dim fileContent As String
    Dim posStart As Long
    Dim posEnd As Long
    Dim fileNumber As Integer
    Dim fileBytes() As Byte

    ' フォルダー内の各HTMLファイルに対して処理を実行
    For Each file In folder.Files
        If Right(file.Name, 5) = ".html" Then
            filePath = file.Path
            fileNumber = FreeFile
            
            ' ファイルをバイナリモードで読み込み
            Open filePath For Binary As fileNumber
            ReDim fileBytes(LOF(fileNumber) - 1)
            Get fileNumber, , fileBytes
            Close fileNumber
            
            ' バイト配列を文字列に変換
            fileContent = StrConv(fileBytes, vbUnicode)
            
            ' 文字列の置換
            posStart = InStr(fileContent, startString)
            Do While posStart > 0
                posEnd = InStr(posStart + Len(startString), fileContent, endString)
                If posEnd > 0 Then
                    fileContent = Left(fileContent, posStart - 1) & startString & replaceString & endString & Mid(fileContent, posEnd + Len(endString))
                    posStart = InStr(posStart + Len(startString) + Len(replaceString) + Len(endString), fileContent, startString)
                Else
                    Exit Do
                End If
            Loop
            
            ' 置き換えた内容をバイト配列に変換
            fileBytes = StrConv(fileContent, vbFromUnicode)
            
            ' 置き換えた内容をファイルに書き戻す
            Open filePath For Binary As fileNumber
            Put fileNumber, , fileBytes
            Close fileNumber
        End If
    Next file
End Sub

コードの詳細解説

  1. フォルダーパスと置換する文字列を取得:

    • folderPath, startString, endString, replaceStringの各変数に、それぞれフォルダーのパスと置換に必要な文字列をExcelシートから取得します。

  2. ファイルシステムオブジェクトの作成:

    • Scripting.FileSystemObjectを使ってフォルダーを取得します。

  3. フォルダー内のHTMLファイルを処理:

    • メインフォルダーおよびサブフォルダー内のすべてのHTMLファイルをProcessFolderサブルーチンで処理します。

  4. ファイルの内容を置換:

    • ProcessFolderサブルーチンでは、各HTMLファイルを読み込み、指定されたタグ間の内容を新しい文字列に置換します。


4. コードの使い方

ステップ1: Excelシートの準備

  1. Excelシートのセルに以下の情報を入力します:

    • A1: 開始タグ(例: <title>)

    • A2: 終了タグ(例: </title>)

    • A4: 置換する文字列(例: 新しいタイトル)

    • C2: フォルダーのパス(例: C:\HTMLFiles)

ステップ2: コードの実行

  1. Alt + F11を押してVBAエディタを開きます。

  2. Insert -> Moduleを選択し、新しいモジュールを作成します。

  3. 上記のコードをモジュールにコピー&ペーストします。

  4. VBAエディタを閉じて、Excelに戻ります。

  5. Alt + F8を押してReplaceHTMLTagsマクロを選択し、実行します。


5. まとめ

このコードを使えば、特定のフォルダー内にあるHTMLファイルの特定のタグを簡単に置換することができます。Excel VBAを活用することで、複数のファイルを一括で編集できるため、作業効率が大幅に向上します。

この記事が気に入ったらサポートをしてみませんか?