概要
電話番号の見た目を揃える最短手は、TEXT関数で「ゼロ埋め+ハイフン挿入」の書式を指定することです。まず数字以外(ハイフン・空白・かっこ等)を取り除いて“純粋な数字”にしてから、桁数や先頭の番号帯に応じて書式を切り替えます。日本の番号は10桁(固定電話)と11桁(携帯・PHS)を使い分けるのが基本です。
基本の使い方
書式
=TEXT(値,"書式")
- 値:数値(文字列はVALUEで数値化)
- 書式:ハイフンの位置を含むゼロ埋めパターン(例:”00-0000-0000″)
例
=TEXT(0312345678,"00-0000-0000") // "03-1234-5678"(10桁)
=TEXT(09012345678,"000-0000-0000") // "090-1234-5678"(11桁)
具体例
まずはクリーン化(数字だけにする)
=VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"-","")," ",""),"(",""),")",""))
A2からハイフン・空白・かっこを除去し、数値化します。以後はこの「クリーン化済み数値」を基準に整形します。
10桁なら「00-0000-0000」で整形(固定電話の代表例)
=IF(LEN(B2)=10, TEXT(B2,"00-0000-0000"), "")
0312345678 → 03-1234-5678。2桁市外局番の代表パターンに適合します。
11桁なら「000-0000-0000」で整形(携帯の代表例)
=IF(LEN(B2)=11, TEXT(B2,"000-0000-0000"), "")
09012345678 → 090-1234-5678。
0120(フリーダイヤル)の推奨パターン(10桁)
=IF(AND(LEN(B2)=10, LEFT(B2,4)="0120"), TEXT(B2,"0000-000-000"), "")
0120123456 → 0120-123-456。0120は「4-3-3」で読みやすく整形します。
応用テンプレート
10桁/11桁で自動切り替え
=IF(LEN(B2)=11, TEXT(B2,"000-0000-0000"),
IF(LEN(B2)=10, TEXT(B2,"00-0000-0000"), ""))
桁数に応じて標準パターンを自動適用します。
0120優先+それ以外の10桁・11桁切替
=IF(AND(LEN(B2)=10, LEFT(B2,4)="0120"), TEXT(B2,"0000-000-000"),
IF(LEN(B2)=11, TEXT(B2,"000-0000-0000"),
IF(LEN(B2)=10, TEXT(B2,"00-0000-0000"), "")))
最初に0120を判定し、残りを桁数で振り分けます。
国際表記(+81に変換、先頭の0を落とす)
="+" & 81 & "-" & MID(B2,2,2) & "-" & MID(B2,4,4) & "-" & RIGHT(B2,4)
08012345678 → +81-80-1234-5678。国内携帯(11桁)の例。固定電話は市外局番長が揺れるため、厳密対応は地域辞書が必要です。
入口から出口までひとつの式にまとめる(総合版)
=LET(
raw, A2,
num, VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(raw,"-","")," ",""),"(",""),")","")),
IF(AND(LEN(num)=10, LEFT(num,4)="0120"), TEXT(num,"0000-000-000"),
IF(LEN(num)=11, TEXT(num,"000-0000-0000"),
IF(LEN(num)=10, TEXT(num,"00-0000-0000"), "")))
)
1セルでクリーン化から整形まで完結(Microsoft 365のLET対応環境向け)。
よくあるつまずきと対策
文字列のままではTEXTが正しく働かない
数字文字列は事前にVALUEで数値化してください。クリーン化過程で同時に行うのが最も安全です。
市外局番の桁は地域で異なる
03や06(2桁)、04x/05x(3桁)、市内局番の桁も地域差あり。完全厳密な分割は局番辞書が必要です。一般整形は「00-0000-0000」を採用し、例外(0120など)だけ特別扱いしましょう。
先頭ゼロの保持
数値化すると先頭ゼロは内部的には失われますが、TEXTのゼロ埋めで表示を復元できます。ゼロ埋め書式を必ず指定してください。
記号や空白が混在
SUBSTITUTEで「-」「空白」「(」「)」を除去してから整形します。その他の記号があり得る場合は追加除去してください。
例題
問題1: A2の電話番号から記号や空白を除去し、数値化してB2に表示してください。
解答例:
=VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"-","")," ",""),"(",""),")",""))
問題2: B2が10桁なら「00-0000-0000」形式でC2に表示してください。
解答例:
=IF(LEN(B2)=10, TEXT(B2,"00-0000-0000"), "")
問題3: B2が11桁なら「000-0000-0000」形式でC2に表示してください。
解答例:
=IF(LEN(B2)=11, TEXT(B2,"000-0000-0000"), "")
問題4: B2が0120で始まる10桁なら「0000-000-000」形式でC2に表示してください。
解答例:
=IF(AND(LEN(B2)=10, LEFT(B2,4)="0120"), TEXT(B2,"0000-000-000"), "")
問題5: A2の入力をクリーン化し、桁数や0120に応じてC2に自動整形(10桁・11桁対応)してください。
解答例:
=LET(
raw, A2,
num, VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(raw,"-","")," ",""),"(",""),")","")),
IF(AND(LEN(num)=10, LEFT(num,4)="0120"), TEXT(num,"0000-000-000"),
IF(LEN(num)=11, TEXT(num,"000-0000-0000"),
IF(LEN(num)=10, TEXT(num,"00-0000-0000"), "")))
)
まとめ
電話番号整形は「クリーン化(記号除去+数値化)」→「桁・番号帯で書式切替」の二段構えが鉄則です。TEXTのゼロ埋め書式を使えば、先頭ゼロの問題も自然に解決できます。厳密な市外局番分割は辞書が必要ですが、まずは「10桁=00-0000-0000」「11桁=000-0000-0000」「0120=0000-000-000」を覚え、実務の整形を安定させましょう。
