エクセルの表をMarkdown形式に変換する


はじめに

エクセルで書いた表をMarkdown形式に変換するVBAマクロを作成しました。
自分用なので細部は変更して使用してください。

使い方

  1. マクロをエクセルに登録
  2. 変換したい表の範囲を選択
  3. マクロを実行
  4. クリップボードにコピーされる

ソース

Option Explicit
' 表をMarkdown形式に変換する

Const COLUM_CENTERLING_STR As String = "---"
Const PIPE_STR As String = "|"
Const INNER_COLUMN_LINE_BREAK = "{{br}}"

Public Sub createMarkdownTable()

 ' 選択範囲を取得
  Dim selectRange As Range
  Set selectRange = ActiveWindow.Selection

  Dim tableState As String
  tableState = getMarkdownTable(selectRange)

  With New DataObject
    .SetText tableState
    .PutInClipboard
  End With

  MsgBox "作成した文字列をクリップボードに出力しました。"
End Sub

Function getMarkdownTable(selectRange As Range) As String

  Dim ret As String

  ' ヘッダ部を読み込み
  ret = readRow(selectRange, 1) & vbCrLf

  ' センタリング設定
  Dim i As Integer
  Dim centerling As String
  centerling = PIPE_STR
  For i = 1 To selectRange.Columns.Count
    centerling = centerling & COLUM_CENTERLING_STR & PIPE_STR
  Next i

  ret = ret & centerling & vbCrLf

  ' ボディ部を読み込み
  For i = 2 To selectRange.rows.Count
    ret = ret & readRow(selectRange, i) & vbCrLf
  Next i

  getMarkdownTable = ret

End Function

Function readRow(selectRange As Range, rowCnt As Integer) As String

  Dim ret As String
  ret = PIPE_STR

  ' 1行読み込む
  Dim i As Integer
  Dim value As String

  For i = 1 To selectRange.Columns.Count

    value = selectRange.Cells(rowCnt, i)

    ' カラム内改行を置換
    value = Replace(value, vbLf, INNER_COLUMN_LINE_BREAK)

    ret = ret & value & PIPE_STR
  Next i

  readRow = ret

End Function