Excelの数式でダブルクォーテーション(")そのものを文字として表示したいときは、文字列の中で "" と2つ続けて書きます。セルの値を "〜" で囲みたいなら =""""&A1&"""" の形、見やすさ優先なら =CHAR(34)&A1&CHAR(34)、VBAから書くなら " をさらに2倍に増やします。
この記事では、"" 二重化・CHAR(34)・VBA・CSV出力時の自動エスケープという4つの観点を、Excel 2024(Build 19929)で実機検証した結果と図解で整理します。「TEXT関数の書式コード内に " を入れる」「Word から貼り付けた " が一致しない」など、記事冒頭で読者が手を止めがちな罠もまとめて解説します。
- 結論|Excelでは "" で1個のダブルクォーテーションを表す
- なぜExcelでは "" と書くのか — 数式中の " には2つの役割がある
- 基本パターン1|文中でダブルクォーテーションを表示する
- 基本パターン2|セルの値をダブルクォーテーションで囲む
- 基本パターン3|CHAR(34) で読みやすく書く
- TEXT関数で " を含む結果を作るときは「外側で連結」する
- IF関数の ="" は「空文字列」であってエスケープではない
- TEXTJOIN・CONCATで連結時に引用符を挟む
- スマートクォート(“ ”)と半角ダブルクォーテーションを見分ける
- (補助)CSV出力時に "" へ自動エスケープされる
- (補助)VBAで書くときはVBA文字列内の " を2倍に増やす
- よくある間違い+まとめチートシート
結論|Excelでは "" で1個のダブルクォーテーションを表す
Excelの数式では、ダブルクォーテーション(")は文字列の開始と終了を表す予約記号です。「文字としての "」を表示したいときは、2個重ねてエスケープします。代表的な3パターンを先にまとめます。
- 文中で挿入する:
="私は""1995年""生まれです。"→私は"1995年"生まれです。 - セルの値を囲む:
=""""&A1&""""(A1 がexample.comなら結果は"example.com") - CHAR(34) を使う:
=CHAR(34)&A1&CHAR(34)(結果は同じ)
VBAから書くときは、VBA文字列リテラル内の " をさらに2倍にします。CSVに保存するときは、Excelが自動で "" 形式にエスケープします。これら派生ルールも本記事で扱います。
なぜExcelでは "" と書くのか — 数式中の " には2つの役割がある
Excelの数式バーで " を打つと、その記号は2つの異なる役割を持ちます。役割が混ざるため、慣れていないと「" が何個必要なのか」が分からなくなります。
- 役割①:文字列の区切り記号 —
"abc"のように、文字列の始まりと終わりを示す。Excel自身が文字列リテラルを認識するためのメタ記号。 - 役割②:表示する
"そのもの — 文字列の中で""と2個並べると、結果に"が1個出る。
つまり =""""&A1&"""" の左側 """" は「区切り " + 表示用 "" + 区切り "」を1つにまとめた表記です。4個の " を「2+2」ではなく「1+2+1」と数えるのが理解の近道です。
基本パターン1|文中でダブルクォーテーションを表示する
文字列の途中に "〜" を挿入する例です。「私は"1995年"生まれです。」と表示したい場合、次のように書きます。
="私は""1995年""生まれです。"
結果は次のようになります(Excel 2024 Build 19929 で実機確認)。
結果: 私は"1995年"生まれです。
外側の " は文字列の区切り、内側の "" は1個の " として表示されます。1995年の前後で " が2個ずつ並ぶのは、その内側の "" が役割②(表示用)にあたるためです。
基本パターン2|セルの値をダブルクォーテーションで囲む
セル A1 に example.com が入っているとして、その値を "example.com" のように引用符付きで表示するなら次の式です。
=""""&A1&""""
結果: "example.com"
左の """" は「区切り " + 表示用 "" + 区切り "」、右の """" も同じ並び。間に &A1& を挟んで A1 の値を連結しています。
かっこや記号も組み合わせたい場合は、文字列リテラル側で "" を埋め込みます。
="【"""&A1&"""】"
結果は 【"example.com"】 となります。
奇数個の " を片側だけに付ける
「左側だけに "」「右側だけに "」を出したいときは、"""" を片側にだけ書きます。
=""""&A1
=A1&""""
結果はそれぞれ "example.com と example.com" になります。
一方、奇数個の " を式の中に直接書こうとして失敗するパターンがあります。たとえば次の式は構文エラーで動きません(これはコピーして使う式ではなく、失敗例の参考表示です)。
="""""&A1&""""""
これはExcelに com_error(数式の構文エラー)として拒否されます(v1検証 ID L で確認)。" の総数が奇数になると、Excelの構文解析が「閉じていない文字列」として扱うためです。奇数個を出したいときは、文字列の端にだけ """" を付ける方針が安全です。
基本パターン3|CHAR(34) で読みやすく書く
ダブルクォーテーションが多すぎて式が読みにくいときは、CHAR(34) を使う方法もあります。34 はASCIIコードで " の文字コードです。
=CHAR(34)&A1&CHAR(34)
結果は =""""&A1&"""" と同じく "example.com" になります。
"" と CHAR(34) の使い分け基準
| 判断軸 | "" 二重化 | CHAR(34) |
|---|---|---|
| 式の見た目 | 短く書ける | 長くなる |
| 読みやすさ | " の数を数える必要がある | 関数名で意図が伝わる |
| VBAから書くとき | さらに2倍に増えて分かりにくい | VBA側でも CHAR(34) のままで済む |
| CSV保存後の見え方 | CSVは "" 表記なので一致して読みやすい | CSVには結果の " として現れる |
| 処理速度 | 差は無視できる | 差は無視できる |
速度差はほぼないので、「" の数を数えるのが面倒なときは CHAR(34)」くらいの感覚で問題ありません。
TEXT関数で " を含む結果を作るときは「外側で連結」する
「TEXTで日付や数値をフォーマットしながら、結果に " を付けたい」というときに陥りやすい罠があります。書式コード内に "" や \" を入れる方法はExcelでは効きません(Excel 2024 Build 19929 で実機確認)。
NG: 書式コード内で "" を二重化する
次は失敗例の参考表示で、コピーして使う式ではありません。
=TEXT(A2,"""""@""""")
A2 = hello の結果は hello (クォート無し)。期待した "hello" にはなりません。Excelは書式コード内の "" を「文字列リテラル開始/終了」のメタ記号として処理するため、結果には現れないためです。数値書式(0,000、0.00%、yyyy/mm/dd)でも同じく無効でした。
NG: 書式コード内で \" をエスケープする
こちらも失敗例の参考表示です。コピーすると別の不具合が出るので、そのまま貼らないでください。
=TEXT(123,"\""0\""")
結果は ¥0¥ のように壊れます(日本語版 Excel では \ が円記号 ¥ で描画されます)。書式コード内に \" を入れる方法は、書式コード自体のパースが崩れるため期待した "123" にはなりません。日付・数値・パーセントの他書式コードでも、\" 経由は壊れた書式として扱われ、安定して動かないことを実機で確認しました。
OK: 外側で """" を連結する
=""""&TEXT(A2,"@")&""""
結果は "hello"。数値の場合も同じ形で動きます。
=""""&TEXT(123,"0")&""""
結果は "123"。日付・パーセント・カンマ区切りなど、どの書式コードでも外側連結で動作することを5書式 × 3手法(合計15通り)で実機確認しました。
| パターン | 数式 | 結果 |
|---|---|---|
書式コード内 "" 二重化 | =TEXT(A4,"""""yyyy/mm/dd""""") | 2026/05/02(NG・" なし) |
書式コード内 \" | =TEXT(A4,"\""yyyy/mm/dd\""") | 構文エラー |
| 外側連結(正解) | =""""&TEXT(A4,"yyyy/mm/dd")&"""" | "2026/05/02" |
| カンマ書式・外側連結 | =""""&TEXT(A1,"0,000")&"""" | "1,234,567" |
| パーセント書式・外側連結 | =""""&TEXT(A2,"0.00%")&"""" | "15.60%" |
覚え方: TEXTの第2引数(書式コード)は「数値→文字列の整形」だけに使い、" を出したい部分はTEXTの結果を & で外から囲む。これがExcel 2024で確実に動く唯一の正解です。
※ セルの表示形式(書式設定 > ユーザー定義)で ! や "〜" を使う「書式コードのエスケープ」は別の話です。書式設定側でのエスケープ手法は ユーザー定義の表示形式で使用不可記号を表示させるエスケープ処理 を参照してください。
IF関数の ="" は「空文字列」であってエスケープではない
初心者がよく混乱するのが、IF関数の中の "" です。次の式の "" はエスケープではなく、長さ0の空文字列リテラルを表します。
=IF(A1="","空","値あり")
A1 が空のセルなら結果は 空、何か入っていれば 値あり です。ここで使われている "" は「区切り " + 区切り "」であり、間に何の文字も入っていない=空文字列という意味になります。
「"" はいつも " 1個分のエスケープ」と覚えると、IF関数の空判定で混乱します。役割①(区切り)が連続して書かれているだけのケースもある、と覚えておきます。
※ 「セルが空かどうかを判定する」用途には、=ISBLANK(A1) や =IF(A1="",...) 以外に =IF(LEN(A1)=0,...) なども選択肢になります。文字列条件で "〜" を使う判定は、関連記事 ISNUMBER+SEARCH関数で文字列を含むかを判定する完全ガイド も参考になります。
TEXTJOIN・CONCATで連結時に引用符を挟む
スピル時代の連結関数 TEXTJOIN や CONCAT でも、"""" を引数として渡せば文字としての " を出力できます。
=TEXTJOIN(", ",TRUE,""""&A1&"""",""""&A3&"""")A1 = example.com / A3 = world の結果は次のとおりです。
結果: "example.com", "world"
区切り文字(第1引数)の ", "、空セル無視(第2引数 TRUE)、そして第3引数以降に「""""&セル&""""」形式で各値を渡します。
CONCAT版は次のように書けます。
=CONCAT("""",A1,"""")結果は "example.com"。CONCATは引数全体を順番につなげるので、"""" の単独引数を「" 1個」として渡せます。
区切り文字に " 自体を使うパターン(TEXTSPLIT など)は、関連記事 TEXTSPLIT関数でN番目の要素を取り出す5パターン を参照してください。
スマートクォート(“ ”)と半角ダブルクォーテーションを見分ける
「数式は合っているのに =A1=A2 で FALSE になる」「VLOOKUPで一致しない」というケースで盲点になるのが、見た目は同じダブルクォーテーションだけど文字コードが違うパターンです。
3種類の「クォート」
| 表記 | Unicode | 由来 |
|---|---|---|
" (半角) | U+0022 | キーボードの Shift+2 で入力する標準のダブルクォーテーション |
“ ” (スマートクォート) | U+201C / U+201D | Word/PowerPoint/Webサイトが「文章用に見た目を整える」自動置換で生成する弓形の引用符 |
" (全角) | U+FF02 | IMEで「だぶる」変換などから出る全角ダブルクォーテーション |
ExcelのセルにWord文書やWebページから値を貼り付けると、見た目は " でもコード上は “ や " になっていることがあります。これらはすべて別文字として扱われ、=A1=A2 や VLOOKUP、FILTER などで一致判定が崩れます。
判別方法: UNICODE 関数で1文字目のコードを確認する
=UNICODE(LEFT(A1,1))
結果が 34 なら半角 "、8220 または 8221 ならスマートクォート、65282 なら全角 "。実機検証では3種類すべてで =A1=A2 および =EXACT(A1,A2) が FALSE を返すことを確認しました。
修復方法: SUBSTITUTE で半角に揃える
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,UNICHAR(8220),CHAR(34)),UNICHAR(8221),CHAR(34)),UNICHAR(65282),CHAR(34))
このように SUBSTITUTE を3段重ねすると、3種類のクォートをすべて半角 " に統一できます。修復後の値で再度 VLOOKUP や =A1=A2 をかけると、本来期待していた一致判定が通ります。
※ CHAR 関数は 1〜255 のみ受け付ける(256 以上は #VALUE!)ため、検出側はコード値が 256 以上の UNICHAR(8220) や UNICHAR(65282) を使います。置換先(半角)は値が 34 と小さいので CHAR(34) で問題なく扱えます。
Excel自体は半角 " をスマートクォートに自動変換しない
WordやPowerPointには「直線の引用符を弓形(スマートクォート)に置換する」入力オートフォーマットがありますが、Excel 2024には同等の設定がありません。実機でAutoCorrect オブジェクトの全プロパティを列挙した結果、SmartQuotes / ReplaceQuotes / AutoFormatAsYouTypeReplaceQuotes などWord系の置換プロパティはExcel側に存在しないことを確認しました(オートコレクト置換リスト915件中、ダブルクォートを含む項目は I"m → I’m の1件のみで、これはアポストロフィ補正)。
つまりExcelで “ ” が出るのは「貼り付け元のWord/Web側ですでに変換されていた」ケースだけです。Excelのオートコレクトを無効化しても解決しません。対策は「貼り付け時の文字コード確認」「SUBSTITUTE での修復」の2本立てに絞ります。
(補助)CSV出力時に "" へ自動エスケープされる
Excelで " や , を含むセルをCSV UTF-8形式で保存すると、Excelがセルを "〜" で囲み、内部の " を "" に自動エスケープします。これはRFC 4180準拠の標準的な振る舞いです。
| セルの値 | CSV出力上の表記 |
|---|---|
plain | plain(そのまま) |
a,b(カンマ含む) | "a,b" |
a"b(" 含む) | "a""b"(外側 " + 内部 "") |
a改行b(改行含む) | "a改行b"(値内部にLF+全体 "〜") |
実機検証(Excel 2024 Build 19929 でCSV UTF-8保存)で、ファイル先頭に EF BB BF(UTF-8 BOM)が付くことも合わせて確認しています。
CSVを読み込む側のExcel・Python・PowerShellなどは、すべてこの "" 二重化を「" 1個」として復元します。セル内の " を扱うExcel数式の "" と、CSV保存時の "" は別レイヤーですが、結果として同じ「" を "" に倍化する」ルールが両方に現れているため、混同しないように覚えておきます。
(補助)VBAで書くときはVBA文字列内の " を2倍に増やす
VBAコードからセルに数式を代入する場合、VBAの文字列リテラルそのものが " で囲まれているため、Excelの数式に渡したい " をさらに2倍にする必要があります。実機(Excel 2024 Build 19929、Range.Formula および Range.Formula2)で確認した3列対応表が次のとおりです。
| VBAリテラル(コード上の文字列) | Excelに渡る数式(セル側で見える式) | セルの表示結果 |
|---|---|---|
"=""hello""" | ="hello" | hello(クォート無し) |
"=""""hello""""" | ="""hello""" | "hello" |
"=""""&A1&""""" | =""""&A1&"""" | "example.com" |
左列を読むときの数え方: 一番外側の " はVBA文字列の開始/終了。内側の "" は「VBA文字列内で " を1個書く」エスケープ。中央列に変換するには「外側を剥がして、内側の "" を " に置き換える」と考えます。
具体的なVBAコード例:
Sub WrapCellWithQuotes()
' A1 の値を "..." で囲んだ式を B1 にセット
Range("B1").Formula = "=""""&A1&"""""
End SubVBA経由でも Formula(A1参照形式)と Formula2(動的配列対応のA1形式)のどちらでも同じ挙動になることを確認しています。「"" がさらに "" に化ける」と感じたら、左列の " の数を1個ずつ数え直し、最外側を「VBA文字列の境界」と理解するのが解決の近道です。
※ " を多用する数式が読みにくくなるVBAでは、CHAR(34) や VBAの Chr(34) を使う書き方も有効です(例: "=Chr(34)&A1&Chr(34)" ではなく、Excel側で評価される =CHAR(34)&A1&CHAR(34) をVBA文字列で "=CHAR(34)&A1&CHAR(34)" と書く形が読みやすい)。
よくある間違い+まとめチートシート
つまずきやすい7パターン
- ダブルクォーテーションを1個だけ書く。
="abc"を="abcと打つと「閉じていない文字列」エラー。 - 全角
"をうっかり混入。IMEがONのまま打つと半角と区別できないが内部は別文字。 - Word/Webから貼り付けた
“ ”が混じる。=A1=A2やVLOOKUPが一致しない原因。 - IFの空判定
=""を「"1個のエスケープ」と読む。実際は長さ0の空文字列リテラル。 - 奇数個の
"を式の途中に書こうとする。="""""&A1&""""""は構文エラーで動かない。 - 数式バーへ別アプリからコピペすると化ける。テキストエディタで一度貼り付けて確認すると安全。
- TEXT関数の書式コード内に
"を直接入れる。書式コード内の""も\"も結果に"を出力しない。外側で""""&TEXT(...)&""""が正解。
用途別チートシート
| やりたいこと | 推奨の書き方 | 例 |
|---|---|---|
文中に "〜" を入れる | 文字列内で "" を2個並べる | ="私は""1995年""生まれです。" |
セル参照を "〜" で囲む | =""""&A1&"""" または =CHAR(34)&A1&CHAR(34) | =""""&A1&"""" |
左端だけ・右端だけ " を出す | 片側に """" を1セットだけ書く | =""""&A1 |
複数セルを ", " 区切りで "〜" 付きに | TEXTJOIN + """"&セル&"""" | =TEXTJOIN(", ",TRUE,""""&A1&"""",""""&A3&"""") |
TEXT関数の整形結果を "〜" で囲む | 外側で """"&TEXT(...)&"""" | =""""&TEXT(A4,"yyyy/mm/dd")&"""" |
| セルが空か判定 | =IF(A1="","空","値あり") の "" は空文字列 | =IF(A1="","",A1) |
| VBAから式を代入 | 数式上の " を2倍に増やす | Range("B1").Formula = "=""""&A1&""""" |
| CSVに保存して別ツールへ渡す | Excelが自動で "" エスケープするのでセル側はそのまま | セル a"b → CSV "a""b" |
Word/Web貼り付けの “ ” を直す | SUBSTITUTE で UNICHAR(8220) UNICHAR(8221) UNICHAR(65282) をすべて CHAR(34) に置換 | 本文 H2 「スマートクォートと半角ダブルクォーテーションを見分ける」参照 |
Excelのダブルクォーテーションは「役割①区切り」「役割②表示用」の2つを "" でまとめて表すのが基本ルールです。あとは CHAR(34) ・ TEXT関数の外側連結・ VBAの2倍化・ 貼り付けクォート修復、という派生パターンを必要に応じて思い出せば、ほとんどの場面に対応できます。
関連: 表示形式(書式設定)の中で記号をエスケープしたい場合は ユーザー定義の表示形式で使用不可記号を表示させるエスケープ処理、文字列の含有判定で " を扱うときは ISNUMBER+SEARCH関数 完全ガイド を参照してください。






コメント