Excelの表を「表組するコード」に変換するマクロ
はてなブログにExcel で作成した表を載せたい、と思うことがある。例えば、このような表。
今までは、良く判らないという理由で避けていたが、今日は表の作成に挑戦する。
必要なこと
1.はてなブログに表を作成する方法調べ
調べてみると、「HTMLで表組コードを書く」という作業が必要らしい。このあたり全く経験がなく、先の表現が正しいかどうかも危うい。とにかく、書いてみるとこのようになる。
<table> <tr> <th>品名</th> <th>単価</th> </tr> <tr> <td>りんご</td> <td>100</td> </tr> <tr> <td>みかん</td> <td>200</td> </tr> <tr> <td>ばなな</td> <td>300</td> </tr> </table>
結果は、以下の通り。
品名 | 単価 |
---|---|
りんご | 100 |
みかん | 200 |
ばなな | 300 |
なるほど、こうすれば書けることは分かった。一行ずつ手打ちした。果てしなく面倒くさい。
これでも書けるらしい。
|品名|単価| |りんご|100| |みかん|200| |ばなな|300|
しかし、ヘッダー部分がデータ部分と同じ書式になってしまい、少し物足りない(書式を変える方法はあるようだ)。これも一行ずつ手打ちしたが、Excelで作成してこちらで入力して、二度手間感が否めない。
品名 | 単価 |
りんご | 100 |
みかん | 200 |
ばなな | 300 |
そこで、Excel の表をHTMLコードに変換するマクロを作成してみた。
2.マクロでExcelの表をコードに変換
手順としては、以下の通り。
- コレクションを一つ準備する。
- 表を一行ずつHTMLコードに書き換えて、コレクションに追加。
- コレクションを配列に変換。
- 配列を改行で結合して、クリップボードに貼り付け。
- はてなブログの編集画面でCtrl +V
【標準モジュール】
表を選択して、以下を実行する。
※表の範囲を引数としている。
Sub NoteTable(myRng As Range) Dim col As Collection Set col = New Collection col.Add "<table>" Dim i As Long Dim r As Range For i = 1 To myRng.Rows.Count col.Add vbTab & "<tr>" For Each r In myRng.Rows(i).Cells Select Case i Case 1 col.Add vbTab & vbTab & "<th>" & r & "</th>" Case Else col.Add vbTab & vbTab & "<td>" & r & "</td>" End Select Next col.Add vbTab & "</tr>" Next col.Add "</table>" Dim SQC As SequenceClass Set SQC = New SequenceClass Dim seq As Variant seq = SQC.ToArray(col) Debug.Print Join(seq, vbNewLine) Dim ClipBoad As DataObject Set ClipBoad = New DataObject ClipBoad.SetText Join(seq, vbNewLine) ClipBoad.PutInClipboard End Sub
【クラスモジュール】(SeaquenceClass)
コントロールを配列に変換。以前にも掲載したが再掲する。
Public Function ToArray(col As Collection) As Variant Dim seq As Variant ReDim seq(col.Count - 1) Dim c As Variant Dim i As Long i = 0 For Each c In col seq(i) = c i = i + 1 Next ToArray = seq End Function
結果
簡単に表を作成することが出来た。
品名 | 単価 |
---|---|
りんご | 100 |
みかん | 200 |
ばなな | 300 |
恐らく、もっといい方法もあるのだろう。色々なパターンでのテストも必要だ。
これから模索する。
参考まで。