Excel自体にWebページとしてHTMLファイルを出力する機能はついておりますが、ただの表が入ったHTMLとしての保存という感じのため自由度が低くなります。
今回はExcelのシートの内容から自分の作りたいスタイルのWebページを生成する方法を紹介します。この方法を用いれば、製品スペックの表から製品毎のWebページを生成するなんてことができます。
手動でページ毎にHTMLファイルを作成する必要がなくなるため、Webページ作成の効率がよくなります。
基本はテキストファイルへの出力と同様です。
エクセルで表の作成
まずHTMLページに含める情報の表を作成します。今回は以下のような製品の仕様表からページを生成することにします。
生成するHTMLページのデザイン
HTMLページのデザインはこのようにしたいと思います。
品名、型番などそれぞれを製品に合わせて入れていく形になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!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のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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