CtrlとASCII制御コードからExcelの改行を理解する
Ctrl+J、LF、CR、CLEAN、VBA、Power Queryを一つの仕組みで捉える
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
記事要約
Excelの検索・置換画面で Ctrl+Jを入力すると、セル内改行を検索できます。これは、Jに対応するASCII制御コードが10番のLFであり、Excelのセル内改行にも通常LFが使われるためです。
ASCIIの0から31には、印字する文字ではなく、通信や端末の動作を制御するコードが配置されています。英字キーとCtrlを組み合わせる対応は、この制御コード体系と結び付いています。ただし、現代のGUIアプリでは、多くの組み合わせがコピー、保存、検索などのショートカットとして先に処理されます。
本記事では、歴史的なASCIIの表、Excelの CHARと CLEAN、VBAの vbLf・vbCrLf、Power Queryの #(lf)・#(cr)を同じコード値の異なる表現として整理します。
本記事の対象とゴール
この記事は、ExcelやCSVで見えない改行・タブ・制御文字に悩んでいる人、Ctrl+Jで改行を検索できる理由を理解したい人を対象にしています。
ゴールは次のとおりです。
Ctrl+英字とASCII制御コードの対応を説明できる
LF、CR、CRLFの違いを区別できる
Excel、VBA、Power Queryで同じ制御文字を扱える
CLEANで削除してよい文字と残すべき文字を判断できる
1. ASCIIの制御コードとは
ASCIIは7ビット、128個の符号位置を持つ文字コードです。そのうち0から31には、文字を印字するためではなく、通信、端末、プリンターなどを制御するための符号が割り当てられました。
代表例は次のとおりです。
7 BEL 注意を促すベル8 BS Backspace9 HT Horizontal Tab10 LF Line Feed12 FF Form Feed13 CR Carriage Return17 DC1 Device Control 119 DC3 Device Control 327 ESC Escape127のDELは、紙テープ上の誤った文字を消す用途を持つ特殊な符号です。RFC 20は、厳密な意味ではDELを制御文字ではないと注記しています。実務上は0から31と127をまとめて制御コードと呼ぶ資料もありますが、規格上の説明と通称を区別しておくと正確です。
2. なぜCtrl+Aが1、Ctrl+Jが10になるのか
ASCIIでは、大文字Aは16進数 0x41、Jは 0x4Aです。制御コードとの対応は、概念上、下位5ビットを取り出す計算で表せます。
control = character_code AND 0x1FA: 0x41 AND 0x1F = 0x01J: 0x4A AND 0x1F = 0x0AZ: 0x5A AND 0x1F = 0x1Aこの対応により、専用キーを多数用意せず、Ctrlと通常のキーで制御符号を指定できます。
ただし、現在のWindowsアプリが必ずこの計算を実行して文字を入力している、という意味ではありません。OSとアプリケーションはキーイベントを受け取り、割り当てられたショートカットがあればコマンドとして処理します。
3. Ctrl+AからCtrl+Zの対応
英字との対応は次のとおりです。
Ctrl+A 1 SOH Start of HeadingCtrl+B 2 STX Start of TextCtrl+C 3 ETX End of TextCtrl+D 4 EOT End of TransmissionCtrl+E 5 ENQ EnquiryCtrl+F 6 ACK AcknowledgeCtrl+G 7 BEL BellCtrl+H 8 BS BackspaceCtrl+I 9 HT Horizontal TabCtrl+J 10 LF Line FeedCtrl+K 11 VT Vertical TabCtrl+L 12 FF Form FeedCtrl+M 13 CR Carriage ReturnCtrl+N 14 SO Shift OutCtrl+O 15 SI Shift InCtrl+P 16 DLE Data Link EscapeCtrl+Q 17 DC1 Device Control 1Ctrl+R 18 DC2 Device Control 2Ctrl+S 19 DC3 Device Control 3Ctrl+T 20 DC4 Device Control 4Ctrl+U 21 NAK Negative AcknowledgeCtrl+V 22 SYN Synchronous IdleCtrl+W 23 ETB End of Transmission BlockCtrl+X 24 CAN CancelCtrl+Y 25 EM End of MediumCtrl+Z 26 SUB SubstituteUnix系の端末で見かける ^Jや ^Mは、文字としてキャレットと英字が格納されているのではなく、Ctrlとの組み合わせを見える形で表した記法です。
4. 現代のショートカットとは別の層
現在のExcelでは、Ctrl+Cはコピー、Ctrl+Sは保存、Ctrl+Fは検索です。これらの意味は、ASCIIのETX、DC3、ACKとは一致しません。
現代の処理は概ね次の層で考えられます。
キーを押す → OSがキーイベントをアプリへ渡す → アプリがショートカットとして処理する → 処理されなければ入力として扱われる場合がある端末では、Ctrl+Cが値3の割り込み文字、Ctrl+Sと Ctrl+Qがフロー制御として使われる設定があります。一方、GUIアプリのコピーや保存はアプリケーションのコマンドです。同じキー操作でも、入力先と設定によって意味が変わります。
5. LFとCRは元来別の動作
LFとCRは、どちらも改行に関係しますが、元来の役割は別です。
LF: Line Feed コード10、次の行へ送るCR: Carriage Return コード13、行頭へ戻すタイプライターやテレタイプでは、行頭へ戻る動作と、紙を一行送る動作が分かれていました。その名残が現在の改行表現に残っています。
Windows CRLF、13の後に10Unix・Linux・現代macOS LF、10古いMac OS CR、13外部データをExcelへ取り込む場合、セル内にLFだけ、CRだけ、CRLFが混在することがあります。見た目が同じ改行でも、検索や比較では別の文字列です。
6. ExcelでCtrl+Jがセル内改行になる理由
Excelでセル内改行を直接入力する操作は、通常 Alt+Enterです。セル内にはLF、コード10が入ります。
数式では次のように作れます。
="1行目"&CHAR(10)&"2行目"検索・置換画面の検索欄で Ctrl+Jを入力すると、Jに対応する制御コード10、LFが入力され、セル内のLFと一致します。検索欄には通常の文字のように表示されないため、何も入っていないように見えることがあります。
これはExcel専用の「改行検索コマンド」というより、検索欄がLFを検索文字として受け取れるために成立する操作です。
7. Excel関数で調べ、置換する
LFを含むか調べる式は次です。
=ISNUMBER(SEARCH(CHAR(10),A1))LFを見える区切りへ置換します。
=SUBSTITUTE(A1,CHAR(10),"/")CRLFをLFへ統一します。
=SUBSTITUTE(A1,CHAR(13)&CHAR(10),CHAR(10))CRだけが残る可能性もある場合は、データ仕様を確認したうえでCRを削除またはLFへ置換します。順序を決めずに一括削除すると、必要な行区切りまで失うことがあります。
8. CLEANは必要な改行も削除する
CLEANは、7ビットASCIIの最初の32個、値0から31の非印字文字を削除するために設計された関数です。
=CLEAN(A1)この範囲にはHT、LF、CRも含まれるため、タブやセル内改行も削除されます。また、Microsoftの説明では、Unicodeにある追加の非印字文字の一部は CLEANだけでは削除されません。
必要なLFを残す場合は、識別しやすい一時文字列へ退避してから戻す方法があります。
=LET( marker,"<KEEP_LF>", protected,SUBSTITUTE(A1,CHAR(10),marker), SUBSTITUTE(CLEAN(protected),marker,CHAR(10)))元データに一時文字列が含まれないことを確認します。重要なデータでは、削除対象を明示して SUBSTITUTEを重ねる方が安全な場合もあります。
9. VBAでは定数を使う
VBAでは、意味が分かる定数を使えます。
Dim textValue As StringtextValue = "1行目" & vbLf & "2行目"textValue = "1行目" & vbCr & "2行目"textValue = "1行目" & vbCrLf & "2行目"値を調べる場合は、文字列の長さや各文字のコードを確認します。
Dim i As LongFor i = 1 To Len(textValue) Debug.Print i, AscW(Mid$(textValue, i, 1))NextChr$(10)でもLFを作れますが、改行の意図を表すなら vbLfや vbCrLfの方が読みやすくなります。
10. Power Queryではエスケープ表記を使う
Power Query Mでは、非表示文字を次のように表せます。
#(lf)#(cr)#(tab)セル内LFを削除します。
Text.Replace([対象列], "#(lf)", "")CRLFをLFへ統一します。
Text.Replace([対象列], "#(cr)#(lf)", "#(lf)")M言語では #(cr,lf)と #(cr)#(lf)の二つの書き方が同じCRLFを表します。処理対象列がnullを含む場合は、null処理を加えてから Text.Replaceを適用します。
11. 見えない文字を調査する手順
手順1 問題の文字列をコピーして保全する。
手順2 期待する改行仕様がLF、CRLF、CRのどれか確認する。
手順3 LEN、SEARCH、VBAの AscWなどで位置とコードを調べる。
手順4 LF、CR、タブを見える文字へ一時変換する。
手順5 必要な文字と不要な文字を分ける。
手順6 削除ではなく、正規化の規則を決める。
手順7 元データと変換後データを件数・長さ・代表値で比較する。
「見えないからCLEANで全部消す」のではなく、何が入っているかを特定してから変換します。
12. まとめ
Ctrl+JでExcelのセル内改行を検索できる背景には、Jと制御コード10、LFの対応があります。
同じLFは、環境ごとに次のように表されます。
キー操作 Ctrl+JASCII値 10、0x0AExcel関数 CHAR(10)VBA vbLf、Chr$(10)Power Query "#(lf)"表現は違っても、対象となる制御文字は同じです。ただし、現代のショートカット、端末設定、アプリケーションの入力処理は別の層にあるため、Ctrlを押せば常に制御文字が入力されるわけではありません。
制御コードを理解すると、Excelの改行検索だけでなく、CSVの行分割、文字列不一致、Power Queryの変換エラー、VBAの比較不一致を同じ問題として調べられるようになります。
出典メモ
記事素材: ほえほえ作成の ctrl_ascii_control_codes.md。2026-08-01確認。
RFC Editor「RFC 20: ASCII format for Network Interchange」: https://www.rfc-editor.org/rfc/rfc20.html
Microsoft Support「CLEAN function」: https://support.microsoft.com/en-us/office/clean-function-26f3d7c5-475f-4a9c-90e5-4b8ba987ba41
Microsoft Support「CHAR function」: https://support.microsoft.com/en-us/excel/functions/char-function
Microsoft Support「Chr Function」: https://support.microsoft.com/en-us/office/chr-function-94e7d144-8ba7-4082-8519-e5dd1b451b85
Microsoft Learn「M language lexical structure」: https://learn.microsoft.com/en-us/powerquery-m/m-spec-lexical-structure
