読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング156.5時間目】はてな記法のtableやRedmineのwikiのテーブルをExcelから簡単に作成するVBAを作ってみた

<スポンサーリンク>

はてなで記事を書いていて、テーブル(表)を書きたいことはたくさんあった。でも・・・

|*hoge|*foo|*bar|
|foo|bar|baz|
|fuga|hoge|foo|

みたいなtable記法でいちいち書くのが面倒だ思った。
(参考)http://d.hatena.ne.jp/keyword/table%B5%AD%CB%A1

同じようにRedmineのwikiを書いていても、テーブルを書くのが面倒だった。
(参考)http://redmine.jp/tech_note/textile/

誰もがなじみのある表といえば、Excelだ。
Excelで書いたものをそのままtable表記にできれば楽なのに。。

そう思って、1時間でVBAを作ってみた。
Excelに書いた表をはてな記法で出力するVBAである。
Constで宣言した部分をちょっと変えれば、Redmine用のwiki記法にも簡単に応用可能だ。

まず、用意するExcelシートはこんな感じ。

行、列の始めを表すSTARTと終わりのENDを書いて、あとはマクロを実行するだけ。セルの枠線を見て判断するロジックでもよかったんだけど・・・まぁこっちの方が簡単だった。1時間って決めてたので(言い訳)

VBAはこんな感じ。

Const START_ROW As Integer = 2
Const START_COLUMN As Integer = 1
Const TABLE_MAKE_SHEET As String = "テーブル作成用"
Const OUTPUT_SHEET As String = "はてな表記"
Const OUTPUT_SHEET_ROW As Integer = 1
Const OUTPUT_SHEET_COLUMN As Integer = 1
Const TH_LEFT As String = "|*"
Const TH_RIGHT As String = "|"
Const TR_LEFT As String = "|"
Const TR_RIGHT As String = "|"

Option Explicit

Sub makeHatenaTable()
    Dim startRow As Integer
    Dim endRow As Integer
    Dim startColumn As Integer
    Dim endColumn As Integer
    Dim output As String
    Dim i As Integer
    Dim j As Integer
            
    '始まりの設定
    startRow = START_ROW
    startColumn = START_ROW
    
    'ENDがある行の特定
    i = startRow
    Do While (Cells(i, START_COLUMN).Value <> "END")
        i = i + 1
    Loop
    endRow = i
    
    'ENDがある列の特定
    i = startColumn
    Do While (Cells(START_ROW, i).Value <> "END")
        i = i + 1
    Loop
    endColumn = i
    
    'TABLE HEADERの作成
    Dim header As String
    For i = startColumn To endColumn - 1
        header = header & TH_LEFT
        header = header & Cells(startRow, i).Value
    Next
    header = header & TH_RIGHT & vbNewLine
    output = header
    
    'ROWの値を入れていく
    Dim rowValue As String
    Dim rowValueTmp As String
    For i = startRow + 1 To endRow
        
        rowValueTmp = TR_LEFT & rowValueTmp
        For j = startColumn To endColumn - 1
            rowValueTmp = rowValueTmp & Cells(i, j).Value
            rowValueTmp = rowValueTmp & TR_RIGHT
        Next
        rowValueTmp = rowValueTmp & vbNewLine
        rowValue = rowValue & rowValueTmp
        rowValueTmp = ""
    Next
    
    output = output & rowValue
    ThisWorkbook.Worksheets(OUTPUT_SHEET).Activate
    Cells(OUTPUT_SHEET_ROW, OUTPUT_SHEET_COLUMN).Value = output
    
    
End Sub

実行すると、「はてな表記」シートに、はてな記法に直された値が出力される。

出力された値を記事に貼り付けるとこうなる↓

メソッド 戻り値
getDate() その月の日の値
getDay() その週の曜日を表す値(0が日曜)
getFullYear() 4桁の年の値
getHours() 時の値(0から23まで)
getMilliseconds() ミリ秒の値

一応、はてな表記によるテーブルが作成できた。
やっぱりExcelからはてな記法やwiki記法に変換できた方が便利だと思った。