Excel表とMarkdownテーブルを相互変換する数式
技術ブログの執筆やGitHubのドキュメント作成など、Markdownを利用する機会は増えています。
しかし、表をMarkdown形式で手作業入力するのは意外に手間がかかります。
そこで今回は、Excelの動的配列関数を使い、
- Excelの表 → Markdownテーブル
- Markdownテーブル → Excelの表
これらを数式だけで変換する方法を紹介します。
VBAやPower Queryを使わず、1つのセルに数式を入力するだけで処理できます。
※本記事の数式および解説文章の多くは、生成AI(ChatGPT、Gemini、Claude)を活用して作成しました。数式動作や解説文の最終的な内容は人間による確認・編集を経て掲載しています。
ページ内目次
動作環境と仕様
- 必須環境: Microsoft 365 または Excel 2024
- 行頭・行末にパイプ(|)を置く形式を対象とする
- 2行目をMarkdownテーブルの区切り行とする
- Excelのセル内改行(Alt + Enter)は <br> に変換する
- セル内に含まれるパイプ(|)は \| にエスケープする
なお、Markdownには複数の方言や実装があります。
本記事で扱うパイプ形式のテーブルは、すべてのMarkdown処理系で共通する仕様ではありません。
本記事では、HTMLを利用できるMarkdown処理系を想定しています。
Excel表 → Markdownテーブル

=LET(
d, SUBSTITUTE(SUBSTITUTE(A1:C6, "|", "\|"), CHAR(10), "<br>"),
r, BYROW(d, LAMBDA(x, "| " & TEXTJOIN(" | ", 0, x) & " |")),
TEXTJOIN(CHAR(10), 0, INDEX(r, 1), REPT("| --- ", COLUMNS(d)) & "|", DROP(r, 1))
)数式の解説
- SUBSTITUTEによる特殊文字の処理
SUBSTITUTE(SUBSTITUTE(A1:C6, "|", "\|"), CHAR(10), "<br>")
まず、セル内に含まれるパイプ(|)を \| に変換します。Markdownテーブルではパイプが列の区切りとして使われるため、そのまま出力すると、セル内の文字列まで列の区切りとして解釈されてしまいます。
続いて、Excelのセル内改行である CHAR(10) を <br> に変換します。
これにより、セル内の改行によってMarkdownテーブルの行構造が崩れることを防ぎます。 - BYROWによる行単位の文字列化
BYROW(d, LAMBDA(x, "| " & TEXTJOIN(" | ", 0, x) & " |"))
表の各行に対して TEXTJOIN を適用し、| A | B | C | のようなMarkdownテーブルの1行に変換します。
処理結果は、各行が文字列になった動的配列として r に格納されます。 - REPTによる区切り行の生成
REPT("| --- ", COLUMNS(d)) & "|"
Markdownテーブルでは、ヘッダー行の次に区切り行を置きます。
例えば3列の表であれば、| --- | --- | --- | が生成されます。
COLUMNS(d) を使っているため、元の表の列数に応じて区切り行も自動的に変化します。 - TEXTJOINによる最終結合
TEXTJOIN(CHAR(10), 0, INDEX(r, 1), REPT("| --- ", COLUMNS(d)) & "|", DROP(r, 1))
以下の3つを改行で結合します。- 1行目のヘッダー
- 自動生成した区切り行
- 2行目以降のデータ行
Markdownテーブル → Excel表
例えば、次のMarkdownテーブルがセル E1 に入力されているとします。

=LET(
p, "【PIPE】",
t, SUBSTITUTE(E1, "\|", p),
s, TEXTSPLIT(t, "|", CHAR(10)),
d, VSTACK(TAKE(s, 1), DROP(s, 2)),
x, DROP(DROP(d, , 1), , -1),
TRIM(SUBSTITUTE(SUBSTITUTE(x, p, "|"),"<br>",CHAR(10)))
)数式の解説
- エスケープされたパイプを一時退避
p, "【PIPE】",
t, SUBSTITUTE(E1, "\|", p)
ここが重要です。
Markdownテーブル内のセルに A\|B のようなエスケープされたパイプが含まれている場合、そのまま TEXTSPLIT(E1, "|", CHAR(10)) を実行すると、\| に含まれる | まで列の区切りとして分割されてしまいます。
そのため、分割する前に \| を一時的な文字列である 【PIPE】 へ置き換えます。
これにより、エスケープされたパイプを通常の列区切りと区別できます。 - TEXTSPLITによる2次元配列への分割
TEXTSPLIT(t, "|", CHAR(10))
一時退避した文字列を使って、列区切り:|、行区切り:CHAR(10) としてMarkdownテーブルを2次元配列に分割します。
この時点では、セル内の \| はすでに 【PIPE】 へ退避されているため、誤って列区切りとして分割されません。 - TAKEとDROPによる区切り行の除外
VSTACK(TAKE(s, 1), DROP(s, 2))
今回対象とする定型的なMarkdownテーブルでは、1行目:ヘッダー、2行目:区切り行、3行目以降:データという構造になっています。
そこで、TAKE(s, 1) で1行目のヘッダーを取得し、DROP(s, 2) で先頭2行を削除して3行目以降のデータを取得します。
最後に VSTACK で両者を縦方向に結合します。
区切り行の内容を検索する必要がなく、対象とするテーブルの構造を利用したシンプルな処理です。 - 先頭・末尾の空列を削除
x, DROP(DROP(d, , 1), , -1),
今回対象とするMarkdownテーブルは、| A | B | C | のように、行頭と行末にパイプを置く形式です。
そのため、TEXTSPLIT で分割すると、先頭と末尾に空の列が生じます。
そこで、DROP感は数で先頭の空列と末尾の空列を削除します。 - 一時退避したパイプとセル内改行を復元
SUBSTITUTE(SUBSTITUTE(x, p, "|"),"<br>",CHAR(10))
まず、一時退避していた 【PIPE】 を本来のパイプ(|)へ戻します。
続いて、<br> をExcelのセル内改行である CHAR(10) へ戻します。
最後に TRIM で各セルの前後の余分な半角スペースを削除して完成です。
本数式の対象範囲と留意点
| 列1 | 列2 | 列3 |
| --- | --- | --- |
| A | B | C |
| D | E | F |
また、Excel → Markdown → Excelの往復変換では、基本的な文字列を保持することを目的としています。
そのため、次のようなケースについては対象外(または追加の処理が必要)となります。
- 行頭・行末にパイプがない形式
- 2行目以外に区切り行がある形式
- :--- や :---: などによる列の配置指定
- <br> 以外のHTML改行表記
- 一時退避文字列そのものがデータに含まれる場合
今回の数式では 【PIPE】 を一時退避用の文字列として使用しています。
元データにこの文字列が含まれると \| と区別できなくなるため、実際に運用する際はデータ内に存在しない文字列を選択してください。
- Markdown処理系独自のテーブル仕様
まとめ
今回の数式では、
- BYROW による行単位の処理
- TEXTJOIN による文字列の構築
- TEXTSPLIT による2次元配列への分割
- TAKE と DROP による配列の切り出し
- VSTACK による配列の再結合
これにより、セル内のパイプとMarkdownテーブルの列区切りを区別できます。
今回の数式は、動的配列関数を使った実用的なテキスト処理の例としてだけでなく、そのような設計の考え方を示す例としても活用できるでしょう。
同じテーマ「エクセル関数応用」の記事
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン
「SUMIFSで動くのにXLOOKUPでエラー?」型不一致の関数別挙動
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化
Excel表とMarkdownテーブルを相互変換する数式
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方
「Python in Excel」入門:コードを読むための基礎知識
新着記事NEW ・・・新着記事一覧を見る
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.
