■実現したいこ
エクセルのひょうに値が存在しているときのみ、HTML文が可変に出現するようにしたい。
■具体例
以下のテーブルがあるとして、
|レシピ|A:チャーハン|B:チキンライス|C:カレー|
|:--|:--:|--:|
|材料1|米|米|米|
|分量|100g|100g|100g|
|材料2|卵|ケチャップ|カレールー|
|分量|1個|大3|1個|
|材料3|中華だし|鶏肉||
|分量|小1|50g||
|材料4|ネギ|||
|分量|1/4本|||
Aには材料が4つ
Bには材料が3つ
Cには材料が2つ
というように、バラバラである。
しかし、以下のサイトのマクロだと個数の可変性が無いため対応できない。
理想は、
Aのときは材料、分量が4つ出る制御
Bのときは材料、分量が3つ出る制御
Cのときは材料、分量が2つ出る制御
というように可変にしたい。
■参考
Excelの表の内容から自分好みのHTMLページを生成する [VBA]
■参考サイトのテーブル
※値は適当にしました。
|品名|製品A|製品B|製品C|
|:--|:--:|--:|
|型番|SAMPLE1|SAMPLE2|SAMPLE3|
|性能|普通|少し良い|すごく良い|
|幅|10|20|30|
|奥行|100|200|300|
|高さ|1000|2000|3000|
|重量|10|20|30|
|価格|111|222|333|
■参考サイトのコード
VBA
1Option Explicit 2 3Sub generateProductSpecDescription() 4 Dim i As Integer 5 6 Dim productName As String 7 Dim modelName As String 8 Dim spec As String 9 Dim width As Long 10 Dim depth As Long 11 Dim height As Long 12 Dim weight As Double 13 Dim price As Long 14 15 '製品はB列から始まるためi=2 16 i = 2 17 18 '製品名が存在する限りループ 19 With Worksheets("Sheet1") 20 Do While .Cells(1, i).Value <> "" 21 productName = .Cells(1, i).Value 22 modelName = .Cells(2, i).Value 23 spec = .Cells(3, i).Value 24 width = .Cells(4, i).Value 25 depth = .Cells(5, i).Value 26 height = .Cells(6, i).Value 27 weight = .Cells(7, i).Value 28 price = .Cells(8, i).Value 29 30 31 'htmlファイルへ書き出し 32 Dim htmlFile As String 33 34 'modelNameをファイル名に使用、製品名を小文字に変換 35 htmlFile = ActiveWorkbook.Path & "\" & LCase(modelName) & ".html" 36 37 Open htmlFile For Output As #1 38 39 'HTMLに出力 40 Print #1, "<!DOCTYPE html>" 41 Print #1, "<html lang=""; ja; "">" 42 Print #1, "<meta charset=""; UTF - 8; "">" 43 Print #1, "<title>" & productName & " - " & modelName & "</title>" 44 Print #1, "</head>" 45 Print #1, "<body>" 46 Print #1, "<h1>" & productName & " - " & modelName & "</h1>" 47 Print #1, "<h2>性能</h2>" 48 Print #1, "この製品の性能は" & spec & "です。" 49 Print #1, "<h2>大きさ</h2>" 50 Print #1, "幅:" & width & "<br>" 51 Print #1, "奥行:" & depth & "<br>" 52 Print #1, "高さ:" & height & "<br>" 53 Print #1, "<h2>重量</h2>" 54 Print #1, weight & "kg" 55 Print #1, "<h2>価格</h2>" 56 '価格に3桁区切りの,を加える 57 Print #1, Format(price, "#,#") & "円(税込価格 " & Format(price * 1.08, "#,#") & "円)" 58 Print #1, "</body></html>" 59 60 Close #1 61 62 i = i + 1 63 Loop 64 End With 65End Sub 66
お力添えのほどよろしくお願いします。
◆追記(2019/10/25)
実装することができました。
コードは後で記載いたします。
hermit19901127さんのIFを使って存在チェックを行い存在しないならループから抜けるというものにしました。
ものによってカラムがバラつくものは変数で保持することで解決できました。
新たに問題が発生しているため、この事象について分かりますでしょうか?
宜しくお願いいたします。