
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もそうですが、外部ツールをうまく利用して少しでも効率よくいきたいですね。