GASでスプレッドシートの
表示形式を一括設定する方法
金額のカンマ区切りや円マーク、パーセント、日付の書式を、1セルずつ手で直していませんか。setNumberFormat(セルの表示形式を設定するメソッド)を使えば、値はそのままに見た目だけをコードで一括で整えられます。
Table of Contents
表示形式とは?「値」と「見た目」は別物
スプレッドシートのセルには、「実際の値」と「表示形式(number format)」という2つの側面があります。 表示形式とは、値をどう見せるかのルールです。たとえばセルの値が1234567でも、表示形式を設定すれば画面上は¥1,234,567と見せられます。
重要なのは、表示形式を変えても値そのものは一切変わらないという点です。 計算やAPI連携で使うのは元の値なので、見た目を整えても数式の結果に影響しません。 GASではRange.setNumberFormat()でこの表示形式をコードから設定できます。
setNumberFormat(表示形式)
値は変えず、見た目だけを変える。1234567 → ¥1,234,567 と表示
setValue(値そのもの)
セルの中身を書き換える。計算結果や集計に直接影響する
setNumberFormatで書式を一括設定する基本
まずは一番よく使う「カンマ区切り」を例に基本形を見ます。範囲(Range)を取得してsetNumberFormat("#,##0")を呼ぶだけです。範囲を指定すれば、その中の全セルにまとめて適用されます。
function setThousandsFormat() {
const sheet = SpreadsheetApp.getActive().getSheetByName("売上");
// B2:B100 に「1,000」のようなカンマ区切り書式を一括設定
const range = sheet.getRange("B2:B100");
range.setNumberFormat("#,##0");
// ↓ ここがポイント:値そのものは変わらない
// 例)B2の値が 1234567 でも、表示は「1,234,567」になるだけ
}書式文字列の#は「数字があれば表示、なければ何も表示しない」、0は「数字がなくても0を表示」という意味です。,は3桁区切りの記号です。
数値・通貨・パーセントの書式パターン
業務でよく使う書式をまとめて設定する例です。円マークは"¥"のようにダブルクォートで囲みます。パーセントは値を100倍して表示するので、割合は0〜1の小数で持つのがポイントです。
function applyNumberPatterns() {
const sheet = SpreadsheetApp.getActive().getSheetByName("売上");
// 金額(円マーク+カンマ区切り)
sheet.getRange("B2:B100").setNumberFormat('"¥"#,##0');
// 小数第2位まで(例: 12.50)
sheet.getRange("C2:C100").setNumberFormat("#,##0.00");
// パーセント(0.25 → 25.0%)※値は0〜1の小数で持つ
sheet.getRange("D2:D100").setNumberFormat("0.0%");
// マイナスをカッコ書きに(例: (1,000))
sheet.getRange("E2:E100").setNumberFormat("#,##0;(#,##0)");
}| 書式文字列 | 値の例 | 表示 |
|---|---|---|
| #,##0 | 1234567 | 1,234,567 |
| "¥"#,##0 | 1234567 | ¥1,234,567 |
| #,##0.00 | 12.5 | 12.50 |
| 0.0% | 0.25 | 25.0% |
| #,##0;(#,##0) | -1000 | (1,000) |
日付・時刻の表示形式
日付が入ったセルにも表示形式を設定できます。yyyyは西暦4桁、MMは月(大文字)、ddは日、dddは曜日です。分のmmは小文字なので、月のMMと混同しないよう注意します。
function applyDatePatterns() {
const sheet = SpreadsheetApp.getActive().getSheetByName("予定");
// 2026/07/19 のような日付表示
sheet.getRange("A2:A100").setNumberFormat("yyyy/MM/dd");
// 2026/07/19 14:30 のような日時表示(HHは24時間表記)
sheet.getRange("B2:B100").setNumberFormat("yyyy/MM/dd HH:mm");
// 07/19(日) のように曜日を付ける(dddは曜日)
sheet.getRange("C2:C100").setNumberFormat("MM/dd(ddd)");
}なお、セルに文字列としての日付(例:「2026-07-19」というテキスト)が入っている場合は、表示形式を変えても見た目は変わりません。 表示形式が効くのは、セルの値が「日付型」として入っているときだけです。文字列を日付として扱いたい場合は、先にnew Date()などで日付型に変換してからセルに書き込みます。
列ごとに違う書式をまとめて設定する
「A列は日付、C列は金額、D列はパーセント」のように、列ごとに書式を分けたいときは、複数形のsetNumberFormats()を使います。範囲と同じ行数・列数の二次元配列で書式文字列を渡すと、セルごとに個別の書式を一括適用できます。 セルを1つずつ触るより圧倒的に速く処理できます。
function applyPerColumnFormats() {
const sheet = SpreadsheetApp.getActive().getSheetByName("受注一覧");
const startRow = 2;
const numRows = sheet.getLastRow() - 1; // ヘッダーを除く
if (numRows < 1) return;
// A:日付 / B:商品名 / C:金額 / D:達成率 の4列
const range = sheet.getRange(startRow, 1, numRows, 4);
// 各セルの書式を二次元配列で用意(範囲と同じ行数・列数)
const formats = [];
for (let i = 0; i < numRows; i++) {
formats.push([
"yyyy/MM/dd", // A: 日付
"@", // B: 文字列(先頭の0が消えないようにする)
'"¥"#,##0', // C: 金額
"0.0%", // D: パーセント
]);
}
range.setNumberFormats(formats); // 列ごとに違う書式を一括適用
}上の例では、商品名の列に文字列書式"@"を指定しています。これは「0012」のような先頭の0を保持したい商品コードなどで役立ちます。
マイナスを赤字にする条件付き書式
表示形式はセミコロンで区切ることで、値の正負に応じて見せ方を変えられます。書式は正の数;負の数;ゼロの順に指定します。[Red]を付けた部分は赤字で表示されるので、損益表などでマイナスを目立たせるのに便利です。
function highlightNegative() {
const sheet = SpreadsheetApp.getActive().getSheetByName("損益");
// 書式は「正の数;負の数;ゼロ」の順にセミコロンで区切る
// [Red] を付けると負の数だけ赤字で表示される
sheet.getRange("B2:B100").setNumberFormat("#,##0;[Red]-#,##0");
// 応用:ゼロは「-」で表示、負はカッコ+赤字
sheet.getRange("C2:C100").setNumberFormat('#,##0;[Red](#,##0);"-"');
}なお、セルの背景色を変えたり「50以上なら青」のように値の大小で条件分岐させたい場合は、表示形式ではなくConditionalFormatRule(条件付き書式ルール)を使います。表示形式でできるのは、あくまで「正・負・ゼロ」の3分岐と文字色までです。
実務での注意点
1. 月「MM」と分「mm」の大文字・小文字を間違えない
日付の書式では、月は大文字のMM、分は小文字のmmです。取り違えると意図しない表示になります。時刻とセットで使うときは特に注意しましょう。
2. 表示形式は「見た目」であり、値の丸めではない
#,##0で小数を隠しても、セルの値は小数のまま残っています。合計が見た目とずれて見えることがあるため、本当に丸めたいときはMath.round()などで値自体を丸めてからセルに書き込みます。
3. setNumberFormatsは配列の形を範囲とそろえる
複数形のsetNumberFormats()に渡す二次元配列は、対象範囲と行数・列数が完全に一致している必要があります。行数がずれるとエラーになるため、getLastRow()などで実データの件数を取ってから配列を組み立てましょう。
4. 元に戻したいときは「General」
設定した書式を標準(自動判定)に戻すには、対象範囲にGeneralを設定します。
function resetFormat() {
const sheet = SpreadsheetApp.getActive().getSheetByName("売上");
// General を設定すると標準(自動判定)の表示に戻る
sheet.getRange("B2:B100").setNumberFormat("General");
}まとめ
GASのsetNumberFormat/setNumberFormatsを使えば、金額のカンマ区切り・円マーク・パーセント・日付といった見た目を、値を壊さずコードで一括整形できます。 帳票やレポートを自動生成するときも、書式設定を関数化しておけば毎回きれいな表示で出力できます。 「正・負・ゼロ」の3分岐と赤字までは表示形式で、それ以上の条件分岐は条件付き書式で、と使い分けるのがコツです。
よくある質問
setNumberFormatはセルの「見た目(表示形式)」だけを変え、中の値そのものは変えません。1000という数値に「#,##0」を設定すると画面上は「1,000」と表示されますが、セルの値は1000のままです。一方setValueはセルの中身自体を書き換えます。計算に使う値はそのまま、表示だけ整えたいときにsetNumberFormatを使います。
setNumberFormat('"¥"#,##0') のように、円記号をダブルクォートで囲んで書式の先頭に付けます。カンマ区切りの「#,##0」と組み合わせると「¥1,234,567」のように表示できます。小数を出したい場合は「"¥"#,##0.00」のように小数点以下の0を追加します。
パーセント書式「0.00%」は、セルの値を100倍して%を付けて表示します。つまり0.25に設定すると「25.00%」になります。25という数値にパーセント書式を付けると「2500.00%」になってしまうので、割合は0〜1の小数(0.25=25%)で持つのが正解です。
できます。setNumberFormats(複数形)に、範囲と同じ行数・列数の二次元配列で書式文字列を渡すと、セルごとに異なる書式を一括適用できます。金額の列は「#,##0」、日付の列は「yyyy/MM/dd」のように、列ごとに書式を分けたいときに便利です。
setNumberFormat('General') を設定すると、スプレッドシートの標準(自動判定)の表示形式に戻ります。特定の範囲だけリセットしたい場合は、その範囲を取得してGeneralを設定してください。
関連するサービス・記事
GAS開発・業務Webシステムを
相談する。
表示形式の自動設定以外にも、帳票のPDF出力・集計レポート・Gmail自動送信など、日々の業務を自動化するGAS開発をご相談いただけます。