Article

【Excel】ダブルクォーテーションを文字列で使う完全ガイド|二重化・CHAR(34)・VBA対応

この記事で分かること

Excelの数式でダブルクォーテーションを表示・囲む・結合する方法を、""二重化、CHAR(34)、VBA、CSV出力の例で解説します。

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個重ねてエスケープします。代表的な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&"""" / =CHAR(34)&A1&CHAR(34) / 片側のみ の 4 パターンで結果がどう変わるかを比較

セル参照を "〜" で囲む 4 パターン(Excel 2024 Build 19929 で実機確認)

かっこや記号も組み合わせたい場合は、文字列リテラル側で "" を埋め込みます。

="【"""&A1&"""】"

結果は 【"example.com"】 となります。

奇数個の " を片側だけに付ける

「左側だけに "」「右側だけに "」を出したいときは、"""" を片側にだけ書きます。

=""""&A1
=A1&""""

結果はそれぞれ "example.comexample.com" になります。

一方、奇数個の " を式の中に直接書こうとして失敗するパターンがあります。たとえば次の式は構文エラーで動きません(これはコピーして使う式ではなく、失敗例の参考表示です)。

="""""&A1&""""""

これはExcelに com_error(数式の構文エラー)として拒否されます(v1検証 ID L で確認)。" の総数が奇数になると、Excelの構文解析が「閉じていない文字列」として扱うためです。奇数個を出したいときは、文字列の端にだけ """" を付ける方針が安全です。

基本パターン3|CHAR(34) で読みやすく書く

ダブルクォーテーションが多すぎて式が読みにくいときは、CHAR(34) を使う方法もあります。34 はASCIIコードで " の文字コードです。

=CHAR(34)&A1&CHAR(34)

結果は =""""&A1&"""" と同じく "example.com" になります。

=""""&A1&"""" と =CHAR(34)&A1&CHAR(34) の 2 方式を Excel 2024 で並べて比較した表

"" 二重化と CHAR(34) はどちらも同じ結果になる

""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,0000.00%yyyy/mm/dd)でも同じく無効でした。

NG: 書式コード内で \" をエスケープする

こちらも失敗例の参考表示です。コピーすると別の不具合が出るので、そのまま貼らないでください。

=TEXT(123,"\""0\""")

結果は ¥0¥ のように壊れます(日本語版 Excel では \ が円記号 ¥ で描画されます)。書式コード内に \" を入れる方法は、書式コード自体のパースが崩れるため期待した "123" にはなりません。日付・数値・パーセントの他書式コードでも、\" 経由は壊れた書式として扱われ、安定して動かないことを実機で確認しました。

OK: 外側で """" を連結する

=""""&TEXT(A2,"@")&""""

結果は "hello"。数値の場合も同じ形で動きます。

=""""&TEXT(123,"0")&""""

結果は "123"。日付・パーセント・カンマ区切りなど、どの書式コードでも外側連結で動作することを5書式 × 3手法(合計15通り)で実機確認しました。

TEXT関数の書式コード内に "" や \" を入れた NG 2 例 と、外側で """" を連結する OK 2 例 を Excel 2024 で並べて比較

TEXT 関数の書式コード内エスケープは効かず、外側連結 =""""&TEXT(...)&"""" が唯一の正解

パターン数式結果
書式コード内 "" 二重化=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で連結時に引用符を挟む

スピル時代の連結関数 TEXTJOINCONCAT でも、"""" を引数として渡せば文字としての " を出力できます。

=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=A2FALSE になる」「VLOOKUPで一致しない」というケースで盲点になるのが、見た目は同じダブルクォーテーションだけど文字コードが違うパターンです。

3種類の「クォート」

表記Unicode由来
" (半角)U+0022キーボードの Shift+2 で入力する標準のダブルクォーテーション
(スマートクォート)U+201C / U+201DWord/PowerPoint/Webサイトが「文章用に見た目を整える」自動置換で生成する弓形の引用符
(全角)U+FF02IMEで「だぶる」変換などから出る全角ダブルクォーテーション

ExcelのセルにWord文書やWebページから値を貼り付けると、見た目は " でもコード上は になっていることがあります。これらはすべて別文字として扱われ、=A1=A2VLOOKUPFILTER などで一致判定が崩れます。

判別方法: 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出力上の表記
plainplain(そのまま)
a,b(カンマ含む)"a,b"
a"b" 含む)"a""b"(外側 " + 内部 ""
a改行b(改行含む)"a改行b"(値内部にLF+全体 "〜"
Excel から CSV UTF-8 保存した直後のファイル中身。plain / "a,b" / "a""b" / "a<改行>b" が UTF-8 BOM 付きで CRLF 区切り

CSV UTF-8 保存ファイルの中身。先頭 3 バイト EF BB BF は UTF-8 BOM

実機検証(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 Sub

VBA経由でも 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. ダブルクォーテーションを1個だけ書く="abc"="abc と打つと「閉じていない文字列」エラー。
  2. 全角 をうっかり混入。IMEがONのまま打つと半角と区別できないが内部は別文字。
  3. Word/Webから貼り付けた “ ” が混じる=A1=A2VLOOKUP が一致しない原因。
  4. IFの空判定 ="" を「" 1個のエスケープ」と読む。実際は長さ0の空文字列リテラル。
  5. 奇数個の " を式の途中に書こうとする="""""&A1&"""""" は構文エラーで動かない。
  6. 数式バーへ別アプリからコピペすると化ける。テキストエディタで一度貼り付けて確認すると安全。
  7. TEXT関数の書式コード内に " を直接入れる。書式コード内の ""\" も結果に " を出力しない。外側で """"&TEXT(...)&"""" が正解。

用途別チートシート

Excelダブルクォーテーション 用途別チートシート 9 行 × 3 列。やりたいこと / 推奨の書き方 / 例(数式)

用途別チートシート(迷ったらここを見る)

やりたいこと推奨の書き方
文中に "〜" を入れる文字列内で "" を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貼り付けの “ ” を直すSUBSTITUTEUNICHAR(8220) UNICHAR(8221) UNICHAR(65282) をすべて CHAR(34) に置換本文 H2 「スマートクォートと半角ダブルクォーテーションを見分ける」参照

Excelのダブルクォーテーションは「役割①区切り」「役割②表示用」の2つを "" でまとめて表すのが基本ルールです。あとは CHAR(34) ・ TEXT関数の外側連結・ VBAの2倍化・ 貼り付けクォート修復、という派生パターンを必要に応じて思い出せば、ほとんどの場面に対応できます。

関連: 表示形式(書式設定)の中で記号をエスケープしたい場合は ユーザー定義の表示形式で使用不可記号を表示させるエスケープ処理、文字列の含有判定で " を扱うときは ISNUMBER+SEARCH関数 完全ガイド を参照してください。

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント