[VBA] Excel の表を HTML テーブルに変換します

 今回はサイトやブログを運営している皆さんに、スペシャルな VBA マクロを提供しちゃいますよ。な、な、なんと!

 Excel のテーブル形式データ をそのまま HTML のテーブル に変えてしまうマクロ

なのです! いくつかのバージョンを試作してみましたけれど、その中でも配列による高速処理を徹底したプログラムを紹介します。これで何万行もあるデータも安心して HTML テーブルに変換できます。テーブル形式データであれば何でも構いませんけど、すぐに用意できない人は下の表をコピーして試してみてください(念のために言っておきますが下記住所は実在しません)。

氏名 ふりがな 住所
本出 光見 ほんで こうけん 茨城県ひたちなか市木葉下10-42-5
波羅蜜 共成 はらみつ ともなり 栃木県那須烏山市烏帽子「榛名湖畔」5-32-26
殖木 梓 ふえき あずさ 群馬県北群馬郡圷大野33
黒葛原 綾 つづらはら あや 埼玉県さいたま市緑区姫子5-13-48
中虫壁 優理子 なかむしかべ ゆりこ 千葉県木更津市石名坂5-12-25

 これをシートに貼りつけて、必ず「見出し付」のテーブル形式に変換してください。データをテーブルに変換する方法は 「表をテーブルに変換しましょう」 の記事を参考にしてください。
 

HTML テーブルに変換します

 見出し付 HTML テーブルに変換するマクロです。ワークシートのテーブル内のセルを選択して以下のHTML_Tableマクロを実行すると、今開いているブックと同じフォルダにデータの入ったテキストファイルが作成されます。

'[VBA] Excelの表をHTMLテーブルに変換するマクロ

Option Base 1

Sub HTML_Table()

  Dim i As Long, j As Long
  Dim ctr As Long, ctc As Long
  Dim mydata As Variant
  Dim mystr() As String
  Dim myfno As Integer
  Dim mytxt As String

  '選択されたリストを2次元配列変数に入れます
  mydata = Selection.ListObject.Range

  '行数と列数を取得します
  ctr = UBound(mydata, 1)
  ctc = UBound(mydata, 2)

  '2行目以降のデータを<td>と</td>で囲みます
  For j = 1 To ctc
    For i = 2 To ctr
      mydata(i, j) = "<td>" & mydata(i, j) & "</td>"
    Next i
  Next j

  '見出し部分だけ<th>と</th>で囲みます
  For j = 1 To ctc
    mydata(1, j) = "<th>" & mydata(1, j) & "</th>"
  Next j

  '1列目に<tr>、最終列に</tr>を付けます
  For i = 1 To ctr
    mydata(i, 1) = "<tr>" & mydata(i, 1)
    mydata(i, ctc) = mydata(i, ctc) & "</tr>"
  Next i

  '表全体をtableタグで囲みます
  mydata(1, 1) = "<table>" & mydata(1, 1)
  mydata(ctr, ctc) = mydata(ctr, ctc) & "</table>"

  '配列変数mystrの要素数を決定します
  ReDim mystr(ctr)

  '2次元配列を1次元配列にまとめます
  For j = 1 To ctc
    For i = 1 To ctr
      mystr(i) = mystr(i) & mydata(i, j)
    Next i
  Next j

  'データを保存するファイルの名前を決めます
  mytxt = ActiveWorkbook.Path & "\HTMLTable.txt"

  myfno = FreeFile

  'テキストファイルを開きます
  Open mytxt For Output As #myfno

  'テキストファイルにデータを出力します
  For j = 1 To ctr
    Print #myfno, mystr(j)
  Next j

  'テキストファイルを閉じます
  Close #myfno

End Sub

 実行するとフォルダに "HTMLTable" というファイルが作成されるので開いてみてね。HTML のタグで囲まれたデータがあるはずです。細かいデザインについては CSS で設定している人が大半だと思うので必要最小限のシンプルな形にしてあります。クラス指定などは自分で付け加えてくださいね。別にデザインなんてどうでもいいと思うなら、そのまま貼るだけでシンプルなテーブルが表示されます。

 さすがにちょっと長いマクロなので、全てを説明することはできませんけど、特に難しいことをしているわけでもなく単純な配列操作の繰返しです。 ListObject オブジェクトの扱い方に関しては ≫ データベース研究所 あたりの記事を参考にしてください。もし動作に不具合などがあれば御指摘ください。適宜プログラムを修正します。「もうちょっとこうしてほしい」というご要望があれば、それもコメントでお知らせください。もし可能であればまた別記事でリニューアルバージョンを載せます。


 

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)