みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルの入力情報をもとに自動で企業サイト向けトップページのHTMLを生成していきます。
- Bootstrapを使ったWordPressによる企業向けサイト
- service,plan,aboutの3つのセクションによるトップページ
という方針で進めております。
前回はこちらの記事。
HTML生成の際の便利関数を作りつつ、serveceとplanまでのセクションを生成できるようになりました。
今回は会社概要をテーブルで組んでいるaboutセクションのHTMLを生成するVBAプログラムを進めていきます。
では、行ってみましょう。
今回のお題:aboutセクションを作る
では今回のお題を確認していきます。
作成するセクションはこちらのaboutセクションです。
企業サイトによくある会社概要の部分ですね。
この部分に該当するHTML文を以下エクセルシートから生成するというものです。
エクセルシートを見る限り、簡単そうに見えますよね?
ですが、ここはテーブルで作られていますので、今までのserviceやplanセクションとは少し作り方が変わっちゃうんですよね。
aboutセクションのHTMLを生成する関数
Worksheetオブジェクトを受け取ってaboutセクションのHTMLを生成する関数はこちらです。
Function createAboutSection(ByVal ws As Object) As String
Dim str As String
str = ""
'section開始タグ
str = addHTML("", 0, "")
'***** セクションタイトルB1,セクション概要B2 *****
str = addHTML(str, 1, "" & ws.Range("B1").Value & "
" & ws.Range("B2").Value & "
")
'**** テーブル *****
'tableの開始タグ
str = addHTML(str, 1, "")
Dim i As Long, j As Long
For i = 5 To 9 '5~9行目まで繰り返し
'trの開始タグ
str = addHTML(str, 2, "")
For j = 1 To 2 '1~2列目まで繰り返し
'tdタグ
str = addHTML(str, 3, "" & ws.Cells(i, j).Value & " ")
Next j
'trの閉じタグ
str = addHTML(str, 2, " ")
Next i
'tableの閉じタグ
str = addHTML(str, 1, "
")
'section閉じタグ
str = addHTML(str, 0, " ") & vbCr
createAboutSection = str
End Function
意外とシンプルにできましたね。
テーブルにする範囲が行方向は5~9行目、列方向は1,2列目(A,B列)ですから、i,jと二つのイテレータを使った入れ子のFor~Next文を使うことでプログラムの行数を減らしています。
HTML形式のテーブルの構造とその作り方について詳しく知りたい方は、こちらの記事もご参考頂ければと思います。
addHTML関数(おさらい)
ちなみに、プログラム内で使っているaddHTML関数は、前回作ったHTML文を追加していくときに便利な関数です。
Function addHTML(ByVal strBase As String, ByVal cntIndent As Long, ByVal strAdd As String) As String
If cntIndent > 0 Then
Dim i As Long
For i = 1 To cntIndent
strBase = strBase & vbTab
Next i
End If
strBase = strBase & strAdd & vbCr
addHTML = strBase
End Function
渡された文字列に指定された数のタブと指定の文字列、改行コードを追加して文字列として返す関数です。
実行結果
プログラムを実行するとイミディエイトウィンドウに
と出力されます。
この出力されたHTML文をWordPressのテキストエディタに貼り付けてプレビューしてみますと
と正しく表示されます。
セル内改行コードVbLfをbrタグに置換する
ただ、正しく表示されているとはいえ
業務内容 ●業務効率化に関するコンサルティングおよびシステム提供 ●研修/セミナーの開催・オンラインスクールの運営 ●電子書籍事業に関するコンサルティングおよび各種業務 ●WEBサイト企画・制作・運営・マーケティング
この部分のHTML文がガタガタしていて気持ち悪いですよね。
WordPressのテキストエディタは頭が良いので、これでもちゃんと表示してくれるのですが、プレーンのHTMLファイルにてブラウザで見てみると
このように改行がうまく反映されません。
HTML文としては、この部分はちゃんとbrタグを挿入しないとですね。
ということで、25行目をこのように修正します。
str = addHTML(str, 3, "" & Replace(ws.Cells(i, j).Value, vbLf, "
") & " ")
Replace文を使ってVbLfコードをbrタグに置換しています。
これで出力をしたHTML文をブラウザで見てみましょう。
無事にbrタグが機能して改行がされていますね。
まとめ
エクセルVBAを使ってエクセルの入力データからHTMLを生成するプログラムですが、今回は会社概要部分のaboutセクションを作成しました。
テーブルのHTML文を自動生成する処理と、VbLfコードをbrタグに置換する部分がポイントでした。
これで一通り完成になりますが、作るWebサイトによっては、全てこの型にはまるとは限りませんよね。
次回以降は、このエクセルシートとVBAプログラムに汎用性を持たせられるようにバージョンアップしていきたいと思います。
どうぞお楽しみに!