VBAでExcel表をマークダウン記法に変換したいときはないでしょうか。
けど、そんな中で悩むことは、
・外部サービスを利用せずにExcel表をマークダウン記法に変換したいがやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
もくじ
マークダウン(Markdown)記法とは
マークダウン(Markdown)記法は、テキストベースの軽量マークアップ言語です。
Web上での文書作成や編集によく使用されており、テキスト形式で書かれた内容がかんたんにHTML(HyperText Markup Language)に変換することができます。
Markdownの主な特徴
Markdownの主な特徴は以下の通りです
シンプルで読みやすい
Markdownは読みやすく書きやすいことを重視しており、平易なテキスト形式で書かれます。
HTMLへの変換
Markdown記述された文書はHTMLに変換することができ、Webサイトでの使用に適しています。
汎用性
ブログ投稿、ドキュメント、フォーラムの投稿など、さまざまな場面で広く使われています。
Markdownでの一般的な記法には、ヘッダー、強調(イタリックや太字)、リスト(番号付きや番号なし)、リンク、画像、引用、コードブロックなどがあります。これらの記法は、特別なツールなしで簡単に書くことができ、プレーンテキストエディターでの編集が可能です。
VBAでExcel表をマークダウン記法に変換する完成イメージ
VBAでExcel表をマークダウン記法に変換する完成イメージについて説明します。
まず、エクセルの1シート目にマークダウンに変換したい表を用意します。
VBAを実装し、起動するボタンを設け、H1セルにマークダウン変換したテキストを出力するようにします。
VBAを実行すると、黄色い背景の箇所にマークダウン変換したテキストが出力されます。
VSCodeなどでマークダウンをプレビューするとHTMLのテーブルに変換できていることがわかります。
それではさっそくやってみましょう。
エクセルに表を用意する
エクセルの1シート目にマークダウンに変換したい表を用意しましょう。
空のボタンを開発タブをクリックし、フォームコントロール>ボタンから挿入し、
H1セルの背景を黄色に変えます。
ボタンを押すと、選択した表データがマークダウン変換され、H1セルにテキストを出力するようにします。
Excel表をマークダウン記法に変換するVBA
Excel表をマークダウン記法に変換するVBAを実装していきましょう。
以下サンプルコードです。
Sub 選択している表をマークダウン形式に変換()
' 変数の宣言
Dim strMdTable As String
Dim ragRow As Range
Dim ragCell As Range
Dim intRowNum As Integer
Dim intColNum As Integer
Dim rowIndex As Integer
' 選択範囲の行数と列数を取得します。
intRowNum = Selection.Rows.Count
intColNum = Selection.Columns.Count
' ヘッダー行を処理します。
For Each ragCell In Selection.Rows(1).Cells
strMdTable = strMdTable & "| " & ragCell.Value & " "
Next ragCell
strMdTable = strMdTable & "|" & vbCrLf
' 区切り行を追加します。
For rowIndex = 1 To intColNum
strMdTable = strMdTable & "|:--"
Next rowIndex
strMdTable = strMdTable & "|" & vbCrLf
' データ行を処理します。
For Each ragRow In Selection.Rows
If ragRow.Row <> Selection.Rows(1).Row Then
For Each ragCell In ragRow.Cells
strMdTable = strMdTable & "| " & ragCell.Value & " "
Next ragCell
strMdTable = strMdTable & "|" & vbCrLf
End If
Next ragRow
' 結果をシートのH1セルに出力します。
Sheets(1).Range("H1") = strMdTable
' 完了のメッセージを表示します。
MsgBox "マークダウン形式のテーブルが1シート目のH1セルにコピーされました。", vbInformation
End Sub
VBAを実装する
「VBAの実装手順」を参考にコードをVBEに実装し、
また、実行に便利なボタンを設け、追加したマクロを登録しましょう。
VBAを実行する
Excel表をマークダウン記法に変換してみましょう。
変換したい表をマウスかキーボードで選択します。
ボタンを押します。
メッセージが表示されたらOKです。
はい!Excel表をマークダウン記法に変換することができましたね!
VSCodeでHTMLに変換されるか試してみましょう。
生成したテキストを拡張子「.md」のファイルに張り付け、VSCodeで開きます。
プレビューを確認すると、HTMLのテーブルに変換されていることがわかりますね!
項目領域とデータ領域もしっかりわかれています!
アレンジとして、表の一部を選択すると、その範囲に絞り込まれた上でマークダウン記法に変換することができます。
VBAの説明
選択範囲の総行数と総列数を取得します。
intRowNum = Selection.Rows.Count
intColNum = Selection.Columns.Count
選択範囲の最初の行(ヘッダー行)の各セルに対してループ処理を行い、その値をマークダウン形式でstrMdTableに追加します。
For Each ragCell In Selection.Rows(1).Cells
strMdTable = strMdTable & "| " & ragCell.Value & " "
Next ragCell
strMdTable = strMdTable & "|" & vbCrLf
区切り行の追加
マークダウンテーブルのフォーマットでは、ヘッダー行の直後に区切り行が必要です。
これは、ヘッダーの下にある各列に対して|:–を追加することで生成されます。
For rowIndex = 1 To intColNum
strMdTable = strMdTable & "|:--"
Next rowIndex
strMdTable = strMdTable & "|" & vbCrLf
データ行の処理
選択範囲の2行目以降(ヘッダー行以外)の各行に対してループ処理を行います。
各行の各セルの値をstrMdTableにマークダウン形式で追加します。
For Each ragRow In Selection.Rows
If ragRow.Row <> Selection.Rows(1).Row Then
For Each ragCell In ragRow.Cells
strMdTable = strMdTable & "| " & ragCell.Value & " "
Next ragCell
strMdTable = strMdTable & "|" & vbCrLf
End If
Next ragRow
処理されたマークダウン形式のテーブルがSheets(1).Range(“H1”)に出力されます。
これは1番目のワークシートのH1セルを指定している意味となります。
もし別のセルにしたい場合はこちらを変更してください。
Sheets(1).Range("H1") = strMdTable
VBAの実装手順
実装手順は以下の通りです。
今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。
さいごに
いかがでしょうか。
今回は、
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す