【コピペで完了】GAS 日付 表示形式 変更の実装方法と注意点

GAS

セルの数値や日付の表示形式を変更するの実装コード

Google Apps Script (GAS) を使用してスプレッドシート内の特定のセルや範囲の表示形式(日付や数値のフォーマット)を変更するには、Rangeオブジェクトに対して setNumberFormat メソッドを実行します。以下のコードを実行することで、対象のセル(例: A1)に表示形式「yyyy/mm/dd」を直接指定し、日付の表示を一括で整形できます。

const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A1").setNumberFormat("yyyy/mm/dd");

仕様と技術的な注意点

setNumberFormat メソッドは、引数として指定したフォーマット文字列に基づいて、セル内部に保持されている値(シリアル値)の表示形式を上書き設定します。設定できる書式指定は、Google スプレッドシートのUI上から設定する「カスタム数値形式」と同等の記法がそのまま使用可能です。例えば、日付形式であれば「yyyy-mm-dd」や「yyyy年mm月dd日」、数値であれば「#,##0」や「0.00%」といった様々な表現をプログラム経由で柔軟に指定できます。

このメソッドは、外部Web APIからのデータ取得時やCSVファイルのインポート処理において、取得データの日付フォーマットを統一・整形するシーンで強力な効果を発揮します。元の値を変更することなく、スプレッドシート上での見栄えや表示だけを標準化できるため、後続のデータ加工処理への影響を最小限に抑えることが可能です。

ただし、実装時には重大な「落とし穴」が存在します。セルに入力されているデータ自体が「文字列型(テキスト)」である場合、setNumberFormat を実行しても表示形式が一切適用されません。表示形式の変更が有効になるのは、セル内のデータがGoogleスプレッドシートの内部表現である「シリアル値(日付型・数値型)」として認識されている場合のみです。フォーマットが反映されない場合は、まず対象セルの値が文字列になっていないかをデバッグ等で確認する必要があります。

実務での活用シーンとハマりポイント

実際の業務自動化では、基幹システムから出力されたCSVファイルや、外部API経由で取得した生のテキストデータをGoogleスプレッドシートへ自動取り込みする自動化スクリプトで頻繁に利用されます。システムごとに「20231001」や「2023/10/1」、「2023-10-01T00:00:00Z」などバラバラなフォーマットで保持されている日付表記を、見やすい「yyyy/mm/dd」表記に統一することで、人間がレポートを閲覧する際の視認性を大幅に向上させることができます。

開発初心者が現場で特に陥りがちなハマりポイントとして、CSVデータを取り込んだ際にすべてのセルが「文字列」として書き込まれてしまうケースが挙げられます。文字列状態の「2023/10/01」に対して setNumberFormat("yyyy/mm/dd") をいくら実行しても、スプレッドシート側では単なるテキストとして扱われるため、見た目の書式変更や日付計算機能が正しく動作しません。この回避策としては、スプレッドシートへの書き込み前に new Date() 等を用いてスクリプト側で日付型(Dateオブジェクト)に変換してからセルへ代入するか、書き込み後に適切な型へ変換する処理を挟むことが重要です。

この処理の基本メカニズム

Google スプレッドシートにおける表示形式の変更は、「セルに保存されている内部データ(値)」と「画面上に投影される表示スタイル(書式)」を分離して管理するメカニズムに基づいています。SpreadsheetApp から取得した Sheet オブジェクトを経て、対象の Range(セル範囲)を取得し、その範囲に対して setNumberFormat を呼び出すことで、セルのスタイル定義情報のみが書き換えられます。

この仕組みにより、セル内部のデータ精度(例えばミリ秒単位の日付情報や詳細な小数点以下の数値)を損なうことなく、業務要件に合わせた最適なビジュアル(例:年月日のみの表示)へ切り替えることが可能です。これにより、人間が見やすいフォーマットに整えつつ、関数やスクリプトでの集計処理には正確なシリアル値を保持し続けるという、業務システム開発におけるデータとデザインの分離という課題をスマートに解決できます。

※本記事は基本的なロジックおよび構文解説です。最新の仕様についてはGoogle Apps Script (GAS)の公式ドキュメントをご確認ください。

タイトルとURLをコピーしました