GASを使ってスプレッドシートに現在時刻を入力する処理を作っていました。
情報としては下記のようなものです。
2024/9/8 8:48
やり方は、D5セルに値を入れるとして、下記のようなことをしていました。
function test(){
const sheet = SpreadsheetApp.getActiveSheet();
const date = new Date();
const currentTime = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/M/d HH:mm');
sheet.getRange("D5").setValue(currentTime);
}
一方で、見た目上は時分だけ表示されれば十分だったので、セルの書式には下の画像のように「時(1): 分(01)」を設定していました。

しかし、スクリプトを実行した結果はこのように年月日まで表示されました。

理由は Utilities.formatDate の戻り値が string 型になることです。設定したのは日付型に対する書式だったので、文字列型のデータが入力されたことで解除されたということですね。
スクリプトの書き込み部分を下記のようにすれば、意図通り設定した書式で表示されました。
function test(){
const sheet = SpreadsheetApp.getActiveSheet();
const date = new Date();
sheet.getRange("D5").setValue(date);
}

今回の例は現在日時なのでこれで大丈夫ですが、値を変更したい場合はdateをそのまま使うわけにはいかないので、以下のようにしてformatDateした結果を再度日付型に変換してやればよいです。
function test(){
const sheet = SpreadsheetApp.getActiveSheet();
const date = new Date();
const currentTime = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/M/d HH:mm');
sheet.getRange("D5").setValue(new Date(currentTime));
}
ところで、このように書式を変更して表示した日時を手で編集すると表示形式が自動で変わってしまうようです。
その場合、編集したら別のセルから書式をコピーしてくるなり、GASのonEditで書式を設定するなり、何らかのケアが必要になるでしょう。

その場合、編集したら別のセルから書式をコピーしてくるなり、GASのonEditで書式を設定するなり、何らかのケアが必要になるでしょう。


