VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

EXCEL表をTableタグ(HTML)に変換する

HTMLで表(Tableタグ)を記述するのは、結構骨の折れる作業です。はてなブログでは視覚的に作表する機能がありませんので、地道にHTMLで記述する(または、はてな記法で記述する)しかありません。
そもそもHTMLエディターにしたって、表作成には特化していないのですから、結構面倒だと思います。(各種計算やオートフィル等の機能がないため)
なので、HTML作成において表(Table)作成の部分だけでもEXCELでやってしまおうというのが今回の記事の趣旨です。

 

まず、下記のマクロをコピペして標準モジュール等に貼り付けして下さい。あと、クリップボードとデータのやり取りを行うのでVBEでMicrosoft Forms 2.0 Object Libraryを参照設定しておいて下さい。(詳細なやり方は記事末尾のリンクからどうぞ)

----------------------

Sub 選択範囲をTableタグに変換しクリップボードに出力()
    'Microsoft Forms 2.0 Object Libraryを参照設定して下さい
    '正方形または長方形のような連続した選択範囲とする
    Dim i As Long
    Dim j As Long
    Dim V As String
    Dim rh As Integer
    Dim ch As Integer
    Dim myLib As New DataObject
   
    rh = MsgBox("選択範囲の上端の行を" & vbCrLf & "見出しにしますか?", vbYesNo)
    ch = MsgBox("選択範囲の左端の列を" & vbCrLf & "見出しにしますか?", vbYesNo)
   
    V = "<table>" & vbCrLf

    For i = Selection.Row To Selection.Rows(Selection.Rows.Count).Row
        For j = Selection.Column To Selection.Columns(Selection.Columns.Count).Column
            If i = Selection.Row And rh = 6 Then '見出し行の処理。データを<th></th>で囲む
                If j = Selection.Column Then    '選択範囲の左端であれば冒頭に<tr>を追加
                    V = V & "<tr>" & vbCrLf & "<th>" & Cells(i, j).Value & "</th>"
                ElseIf j = Selection.Columns(Selection.Columns.Count).Column Then   '選択範囲の右端であれば末尾に</tr>を追加
                    V = V & "<th>" & Cells(i, j).Value & "</th>" & vbCrLf & "</tr>" & vbCrLf
                Else    '左端と右端以外の処理
                    V = V & "<th>" & Cells(i, j).Value & "</th>"
                End If
            Else '見出し行以外の処理。データを<td></td>で囲む
                If j = Selection.Column Then    '選択範囲の左端であれば冒頭に<tr>を追加
                    If ch = 6 Then  '見出し列の処理。データを<th></th>で囲む
                        V = V & "<tr>" & vbCrLf & "<th>" & Cells(i, j).Value & "</th>"
                    Else    '見出し列以外の処理。データを<td></td>で囲む
                        V = V & "<tr>" & vbCrLf & "<td>" & Cells(i, j).Value & "</td>"
                    End If
                ElseIf j = Selection.Columns(Selection.Columns.Count).Column Then   '選択範囲の右端であれば末尾に</tr>を追加
                    V = V & "<td>" & Cells(i, j).Value & "</td>" & vbCrLf & "</tr>" & vbCrLf
                Else    '左端と右端以外の処理
                    V = V & "<td>" & Cells(i, j).Value & "</td>"
                End If
            End If
        Next j
    Next i
   
    V = V & "</table>"
   
    myLib.SetText V  '変数の値をDataObjectに格納する
    myLib.PutInClipboard 'DataObjectのデータをクリップボードに格納する
   
    MsgBox "Tableタグ(HTML)をクリップボードに" & vbCrLf & "出力しました!" & vbCrLf & vbCrLf & _
    "ブログなどでお好みの位置にペースト" & vbCrLf & "して下さい。"
   
End Sub

----------------------

 

マクロを使用する準備が終わったら、Tableタグに変換したい表を選択してマクロを実行します。

f:id:kouten0430:20170923171849j:plain

 

こんな感じでクリップボードにHTMLが出力されるので、試しにはてなブログに貼り付けてみましょう。

f:id:kouten0430:20170923171922j:plain

 

「例えばここにTableを貼り付ける↓」という文字の下に、Tableタグを貼り付けてみます。HTML編集モードに切り替えて、マクロから出力したTableタグをペーストします。

f:id:kouten0430:20170923172156j:plain

f:id:kouten0430:20170923172305j:plain

 

見たまま編集モードに戻すと、このように表が挿入されていることが確認できます。

f:id:kouten0430:20170923172359j:plain

 

見たまま編集モードでは表の大きさを変更(表の四隅をドラッグ)したり、文字色・文字の大きさ等を変更できます。

f:id:kouten0430:20170923172436j:plain

f:id:kouten0430:20170923172516j:plain

 

表の中に画像を挿入することもできます。

f:id:kouten0430:20170923172847j:plain

f:id:kouten0430:20170923172847j:plain

 f:id:kouten0430:20170923172847j:plain

f:id:kouten0430:20170923172847j:plain

f:id:kouten0430:20170923172847j:plain

 f:id:kouten0430:20170923172847j:plain
 f:id:kouten0430:20170923172847j:plain

f:id:kouten0430:20170923172847j:plain

f:id:kouten0430:20170923172847j:plain

 

ちなみにマクロから出力したTableには罫線などの装飾が入っていませんが、ブログ側のスタイルの定義によって罫線等が自動的に入ります。

マクロから出力したTableタグをメモ帳などに貼り付け、拡張子を.htmlで保存したものをブラウザで開くと、プレーンなTableが表示されるのみです。(言い換えればプレーンなTableを提供するマクロだと思って下さいませ)

f:id:kouten0430:20170923173546j:plain

最小限の機能として、見出しの有無のみを選択できるようにはしました。

 

上端の行と左端の列を見出しにした場合はこんな感じ

Test Test Test Test
Test Test Test Test
Test Test Test Test
Test Test Test Test

 

上端の行のみ見出しにした場合はこんな感じ

Test Test Test Test
Test Test Test Test
Test Test Test Test
Test Test Test Test

 

左端の列のみ見出しにした場合はこんな感じ

Test Test Test Test
Test Test Test Test
Test Test Test Test
Test Test Test Test

 

 マクロの標準モジュールへの貼り付け方法はこちら

kouten0430.hatenablog.com

 

参照設定の方法はこちら 

kouten0430.hatenablog.com