【Excel VBA】HTMLファイルを作成し、UTF-8で書き出す基本の方法

Excelで管理しているデータを、簡易的なWebページやHTML形式のレポートとして出力したい、という場合があります。VBAを使えば、HTMLタグを文字列として組み立て、.htmlファイルとして保存することが可能です。

この記事では、ADODB.Streamオブジェクトを利用して、文字化けを防ぐための標準的な文字コードである「UTF-8」で、HTMLファイルを作成する基本的な方法を解説します。


目次

完成したVBAコード

まずは、基本的なHTMLファイルを作成するVBAコードです。<html><head><body>といった、HTML文書の骨格となるタグを含んでいます。

Sub CreateSimpleHtmlFile()

    ' 変数を宣言します
    Dim streamObj As Object
    Dim htmlFilePath As String
    
    ' 作成するHTMLファイルのパスを指定
    htmlFilePath = ThisWorkbook.Path & "\MyReport.html"
    
    ' ADODB.Streamオブジェクトを生成
    Set streamObj = CreateObject("ADODB.Stream")
    
    ' --- 1. Streamオブジェクトの設定 ---
    With streamObj
        .Type = 2 ' 2はadTypeText (テキストモード)
        .Charset = "UTF-8" ' 文字コードをUTF-8に設定
        .Open ' ストリームを開く
        
        ' --- 2. HTMLコンテンツの書き込み ---
        .WriteText "<html>" & vbCrLf
        .WriteText "<head>" & vbCrLf
        .WriteText "  <meta charset=""UTF-8"">" & vbCrLf
        .WriteText "  <title>VBAから作成したレポート</title>" & vbCrLf
        .WriteText "</head>" & vbCrLf
        .WriteText "<body>" & vbCrLf
        .WriteText "  <h1>これはVBAで作成した見出しです</h1>" & vbCrLf
        .WriteText "  <p>最初の段落です。</p>" & vbCrLf
        .WriteText "</body>" & vbCrLf
        .WriteText "</html>" & vbCrLf
        
        ' --- 3. ファイルへの保存と後処理 ---
        .SaveToFile htmlFilePath, 2 ' 2はadSaveCreateOverWrite (上書き保存)
        .Close ' ストリームを閉じる
    End With
    
    ' オブジェクトを解放
    Set streamObj = Nothing
    
    MsgBox "HTMLファイルの作成が完了しました。"

End Sub

コードのポイント解説

① ADODB.Streamオブジェクトの利用

HTMLファイルはテキストファイルの一種ですが、Webで正しく表示させるためには文字コードを**「UTF-8」**で保存するのが一般的です。ADODB.Streamオブジェクトを使えば、.Charset = "UTF-8"と指定するだけで、簡単にUTF-8形式のファイルを作成できます。これが、この方法を使う最大のメリットです。

② HTMLコードの組み立てと書き込み (.WriteText)

.WriteText "<h1>これはVBAで作成した見出しです</h1>" & vbCrLf

HTMLファイルの作成は、VBAで<h1><p>といったHTMLタグを文字列として組み立て、.WriteTextメソッドで一行ずつ書き込んでいくだけのシンプルな作業です。vbCrLfを末尾につけることで、出力されるHTMLファイルのソースコードに改行が入り、人間が見ても読みやすくなります。

③ ファイルへの保存と後処理 (.SaveToFile)

.SaveToFileメソッドで、メモリ上のストリームの内容を物理的なファイルに書き出します。第二引数に2 (adSaveCreateOverWrite) を指定すると、同名ファイルが存在した場合に自動で上書き保存してくれます。最後に必ず.Closeでストリームを閉じ、後片付けをします。


応用:ExcelのデータをHTMLの表にする

このテクニックを応用すれば、Excelのセル範囲のデータをHTMLのテーブル(<table>タグ)として出力することも可能です。

Sub ExportRangeToHtmlTable()

    Dim streamObj As Object, sourceRange As Range, rw As Range, cl As Range
    Dim htmlFilePath As String
    
    htmlFilePath = ThisWorkbook.Path & "\DataTable.html"
    Set sourceRange = ThisWorkbook.Worksheets("Sheet1").Range("A1:C5") '表にしたい範囲
    
    Set streamObj = CreateObject("ADODB.Stream")
    
    With streamObj
        .Type = 2
        .Charset = "UTF-8"
        .Open
        
        ' --- HTMLの基本構造 ---
        .WriteText "<html><head><meta charset=""UTF-8""><title>データ表</title></head><body>" & vbCrLf
        .WriteText "<h2>Excelからのデータ</h2>" & vbCrLf
        .WriteText "<table border=""1"" style=""border-collapse: collapse;"">" & vbCrLf
        
        ' --- Excelの範囲をループしてテーブル行を作成 ---
        For Each rw In sourceRange.Rows
            .WriteText "  <tr>" & vbCrLf ' 行の開始タグ
            For Each cl In rw.Cells
                .WriteText "    <td>" & cl.Value & "</td>" & vbCrLf ' セルのタグと値
            Next cl
            .WriteText "  </tr>" & vbCrLf ' 行の終了タグ
        Next rw
        
        ' --- HTMLの終了タグ ---
        .WriteText "</table>" & vbCrLf
        .WriteText "</body></html>" & vbCrLf
        
        .SaveToFile htmlFilePath, 2
        .Close
    End With
    
    Set streamObj = Nothing
    MsgBox "HTMLテーブルの作成が完了しました。"
    
End Sub

このコードは、ExcelのA1:C5範囲をループ処理し、一行ずつ<tr>(テーブルの行)タグを、一セルずつ<td>(テーブルのセル)タグを生成することで、HTMLの表を動的に組み立てています。


まとめ

VBAによるHTMLファイルの作成は、**「HTMLタグを文字列として組み立て、テキストファイルとして書き出す」**という考え方が基本です。

その際、Web標準であるUTF-8で保存するためにADODB.Streamオブジェクトを利用するのが、最も確実で推奨される方法です。Excelのデータをループ処理と組み合わせることで、静的なページだけでなく、データに基づいた動的なHTMLレポートの生成も可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次