Excel VBA > VBA:実務活用 > Excelの表をHTMLテーブルとして出力する
このエントリーをはてなブックマークに追加

Excelの表をHTMLテーブルとして出力する

表をHTML化する

※こちらのページはマクロを使った表作成について説明しています。
数式だけを使ったExcel表のHTMLについては「数式を使ってExcelの表をHTMLのテーブルにする」をご覧ください

Excelの表をHTMLタグにして、HTMLファイルに貼り付ける的な作業は結構需要があるようなのでプログラムを作ってみました。

下記はブラウザに表示したところです。テーブルHTMLが展開されたものと、HTMLのタグ上のものの2種類が自動で表示されるようにしました。

ちょっと手抜きですが、実際にはセルの色や罫線も一緒に取得し、HTMLの各要素にスタイルを埋め込めば、もっと表らしくできると思います。
以下のマクロは「表を選択している状態からマクロを実行」します。
(結合セルなどは考慮していません)

すると
・選択範囲内の表をHTMLに変換
・変換したタグをHTMLファイルとしてテンポラリに保存
・保存したHTMLをデフォルトブラウザで自動起動して表示

します。やはり手抜きで、Doctypeなど宣言無視していますので、このまま使うのでなく、テーブルのHTMLだけを取得したい等の用途が考えられます。
また最近はutf8が主流だと思いますが、ここで作成するテキストファイルはshift-jisです。従ってブラウザによっては文字化け表示する可能性があるので、その時はブラウザの文字コードの設定をshift-jisにすれば見れると思います。
(分かる人はadoでuft8でテキスト保存し、Headタグも追加すればよいかと思います)

Sub テーブルをHTML化()

    Dim Rng As Range
    Dim strHTML As String

    ‘表が左端の場合、<tr>を入れる用
    Dim strTR As String

    ‘2つ以上の選択をしていないとき
    ‘(本来は離れたセルの選択時もエラーが必要かも)
    If Selection.Count = 1 Then
        MsgBox “表を選択してください” & vbCrLf _
                & “選択するときは連続しているセルを最低2つ以上選択してください”, vbCritical
                Exit Sub
    End If

    ‘表が選択されている場合
    For Each Rng In ActiveSheet.Range(Selection.Address)

        ‘左端かどうかのチェック
        Select Case Selection.Column
            Case Rng.Column
                    strTR = “<tr>”

            Case Else
                    strTR = “”

        End Select

        ‘<td>タグを入れる
        strHTML = strHTML & strTR & “<td>” & Rng.Value

    Next Rng

    ‘表のデータを抜けたら、最後に<table>タグを入れる
    strHTML = “<table>” & vbCrLf & strHTML & “</table>”

    ‘Tableタグとしても表示(展開されない状態で表示)
    Dim strHTML_Tag As String

    ‘「<」、「>」をエスケープ
    strHTML_Tag = VBA.Replace(strHTML, “<“, “&lt;”)
    strHTML_Tag = VBA.Replace(strHTML_Tag, “>”, “&gt;”)

    ‘HTMLタグを見やすいように改行とスペース
    strHTML_Tag = VBA.Replace(strHTML_Tag, “&lt;table&gt;”, “<br>&lt;table&gt;”)
    strHTML_Tag = VBA.Replace(strHTML_Tag, “&lt;/table&gt;”, “<br>&lt;/table&gt;”)
    strHTML_Tag = VBA.Replace(strHTML_Tag, “&lt;tr&gt;”, “<br>&nbsp;&nbsp;&lt;tr&gt;”)
    strHTML_Tag = VBA.Replace(strHTML_Tag, “&lt;td&gt;”, “<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;”)

    strHTML = strHTML & “<hr>” & vbCrLf & strHTML_Tag

    ‘テンポラリフォルダに保存後、ブラウザを開く
    Dim FSO As Object
    Dim strPath As String
    Dim strFileName As String
    Dim n As Long

    Set FSO = CreateObject(“Scripting.FileSystemObject”)

        ‘テンポラリフォルダのパスを取得
        strPath = FSO.GetSpecialFolder(2)

        ‘テンポラリファイル名
        strFileName = FSO.GetTempName

        ‘拡張子追加
        strFileName = strFileName & “.html”

    Set FSO = Nothing

    ‘テーブルHTMLをテキストファイルとして保存
    n = FreeFile
    Open strPath & “\” & strFileName For Output As #n
        Print #n, strHTML
    Close #n

    ‘ファイルを開く
    Shell “EXPLORER.EXE ” & ” ” & strPath & “\” & strFileName

End Sub

上記のマクロの3分の1くらいが、「HTMLタグとしてブラウザに表示」する処理になっています。単純に表(テーブル)の状態でブラウザに表示するという意味では「strHTML_tag」の部分は不要です。
(同時に「&lt;」、「<」の部分をこの記事にペーストするときに非常に混乱しています。エラーがあったら、もしかしたらその辺もあやしいかもです。。)

カテゴリ:VBA:実務活用