みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルのデータを様々なファイルに書き出しています。
前回はこちらの記事でエクセルシートのデータをCSVに書き出す方法をお伝えしました。
テキストファイルであれば同様の方法で書き出しができるので、そろそろHTMLファイルに着手してみたいと思います。
HTMLファイルだって、テキストファイルですからね。
さて、HTMLファイルを作るときにテーブルを構成するの…面倒ですよね?
まずtableタグで全体を挟んで、trタグで行を挟んで、tdタグで各要素を挟んで…って。
そこそこ大きい表だと、すぐにわけわからなくなります。
ということで、今回はエクセルVBAでエクセルシート上の表をHTML形式のテーブルに変換する方法をお伝えしたいと思います。
前回のおさらい
まず前回のCSVファイルへの書き出しについておさらいをしておきます。
プログラムはこちらです。
Sub writeCSV()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim csvFile As String
csvFile = ActiveWorkbook.Path & "\data.csv"
Open csvFile For Output As #1
Dim i, j As Long
i = 1
Do While ws.Cells(i, 1).Value <> ""
j = 1
Do While ws.Cells(i, j + 1).Value <> ""
Print #1, ws.Cells(i, j).Value & ",";
j = j + 1
Loop
Print #1, ws.Cells(i, j).Value & vbCr;
i = i + 1
Loop
Close #1
MsgBox "data.csvに書き出しました"
End Sub
流れとしては
- 出力するテキストファイル「data.csv」をオープン
- エクセルシートの終わりまで一行ずつ繰り返し
- その行の終わりの列まで1セルずつ繰り返し
- テキストファイルに該当セルの内容とカンマを出力
- 改行コードを出力
- その行の終わりの列まで1セルずつ繰り返し
- ファイルをクローズ
という流れです。
エクセルの表をHTML形式のテーブルに変換
HTMLファイルはテキストファイルですので、Open、Close、Printは同様に使用することができます。
ということは、出力する内容だけを変えていけば実現できるということですね。
エクセルの表をHTML形式のテーブルに変換して出力するプログラムはこちらです。
Sub convertHTML()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim htmlFile As String
htmlFile = ActiveWorkbook.Path & "\table.html"
Open htmlFile For Output As #1
Dim i, j As Long
i = 1
Print #1, "<table>"
Do While ws.Cells(i, 1).Value <> ""
Print #1, vbTab & "<tr>";
j = 1
Do While ws.Cells(i, j).Value <> ""
Print #1, "<td>" & ws.Cells(i, j).Value & "</td>";
j = j + 1
Loop
Print #1, "</tr>" & vbCr;
i = i + 1
Loop
Print #1, "</table>"
Close #1
MsgBox htmlFile & "に書き出しました"
End Sub
では以下解説をしていきますね。
表全体をtableタグで挟み込む
まず、HTMLの場合はテーブルを表現する部分をtableタグで挟み込む必要があります。
14行目と33行目でそれを実現しています。
Print #1, "<table>"
'テーブルの内容を書き出す部分
Print #1, "</table>"
行全体をtrタグで挟み込む
次に行全体をtrタグで挟み込みます。
18行目と28行目がその箇所になります。
18行目ではTabのインデントを入れるために定数「vbTab」を、28行目には改行を入れるため定数「vbCr」を入れていますが、これはなくてもHTML文としては問題ありません。ただ、テキストエディタで見たときにインデントや改行があったときに見やすいので入れています。
Print #1, vbTab & "<tr>";
’行の内容を書き出す部分
Print #1, "</tr>" & vbCr;
各要素をtdタグで挟み込む
1つ1つのセルに格納されている各要素はそれぞれtdタグで挟み込みます。
23行目ですね。
Print #1, "<td>" & ws.Cells(i, j).Value & "</td>";
実行結果
たとえばエクセルシートにこのような表が入力されているとします。
これに対して、上記プログラムを実行した結果、table.htmlというファイルが生成されます。これをテキストエディタで開いてみます。
あまり細かく見ると目が疲れそうですが、無事に出力されてそうです。
このファイルをブラウザにドラッグしてみますと
無事にテーブルとして表示されているようですね。
ちょっとわかりづらいので、テーブルに枠線を追加してみましょう。
14行目を以下のように変更をしてみます。
Print #1, "<table border=""1"">"
これでブラウザを更新してみますと
枠線がつきましたね。
table用のCSSがちゃんと整えられているサイトの一部にコピペをするのであれば、余計なスタイルはつけなくても良いと思いますが、このあたりは適宜ですね。
まとめ
以上、エクセルの表をHTML形式のテーブルとして変換して出力するVBAプログラムについて紹介をしました。
ブログの記事内でちょっとしたテーブルを使い時などに便利に使えるツールになると思います。
ぜひご活用下さいね!
次回はこの表にセルの結合が含まれてしまっている場合でも対応できるようにしていきたいと思います。
どうぞお楽しみに!