Excel自体にWebページとしてHTMLファイルを出力する機能はついておりますが、ただの表が入ったHTMLとしての保存という感じのため自由度が低くなります。
今回はExcelのシートの内容から自分の作りたいスタイルのWebページを生成する方法を紹介します。この方法を用いれば、製品スペックの表から製品毎のWebページを生成するなんてことができます。
手動でページ毎にHTMLファイルを作成する必要がなくなるため、Webページ作成の効率がよくなります。
基本はテキストファイルへの出力と同様です。
エクセルで表の作成
まずHTMLページに含める情報の表を作成します。今回は以下のような製品の仕様表からページを生成することにします。
生成するHTMLページのデザイン
HTMLページのデザインはこのようにしたいと思います。

品名、型番などそれぞれを製品に合わせて入れていく形になります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>品名 - 型番の仕様</title>
</head>
<body>
<h1>品名 - 型番</h1>
<h2>性能</h2>
この製品の性能は○○です。
<h2>大きさ</h2>
幅:<br>
奥行:<br>
高さ:<br>
<h2>重量</h2>
○○ kg
<h2>価格</h2>
○○円(税込価格○○円)
</body>
</html>VBAのコード
Option Explicit
Sub generateProductSpecDescription()
Dim i As Integer
Dim productName As String
Dim modelName As String
Dim spec As String
Dim width As Long
Dim depth As Long
Dim height As Long
Dim weight As Double
Dim price As Long
'製品はB列から始まるためi=2
i = 2
'製品名が存在する限りループ
With Worksheets("Sheet1")
Do While .Cells(1, i).Value <> ""
productName = .Cells(1, i).Value
modelName = .Cells(2, i).Value
spec = .Cells(3, i).Value
width = .Cells(4, i).Value
depth = .Cells(5, i).Value
height = .Cells(6, i).Value
weight = .Cells(7, i).Value
price = .Cells(8, i).Value
'htmlファイルへ書き出し
Dim htmlFile As String
'modelNameをファイル名に使用、製品名を小文字に変換
htmlFile = ActiveWorkbook.Path & "\" & LCase(modelName) & ".html"
Open htmlFile For Output As #1
'HTMLに出力
Print #1, "<!DOCTYPE html>"
Print #1, "<html lang=""; ja; "">"
Print #1, "<meta charset=""; UTF - 8; "">"
Print #1, "<title>" & productName & " - " & modelName & "</title>"
Print #1, "</head>"
Print #1, "<body>"
Print #1, "<h1>" & productName & " - " & modelName & "</h1>"
Print #1, "<h2>性能</h2>"
Print #1, "この製品の性能は" & spec & "です。"
Print #1, "<h2>大きさ</h2>"
Print #1, "幅:" & width & "<br>"
Print #1, "奥行:" & depth & "<br>"
Print #1, "高さ:" & height & "<br>"
Print #1, "<h2>重量</h2>"
Print #1, weight & "kg"
Print #1, "<h2>価格</h2>"
'価格に3桁区切りの,を加える
Print #1, Format(price, "#,#") & "円(税込価格 " & Format(price * 1.08, "#,#") & "円)"
Print #1, "</body></html>"
Close #1
i = i + 1
Loop
End With
End Sub
文字列を小文字に変換 LCase
LCase(modelName)で製品名の英文字を小文字に変換しています。これがファイル名になります。
逆に大文字に変換するにはUCase(str)を使用します。
""の中で"を使う
"をエスケープするためには"の前に"をつけます。
そのため "<html lang=""; ja; "">" のような形になってます。
数字に桁区切りのカンマを入れる Format
Format(price, "#,#")を使って3桁目と4桁目の間にカンマを入れています。
このFormat関数は桁区切り以外にも様々な書式の表現に使えます。
Format 関数 (Visual Basic for Applications)
https://msdn.microsoft.com/ja-jp/library/office/gg251755.aspx
