Help us understand the problem. What is going on with this article?

Excelの表からRedmineのWiki向けに表を作る

More than 3 years have passed since last update.

メモとして

記事を書くなんてことは普段しないので、とりあえずメモ帳として使うことにしました。ページ名は自分が検索するであろうワードに合わせてます。
まぁ、自分が使うときでもそうですけど、サンプル探してる時は結論以外大体読んでないです。

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の表を加工するマクロを思い出しながら書いてみました。
思いつくのはフォント系(ボールド、イタリックなど)を付与位するとかセルを結合するとかですが、他に思いついたら随時メモしてみようと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした