Excel VBAマクロでHTML Table作成

ブログを書いていて表形式でデータを表示したいとき、Tableタグを使って表を作る。ただ、Tableタグで表を手書きで作るのは面倒。あらかじめExcelで作っておいた表をそのままTableタグできると楽だ。

ということでExcel VBAを使ってTableタグをクリップボードにコピーするマクロを作ってみた。

Sub ExcelToHtmlTable()
    ' Microsoft Forms 2.0 Object Libraryを使用
    ' VBAのエディタで「ツール」→「参照設定...」で [参照] ボタンをクリックし、「FM20.DLL」ファイルを選択する。
    Dim selectRowIndex, selectColumnIndex, selectColumnStart, selectColumnEnd, startRow As Integer
    Dim resultHtml As String
    
    startRow = Selection(1).Row
    selectColumnStart = Selection(1).Column
    selectColumnEnd = Selection(Selection.Count).Column
    
    resultHtml = "<table>" + vbCrLf
    
    For selectRowIndex = Selection(1).Row To Selection(Selection.Count).Row
        If selectRowIndex = startRow Then
            resultHtml = resultHtml + vbTab + "<thead>" + vbCrLf
        Else
            resultHtml = resultHtml + vbTab + "<tbody>" + vbCrLf
        End If
        
        resultHtml = resultHtml + vbTab + vbTab + "<tr>" + vbCrLf
        
        For selectColumnIndex = selectColumnStart To selectColumnEnd
        
            If selectRowIndex = startRow Then
                resultHtml = resultHtml + vbTab + vbTab + vbTab + "<th>" + Cells(selectRowIndex, selectColumnIndex).Text + "</th>" + vbCrLf
            Else
                resultHtml = resultHtml + vbTab + vbTab + vbTab + "<td>" + Cells(selectRowIndex, selectColumnIndex).Text + "</td>" + vbCrLf
            End If
        
        Next selectColumnIndex
        
        resultHtml = resultHtml + vbTab + vbTab + "</tr>" + vbCrLf
        
        If selectRowIndex = startRow Then
            resultHtml = resultHtml + vbTab + "</thead>" + vbCrLf
        End If
    Next selectRowIndex
    
    resultHtml = resultHtml + vbTab + "</tbody>" + vbCrLf + "</table>"
    
    With New MSForms.DataObject
        .SetText resultHtml
        .PutInClipboard
    End With
    
    MsgBox "クリップボードにコピーしました。", vbOKOnly + vbInformation, "テーブルデータ"
End Sub

このブックを保存する場合、ファイルの種類を「Excel マクロ有効ブック(*.xlsm)」にする必要がある。

また、コメントでも書いているがMicrosoft Forms 2.0 Object Libraryを利用するため、参照設定でFM20.DLLを選択しておく必要がある。これがないとクリップボードへの操作が行えないのだ。

クリップボードへの操作が不要であるなら「With New MSForms.DataObject」あたりを改造することで好きなようにできる。テキストファイルに落とすもよし、別シートに張り付けるもよし。

macOSの場合はいいツールがあるのでこれを使うといい。

corecara | Tableタグ変換

AppleScriptで動作するExcelの表をHTMLのTableに変換するツールだ。

カテゴリー: Tips