CtrlとASCII制御コードからExcelの改行を理解する

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   Backspace
9   HT   Horizontal Tab
10  LF   Line Feed
12  FF   Form Feed
13  CR   Carriage Return
17  DC1  Device Control 1
19  DC3  Device Control 3
27  ESC  Escape

127の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 0x1F
A: 0x41 AND 0x1F = 0x01
J: 0x4A AND 0x1F = 0x0A
Z: 0x5A AND 0x1F = 0x1A

この対応により、専用キーを多数用意せず、Ctrlと通常のキーで制御符号を指定できます。

ただし、現在のWindowsアプリが必ずこの計算を実行して文字を入力している、という意味ではありません。OSとアプリケーションはキーイベントを受け取り、割り当てられたショートカットがあればコマンドとして処理します。

3. Ctrl+AからCtrl+Zの対応

英字との対応は次のとおりです。

Ctrl+A  1   SOH    Start of Heading
Ctrl+B  2   STX    Start of Text
Ctrl+C  3   ETX    End of Text
Ctrl+D  4   EOT    End of Transmission
Ctrl+E  5   ENQ    Enquiry
Ctrl+F  6   ACK    Acknowledge
Ctrl+G  7   BEL    Bell
Ctrl+H  8   BS     Backspace
Ctrl+I  9   HT     Horizontal Tab
Ctrl+J  10  LF     Line Feed
Ctrl+K  11  VT     Vertical Tab
Ctrl+L  12  FF     Form Feed
Ctrl+M  13  CR     Carriage Return
Ctrl+N  14  SO     Shift Out
Ctrl+O  15  SI     Shift In
Ctrl+P  16  DLE    Data Link Escape
Ctrl+Q  17  DC1    Device Control 1
Ctrl+R  18  DC2    Device Control 2
Ctrl+S  19  DC3    Device Control 3
Ctrl+T  20  DC4    Device Control 4
Ctrl+U  21  NAK    Negative Acknowledge
Ctrl+V  22  SYN    Synchronous Idle
Ctrl+W  23  ETB    End of Transmission Block
Ctrl+X  24  CAN    Cancel
Ctrl+Y  25  EM     End of Medium
Ctrl+Z  26  SUB    Substitute

Unix系の端末で見かける ^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の後に10
Unix・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 String
textValue = "1行目" & vbLf & "2行目"
textValue = "1行目" & vbCr & "2行目"
textValue = "1行目" & vbCrLf & "2行目"

値を調べる場合は、文字列の長さや各文字のコードを確認します。

Dim i As Long
For i = 1 To Len(textValue)
    Debug.Print i, AscW(Mid$(textValue, i, 1))
Next

Chr$(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+J
ASCII値      10、0x0A
Excel関数    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