今回もGoogle Apps Script(GAS)の日付操作関連のTipsとして、for文で日付指定した期間をループさせる方法を紹介する。

事前準備として日付操作ライブラリのDay.jsを使用するのであらかじめ追加しておく必要がある。
下記の記事でライブラリの追加手順を紹介しているので参考にしてほしい。

Day.jsを追加したら、早速コードの紹介を進めていく。

今回は、ある1ヶ月分の日付をfor文でセルに一括入力する例を紹介する。

// 日付オブジェクト生成(2021/10/01を指定) ※月は0〜11で指定する
const baseDate = new Date(2021, 9, 1);
  
// 当月最終日(2021/10/31)を取得
const endDate = dayjs.dayjs(baseDate).add(1, 'month').date(0).toDate();

// 当月の日数を求める
const dateCnt = dayjs.dayjs(endDate).diff(baseDate, 'day') + 1;

// 入力対象シート
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const ssId = spreadsheet.getId();
const sheet = spreadsheet.getSheetByName('Sheet1');

// 日数分のforループ
for(let i = 0; i < dateCnt; i++) {
  // i日後の日付
  let inputDate = dayjs.dayjs(baseDate).add(i, 'day').toDate();

  // 日付フォーマット
  let formatedDate = Utilities.formatDate(inputDate, 'Asia/Tokyo', 'yyyy/MM/dd');

  // 入力
  sheet.getRange(1+i, 1).setValue(formatedDate);
}

それほど難しい処理はしていないが、細かいポイントとしては9行目で日数を求める際に1を加算しているところ。

dayjsで求める差分は、例えば31日から1日までの差分とした場合、結果として30が返るので、このままループすると1日から30日までしか処理されないことになるためだ。