WordPressで表…テーブルを作るのって面倒だったりしますよね。かといって余計なプラグインもあまり入れたくない…。
そこで、Excelで作った表をHTMLタグとして出力し、それをそのままWordPressに貼り付ければいい感じのテーブルが仕上がるVBAマクロを作りました。
Excelやスプレッドシートで作った表をそのままWordPressに貼り付ける問題点
Excelで作った表をセルごとコピーし、そのままWordPressのビジュアルエディターに貼り付ける方法。
一見、悪くないように見えますが、セルの色が反映されなかったり、セルの幅が自動的に指定されてしまい閲覧者の画面サイズによって表が画面からはみ出したりしてしまいます。
スポンサードサーチ
Excelで作った表をHTMLとして出力する
上記の問題を解決するため、Excelの表をHTMLとしてクリップボードに出力するVBAを作成。
VBAによって出力されたHTMLをWordPressのテキストエディターに貼り付けます。
HTMLを出力するVBA
以下がVBAとなります。
標準モジュールを追加し、全文を貼り付ければ使用できます。
ただその際、参照設定で「Microsoft Forms 2.0 Object Library」を有効にしておく必要があります。
もし有効にする方法が分からなかったり参照設定にない場合は、UserFormを追加してください。UserFormを追加すると自動で「Microsoft Forms 2.0 Object Library」の参照設定が追加されます。
'Microsoft Forms 2.0 Object Libraryの参照設定が必要 '→UserFormを追加すると自動的に参照設定される Option Explicit Public Sub Main() Dim sht As Worksheet Dim tableRange As Range Dim resHtml As String 'テーブルの範囲を取得 Set tableRange = ActiveCell.CurrentRegion 'HTMLを作成 resHtml = ToHTML(tableRange) Call SetClipBoard(resHtml) Call MsgBox("クリップボードに出力完了!", vbOKOnly Or vbInformation, "処理完了") End Sub '指定した範囲のHTMLを作成し返す Private Function ToHTML(rng As Range) As String Dim c As Long, r As Long Dim cCnt As Long, rCnt As Long Dim res As String res = "<table style=""" & SetBorder(rng.Item(1, 1).Borders(xlEdgeTop)) & " border-collapse: collapse; table-layout: fixed; word-break: break-all; word-wrap: break-all; width: 100%;"">" & vbCrLf With rng cCnt = .Columns.Count rCnt = .Rows.Count For r = 1 To rCnt res = res & "<tr>" & vbCrLf For c = 1 To cCnt '罫線をチェックする際の罫線の場所 Dim bdPos As Integer If c = 1 Then bdPos = xlEdgeRight Else bdPos = xlEdgeLeft End If 'セルごとの色を設定、文字の色、文字の太さを設定、罫線を設定、その後値を入れる res = res & "<td style=""background-color: #" & HexEX(.Item(r, c).Interior.Color) & ";" _ & SetFntColor(.Item(r, c)) _ & SetBold(.Item(r, c)) _ & SetBorder(.Item(r, c).Borders(bdPos)) _ & """>" _ & .Item(r, c).Value _ & "</td >" & vbCrLf Next res = res & "</tr>" & vbCrLf Next End With res = res & "</table>" & vbCrLf ToHTML = res End Function '指定した文字列をクリップボードに入れる Private Sub SetClipBoard(str As String) Dim buf As String, buf2 As String, CB As New DataObject buf = str With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する End With End Sub 'HEX関数をちゃんとやる Private Function HexEX(colval As Double) As String Dim hextmp As String hextmp = Right("00000" & Hex(colval), 6) 'HEXではRとBが逆になっているため入れ替える Dim resHex(2) As String resHex(0) = Right(hextmp, 2) resHex(1) = Mid(hextmp, 3, 2) resHex(2) = left(hextmp, 2) Dim i As Integer For i = 0 To 2 If resHex(i) = "" Then resHex(i) = "00" Next HexEX = resHex(0) & resHex(1) & resHex(2) End Function '色が黒以外ならスタイルを入れる Private Function SetFntColor(rng As Range) As String Dim res As String res = "" If Not rng.Font.Color = 0 Then res = "color: #" & HexEX(rng.Font.Color) & ";" End If SetFntColor = res End Function 'ボールドならスタイルを入れる Private Function SetBold(rng As Range) As String Dim res As String res = "" If rng.Font.Bold Then res = "font-weight: bold;" End If SetBold = res End Function '罫線からボーダースタイルを入れる Private Function SetBorder(bd As Border) As String Dim res As String res = "" '罫線が何かしら引かれていたら処理する If Not bd.LineStyle = xlLineStyleNone Then '罫線が実線なら実線を、それ以外なら破線を入れる If bd.LineStyle = xlContinuous Then res = "border: solid " Else res = "border: dashed " End If '太さを設定する Dim bdWeight As String If bd.Weight = xlHairline Then bdWeight = 1 ElseIf bd.Weight = xlThin Then bdWeight = 1 ElseIf bd.Weight = xlMedium Then bdWeight = 2 Else bdWeight = 4 End If res = res & bdWeight & "px " '色を設定する If bd.Color = 0 Then res = res & "#000000;" Else res = res & "#" & HexEX(bd.Color) & ";" End If End If SetBorder = res End Function
スポンサードサーチ
VBAの利用方法
こんな感じでマクロ実行用のボタンを配置をして利用するのが分かりやすくていいかと思います。
マクロを実行するときは、出力したい表のどこか1か所が選択された状態にしておく必要があります。
マクロを実行するとHTMLがクリップボードにコピーされるので、WordPressのテキストエディター側に貼り付ければOKです。
実際のブログ画面上で確認してみると、このようにエクセルからほぼそのまま持ってこれているのが確認できます。
VBAの仕様
このVBAで出力できるものは以下となります。
- 太文字設定
- 文字の色
- セルの色
- 罫線の色
- 罫線の幅
- 罫線の種類(ただし、実線か破線の2種のみ)
まとめ
WordPressのエディターでテーブルを編集するのはエディターのクセもあり、なかなか難しいです…。本当はWordPressのみで完結出来ればいいのですが、そうもいかないのが現状です。
なのでこのVBAもそうですが、外部ツールをうまく利用して少しでも効率よくいきたいですね。