電話番号の先頭の0が消えるときの直し方【LibreOfficeで計算して確認】
「03-1234-5678」のつもりで入力した電話番号が、セルを見たら「312345678」になっていた。先頭の0が消えて、桁数も足りない。名簿を扱っていると、よく出会う困りごとです。この記事では、消えた0を式で足し戻す方法と、表示だけ0を見せる書式の違いを、実際に計算して確かめた結果だけで紹介します。
出典: 筆者がLibreOfficeで計算して確認(検証スクリプト: site/verify/phone_leading_zero.py)。外部サイトの説明は参照していません。Excelでは未確認です。お使いの環境で、必ず少数の行で試してから使ってください。
先に結論
- 0が消えたのは、そのセルが数値だからです。数値では先頭の0は意味を持たないので残りません。
- すでに消えた数値には、桁数が9桁か10桁のときだけ「0」を足す式が使えます。
- 固定桁の
TEXT(A2,"0000000000")は、携帯(先頭を除いて10桁)で失敗します。固定桁では固定電話と携帯が混ざった名簿に対応できません。 - 書式で0を見せる方法は、セルの値が数値のままです。他のシステムに値を渡すときは、文字列にしておく方が安全です。
何が起きているか
電話番号は「数値」ではなく「番号」ですが、セルが標準の書式だと、0312345678と入力しても312345678と解釈されます。0を含めて10桁の番号(03-1234-5678など)は9桁に、11桁の番号(090-1234-5678など)は10桁になります。この性質を使って式で戻しますが、番号の桁数の決まりそのものは本記事では確認していません。
手順1: 9桁・10桁の数値に「0」を足す
A2に数値の電話番号が入っているとして、B2に次の式を入れて下へコピーします。
=IF(AND(ISNUMBER(A2),OR(LEN(A2)=9,LEN(A2)=10)),"0"&A2,A2)
「数値で、かつ9桁か10桁なら先頭に0を足す。それ以外はそのまま」という式です。実際に計算した結果は次のとおりです。
| 入力(A2) | 種類 | 結果 |
|---|---|---|
| 312345678 | 数値(9桁) | 0312345678 |
| 9012345678 | 数値(10桁) | 09012345678 |
| 1201234567 | 数値(10桁) | 01201234567 |
| 12345678 | 数値(8桁) | 12345678(そのまま) |
| 0312345678 | 文字列 | 0312345678(そのまま) |
| 03-1234-5678 | 文字列 | 03-1234-5678(そのまま) |
8桁の数値は電話番号として想定外なので、式は触りません。すでに0がある文字列や、ハイフンつきの文字列も変わりませんでした。
手順2: 固定桁のTEXT関数は混在名簿で失敗する
「桁数をそろえるならTEXT関数」と考えがちですが、固定の桁数を指定すると、桁数が違う番号で崩れます。
| 入力 | =TEXT(A2,"0000000000")(10桁) |
=TEXT(A2,"00000000000")(11桁) |
|---|---|---|
| 312345678(固定電話・9桁) | 0312345678(正しい) | 00312345678(0が余計) |
| 9012345678(携帯・10桁) | 9012345678(0が足りない) | 09012345678(正しい) |
どちらの桁数に合わせても、固定電話か携帯のどちらかが誤ります。固定電話と携帯が混ざった名簿では、手順1のように「桁数を見て足す」式の方が安全でした。
手順3: 書式で「見た目だけ」0を見せる
セルの書式を「ユーザー定義」で0000000000にすると、数値のまま、見た目だけ0を足せます。9桁の312345678は、表示(CSVに書き出した結果で確認)が0312345678になりました。値は数値のままで、ISNUMBERもTRUEでした。
ただし、この書式は固定桁です。携帯の9012345678は表示が9012345678のままで、0は足されませんでした(11桁の書式にすると、今度は固定電話に余計な0がつきます)。値は数値のままなので、他のシステムに貼ったり取り込んだりする場面では、見た目の0が引き継がれないことがあります。そのため、番号として扱うデータは、手順1の式で文字列にしておく方が安全です。
注意点: 結果は「文字列」になる
手順1の式は、0を足した行で文字列を返します(ISNUMBERはFALSE)。電話番号は計算に使わないので通常は問題ありませんが、数値として並べ替えたり合計したりしたい場合は、この方法は向きません。
元のデータに戻すとき
式の結果を残したいときは、結果の列をコピーして「値として貼り付け」をしてから、元の列を削除します。元の列を上書きすると、やり直せなくなるので、列を分けておくのが安全です。
注意点: 式で足せない場合
電話番号のそもそもの桁数が違うものや、先頭が0でない番号(海外番号など)は、この式では判断できません。手順1は「9桁か10桁の数値なら先頭が0だったはず」という前提で動くので、前提が当てはまらないデータでは使わないでください。
名簿全体を整えるなら
先頭の0のほか、ハイフン、全角・半角、スペースの混在など、電話番号には直したい表記ゆれが重なりがちです。ハイフンの一括削除は別の記事で、ブラウザだけで試せる電話番号整形ツールも用意しています(入力は外部に送信されません)。
運営者が作った「名簿クレンジングシート」は、こうした整形をまとめて行うExcelのシートです。まず試したい方向けに、50行までの無料お試し版があります。この記事の方法で足りる場合は、使う必要はありません。
まとめ
- 0が消えるのは、セルが数値として扱われているから
- 数値の9桁・10桁なら、
=IF(AND(ISNUMBER(A2),OR(LEN(A2)=9,LEN(A2)=10)),"0"&A2,A2)で足し戻せる - 固定桁のTEXTや書式は、固定電話と携帯が混在すると崩れる
- 書式で見せるだけだと、値は数値のまま
- 元の列は残して、別の列で作業する
式はいずれもLibreOfficeで計算した結果です。Excelでは未確認のため、本番のデータに使う前に、数行で結果を確かめてください。
参考にした情報
- 出典: 筆者がLibreOfficeで計算して確認(検証スクリプト: site/verify/phone_leading_zero.py)