メモとして
記事を書くなんてことは普段しないので、とりあえずメモ帳として使うことにしました。ページ名は自分が検索するであろうワードに合わせてます。
まぁ、自分が使うときでもそうですけど、サンプル探してる時は結論以外大体読んでないです。
Excel→Redmine
とりあえずソース。間違ってたら適当に直します。vbaだけどそれっぽくなるvb.netでシンタックスハイライト?
Sub Excel2Redmine()
' 選択範囲をRedmineの記法に合わせてクリップボードにコピーするマクロ
Dim cell As Range
Dim wiki As String
Dim sepa As String
For Each cell In Selection
' 一番上の行はヘッダ行に見せる
If cell.Row = Selection(1).Row then
sepa = "|_. "
Else
sepa = "|"
End If
wiki = wiki & sepa & cell.Value
' 末列は改行
If cell.Column = Selection.Columns.Count then
wiki = wiki & "|" vbCrLf
End If
Next cell
' クリップボードに格納
Dim clipboard As New DataObject
clipboard.set wiki
clipboard.PutInClipboard
End Sub
こんな感じ。シンプルに装飾なしの表。
色をつけてみる
背景色と文字色くらいは付与したいと思うので適当に書いてみます。
VBAのcolorオブジェクトご存知かもしれないけどRGBの並べ替えが必要。組み込み関数でもできそうだけど、知らないので適当に組んでみます。
Sub ExcelColor2RedmineColor(excelColor)
' 色変換を行う。
Dim a As Long, b As Long, c As Long
Dim num As Long, buf As long
num = 256 * 256 ' なんとなく格納する。
a = excel \ num ' ホントは¥の半角。
buf = excel Mod num ' あまり。
b = buf \ 256
c = buf Mod 256
ExcelColor2RedmineColor = (c * num) + (b * 256) + (a)
End Sub
で、組み合わせる。
Sub Excel2Redmine()
' 選択範囲をRedmineの記法に合わせてクリップボードにコピーするマクロ
Dim cell As Range
Dim wiki As String
Dim sepa As String
Dim deco As String
For Each cell In Selection
' 一番上の行はヘッダ行に見せる
If cell.Row = Selection(1).Row then
sepa = "|_"
Else
sepa = "|"
End If
' 文字装飾をリセット
deco = ""
wiki = wiki & sepa
' 装飾を付与。文字色以外にもいろいろできる。背景色はinteriorを使う。
deco = "color:#" & HEX(ExcelColor2RedmineColor(cell.font.color)) & ";"
deco = "{" & deco & "}"
wiki = wiki & deco & ". " & cell.Value
' 末列は改行
If cell.Column = Selection.Columns.Count then
wiki = wiki & "|" vbCrLf
End If
Next cell
' クリップボードに格納
Dim clipboard As New DataObject
clipboard.set wiki
clipboard.PutInClipboard
End Sub
Sub ExcelColor2RedmineColor(excelColor)
' 色変換を行う。
Dim a As Long, b As Long, c As Long
Dim num As Long, buf As long
num = 256 * 256
a = excel \ num
buf = excel Mod num
b = buf \ 256
c = buf Mod 256
ExcelColor2RedmineColor = (c * num) + (b * 256) + (a)
End Sub
そのまま使うと文字装飾がとんでもない量になるので、基本色(文字なら0
、背景色なら&HFFFFFF
)と同じ場合は文字装飾をつけないなどすると編集画面が見やすくなると思います。
セルの結合は今回は対応してません。時間があったらやるかも。¥と数値+.でできるらしいです。
VBEは比較的簡単にGUIが作れるので、チェックボックスを活用して、フォントを適用するかしないかをGUIから指定できるようにしたりすると便利かもしれないです。
DataObjectはUserFormを一度追加すると参照ライブラリとして登録されますが、デフォルトではおそらく参照ライブラリになっていないと思います。
マクロをリボンに登録
昔はVBAでリボンに関するオブジェクトを呼び出して登録処理を書く必要があったと思います。便利になってよかったネ。
ほげほげ
昔作ったPHPのWiki向けにExcelの表を加工するマクロを思い出しながら書いてみました。
思いつくのはフォント系(ボールド、イタリックなど)を付与位するとかセルを結合するとかですが、他に思いついたら随時メモしてみようと思います。