GASでスプレッドシートの
表示形式を一括設定する方法

金額のカンマ区切りや円マーク、パーセント、日付の書式を、1セルずつ手で直していませんか。setNumberFormat(セルの表示形式を設定するメソッド)を使えば、値はそのままに見た目だけをコードで一括で整えられます。

|対象: GAS / スプレッドシート / 表示形式

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)");
}
書式文字列値の例表示
#,##012345671,234,567
"¥"#,##01234567¥1,234,567
#,##0.0012.512.50
0.0%0.2525.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開発をご相談いただけます。

GAS開発の対応範囲を見る