■ はじめに
* Excelマクロで簡単にHTML化はできるが 余計なタグやら情報が含まれるので、 独自でHTML化できるようなツールを作ってみる * 以下の関連記事を応用してできる。
Excel マクロ ~ ファイル出力 / UTF-8 ~
https://dk521123.hatenablog.com/entry/2015/07/17/195527
■ サンプル
Sub ボタン1_Click() ' 定数 Const MaxRow As Integer = 5000 Const MaxColumn As Integer = 5000 Dim sheet As Worksheet Set sheet = Worksheets("Sheet1") fileName = "test.html" Dim html As String: html = "" html = html & "<html>" & vbCrLf html = html & "<body>" & vbCrLf ' ***** テーブル作成 ***** html = html & "<table>" & vbCrLf ' ===== テーブルの項目 ===== ' 項目数 Dim itemNumber As Integer: itemNumber = 0 html = html & "<tr>" & vbCrLf ' テーブルの項目 For i = 1 To MaxRow If IsEmpty(sheet.Cells(1, i).Value) = True Then ' 値がない時は処理を中断 Exit For End If html = html & "<th>" html = html & sheet.Cells(1, i).Value html = html & "</th>" & vbCrLf itemNumber = itemNumber + 1 Next html = html & "</tr>" & vbCrLf ' ===== テーブルの内容 ===== For i = 2 To MaxColumn ' ここは、それぞれの仕様で実装する必要がある If IsEmpty(sheet.Cells(i, 1).Value) = True Then ' 初めに値がない時は処理を中断 Exit For End If html = html & "<tr>" & vbCrLf For j = 1 To itemNumber html = html & "<td>" html = html & sheet.Cells(i, j).Value html = html & "</td>" & vbCrLf Next html = html & "</tr>" & vbCrLf Next html = html & "</table>" & vbCrLf html = html & "</body>" & vbCrLf html = html & "</html>" & vbCrLf If SaveFileWithUtf8(html, fileName) = False Then MsgBox "ファイルの作成に失敗しました", vbCritical & vbOKOnly, "エラー" End If End Sub Public Function SaveFileWithUtf8(ByVal inputData As String, ByVal fileName As String) As Boolean On Error GoTo ErrorHandler Dim isSuccessful As Boolean: isSuccessful = False ' 定数 Const AdodbTypeBinary As Integer = 1 Const AdodbTypeText As Integer = 2 Const AdodbSaveCreateOverWrite As Integer = 2 Const FileCharset As String = "UTF-8" ' ADODB.Streamを作成 Dim sourceOfDataStream: Set sourceOfDataStream = CreateObject("ADODB.Stream") ' 最初はテキストモードでUTF-8で書き込む sourceOfDataStream.Type = AdodbTypeText sourceOfDataStream.Charset = FileCharset sourceOfDataStream.Open ' ファイルに書き込み sourceOfDataStream.WriteText (inputData), 1 ' バイナリモードにするためにPositionを0に戻す ' Readするためにはバイナリタイプでないといけない sourceOfDataStream.Position = 0 sourceOfDataStream.Type = AdodbTypeBinary ' Positionを3にしてから読み込むことで最初の3バイトをスキップする ' UTF-8(BOMあり)のBOMをスキップします sourceOfDataStream.Position = 3 Dim binaryOutputData: binaryOutputData = sourceOfDataStream.Read() ' 読み込んだバイナリデータをバイナリデータとしてファイルに出力する Dim outputStream: Set outputStream = CreateObject("ADODB.Stream") outputStream.Type = AdodbTypeBinary outputStream.Open outputStream.Write (binaryOutputData) outputStream.SaveToFile fileName, AdodbSaveCreateOverWrite isSuccessful = True GoTo Finally ErrorHandler: MsgBox Err.Number & ":" & Err.Description, vbCritical & vbOKOnly, "エラー" isSuccessful = False Finally: 'ストリームの後始末 If Not outputStream Is Nothing Then outputStream.Close End If If Not sourceOfDataStream Is Nothing Then sourceOfDataStream.Close End If SaveFileWithUtf8 = isSuccessful End Function
入力データ : シート「Sheet1」
id name age 1 mike 23 2 Tom 32
出力結果 : test.html
<html> <body> <table> <tr> <th>id</th> <th>name</th> <th>age</th> </tr> <tr> <td>1</td> <td>mike</td> <td>23</td> </tr> <tr> <td>2</td> <td>Tom</td> <td>32</td> </tr> </table> </body> </html>
関連記事
Excel マクロ ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2015/07/15/104500
Excel マクロ ~ ファイル出力 / UTF-8 ~
https://dk521123.hatenablog.com/entry/2015/07/17/195527