エクセルの表をHTMLのtableタグに変換して出力するVBAマクロ


tables

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルのデータを様々なファイルに書き出しています。

前回はこちらの記事でエクセルシートのデータをCSVに書き出す方法をお伝えしました。

エクセルVBAでエクセルシート上のデータをCSVファイルに書き出す
異なるアプリケーション間でデータを交換する際にはCSV形式がよく使われます。今回は、エクセルVBAでエクセルシートのデータを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

流れとしては

  1. 出力するテキストファイル「data.csv」をオープン
  2. エクセルシートの終わりまで一行ずつ繰り返し
    1. その行の終わりの列まで1セルずつ繰り返し
      • テキストファイルに該当セルの内容とカンマを出力
    2. 改行コードを出力
  3. ファイルをクローズ

という流れです。

エクセルの表を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というファイルが生成されます。これをテキストエディタで開いてみます。

エクセルVBAで出力したHTML形式のテーブル

あまり細かく見ると目が疲れそうですが、無事に出力されてそうです。

このファイルをブラウザにドラッグしてみますと

テーブルをブラウザで閲覧

無事にテーブルとして表示されているようですね。

ちょっとわかりづらいので、テーブルに枠線を追加してみましょう。

14行目を以下のように変更をしてみます。

Print #1, "<table border=""1"">"

これでブラウザを更新してみますと

テーブルに枠線を付与

枠線がつきましたね。

table用のCSSがちゃんと整えられているサイトの一部にコピペをするのであれば、余計なスタイルはつけなくても良いと思いますが、このあたりは適宜ですね。

まとめ

以上、エクセルの表をHTML形式のテーブルとして変換して出力するVBAプログラムについて紹介をしました。

ブログの記事内でちょっとしたテーブルを使い時などに便利に使えるツールになると思います。

ぜひご活用下さいね!

次回はこの表にセルの結合が含まれてしまっている場合でも対応できるようにしていきたいと思います。

エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法
エクセルVBAでセルが結合されているかどうか、またその結合されているセルの数を判定する方法を紹介します。また結合セルがある場合のエクセル表をHTML形式に出力するプログラムも合わせて紹介します。

どうぞお楽しみに!

連載目次:エクセルVBAでCSVや様々なテキストファイルを出力する

多くの企業では様々なデータをエクセル形式で保持しています。そのデータ群をCSVやHTMLなどで有効利用できたら便利ですよね?このシリーズでは、エクセルデータをテキストをはじめ様々な形式のファイルに出力する方法についてお伝えしています。
  1. エクセルVBAでテキストファイルに書き出す最も簡単なプログラム
  2. エクセルVBAでエクセルシート上のデータをCSVファイルに書き出す
  3. エクセルの表をHTMLのtableタグに変換して出力するVBAマクロ
  4. エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法
  5. エクセルVBAで文字コードUTF-8のCSVファイルを書き出す方法
  6. エクセルVBAでBOM無しのUTF-8でCSVファイルなどを出力する方法

タイトルとURLをコピーしました