GASでスプレッドシートに書き出すと電話番号の先頭の0が消える
先に結論
書き出し先の列に setNumberFormat('@') を当ててから書き込みます。
数値で入っている番号は、getDisplayValues で見えている文字のまま取り出します。
元のシートでも0が無い番号は、桁数が一定ならTEXT関数で戻せます。
- 空いたセルの =ISTEXT(元のセル) で、番号が文字かどうかを見る
- 書き出し先シートを作り、コードの名前と列番号を直す
- 実行すると、その列の表示形式を@にしてから書き込む
- 書き出し先シートの中身は毎回消して書き直す
- 書き出し先で0が見えるか確かめる
0付きで表示中の数値"09012345678"
getDisplayValues は、表示された値を文字(String)で返す
※2026年11月時点の公式情報に基づきます。

1元の番号が文字か数値かを見る
ISTEXTがTRUE
- 文字で入っている
- 書式@の列へ書き出す
FALSEで0は見える
- 表示形式で0付きに見せている可能性
- 見えている文字を取り出して書く
FALSEで0も無い
- 元のシートで0が無いとみられる
- TEXT関数で桁をそろえる
0が見えない列は、11桁と決まっていれば、空き列に =TEXT(C2,"00000000000") と入れると0で埋まって11桁になります。桁数が混ざる列は、元の資料から入れ直すのが無難です。
出典: ISTEXT / TEXT / スプレッドシートで数値の表示形式を設定する
2コードを貼って実行する
- 書き出し先のシートを作り、名前をDSTと同じにする
- 「拡張機能」 → 「Apps Script」でコードを貼り、1〜3行目を直して保存
- 関数 exportList を選んで「実行」
- 初回(とサービスを足した時)は承認の画面で許可する
ほかのコードがあれば消さずに「追加」から新しいファイルへ貼ります。同名の定数や関数は避けてください。
const SRC = '名簿'; // ← 元のシート名
const DST = '書き出し'; // ← 書き出し先(SRCと別)
const TEXT_COLS = '3,4'; // ← 0を残す列番号(A=1)をカンマ区切りで
function exportList() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const src = ss.getSheetByName(SRC);
const dst = ss.getSheetByName(DST);
if (!src || !dst || SRC === DST) throw new Error('シート名を確認');
const range = src.getDataRange();
const rows = range.getNumRows();
const width = range.getNumColumns();
const cols = TEXT_COLS.split(',').map(Number).filter(n => n >= 1);
if (cols.some(c => c > width)) throw new Error('列番号を確認');
dst.clearContents();
cols.forEach(c => dst.getRange(1, c, rows, 1).setNumberFormat('@'));
dst.getRange(1, 1, rows, width).setValues(range.getValues());
cols.forEach(c => dst.getRange(1, c, rows, 1)
.setValues(src.getRange(1, c, rows, 1).getDisplayValues()));
}
承認時に「未確認」の警告が出ることもあります。自分で貼ったコード以外は許可しないでください。会社のアカウントでは管理者の設定で許可できないことがあり、その時は管理者に相談します。
書き出し先シートの値は実行のたびに消えます。手で書き足したシートは指定しないでください。誤って消した時は、右上の最終編集アイコンから以前の版を選び、「この版を復元」→「復元」で戻せます(パソコン)。
出典: Class Range / Class Sheet / Google サービスの承認 / Google Workspace のデータにアクセスできるアプリを制御する / ファイルの変更内容を確認する / 日付と数値の形式 / コンテナにバインドされたスクリプト / スクリプト プロジェクト