【コピペOK】スプレッドシートの「祝日リスト」の更新をGASで自動化!今年分だけ作成する方法

  • 給与計算
  • 勤怠管理
  • プロジェクトの工数見積もり

これらの業務を行う際、スプレッドシートで「祝日リスト」を用意してる人も多いかと思います。

正確な稼働日を計算するには祝日リストを作るのが必須ですが、こんなトラブルに巻き込まれていないでしょうか?

内閣府の公式CSVをスプレッドシートに読み込んだら、文字化けするしデータ多いから使いにくい…

Googleカレンダーから自動取得したら、平日扱いの記念日まで混ざって計算が狂った…

一度疑い出すと、結局何度も見返して確認作業に追われたり、最悪の場合、計算ミスに気づかずそのまま進めてしまったりします。

MASA

僕も昔、クリスマスを祝日に設定したまま進めてしまい、盛大に恥をかいた記憶があります…

そこで今回は、Google Apps Script(GAS)を使って、今年分だけ正確な祝日リスト文字化けなし自動作成する方法をご紹介します。

コピペだけで使えるコードを用意しましたので、ぜひ試してみてください。

目次

【コピペ用コード】今年分の祝日だけを出力するGASコード

それでは、実際にここで今年分の祝日だけを抽出するGASコードを紹介します。

「祝日リスト」を作りたいスプレッドシート内でGASを立ち上げましょう。

あとは、こちらをコピペだけでOKです。

MASA

GASの立ち上げ方法は省略してます。
立ち上げ方法から知りたい方は、以下の記事をご参照ください。

JavaScript
function fetchOfficialHolidays() {
  // ▼▼▼ 設定エリア(ここだけ変更すればOK!) ▼▼▼
  const CONFIG = {
    // 取得したい年(今は「今年」になっています。2026などに書き換えもOK)
    TARGET_YEAR: new Date().getFullYear(),
  
    // 作成されるシートの名前
    SHEET_NAME: '祝日マスタ',
    
    // 内閣府の祝日データURL(通常は変更しなくてOK)
    CSV_URL: 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv'
  };
  // ▲▲▲ 設定エリアここまで ▲▲▲

  try {
    // 1. データを取得(文字化け対策済み)
    const response = UrlFetchApp.fetch(CONFIG.CSV_URL);
    const csvText = response.getContentText('Shift_JIS');
    const csvRows = csvText.split('\r\n').map(row => row.split(','));

    const outputData = [];
    
    // 2. データを1行ずつチェック
    csvRows.forEach(function(row) {
      if (row.length < 2 || row[0] === '' || isNaN(Date.parse(row[0]))) return;

      const rowDate = new Date(row[0]);
      
      // 設定した年のデータなら採用
      if (rowDate.getFullYear() === CONFIG.TARGET_YEAR) {
        outputData.push([row[0], row[1]]);
      }
    });

    // 3. シートへ書き出し
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
    
    // シートがなければ作る
    if (!sheet) {
      sheet = ss.insertSheet(CONFIG.SHEET_NAME);
    }
    
    // シートをきれいにしてから書き込む
    sheet.clear();
    
    if (outputData.length > 0) {
      sheet.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData);
      sheet.getRange('A:A').setNumberFormat('yyyy/mm/dd');
      
    } else {
      console.log('指定した年のデータが見つかりませんでした。');
    }
    
  } catch (e) {
    console.log('エラーが発生しました: ' + e.toString());
  }
}
JavaScript

このコードをエディタ画面に貼り付けてください。

保存した後に「実行」ボタンを押して、シートに戻ると、今年度分だけの「祝日シート」が出来ているのがわかると思います。

今年分だけの祝日が出力されたシート

ポイント解説

コードの冒頭にある CONFIG(設定エリア) にご注目ください。

JavaScript
  const CONFIG = {
    TARGET_YEAR: new Date().getFullYear(), // ←ここ!
JavaScript

初期設定では new Date().getFullYear() となっており、自動的に、実行した年のデータを取るようになっています。

もし、「来年の祝日リストが欲しい!」となった場合は、ここを以下のように書き換えてみてください。

JavaScript
    // 後ろに「+ 1」を足すだけで、来年を指定できます
    TARGET_YEAR: new Date().getFullYear() + 1,
JavaScript

すでにあるTARGET_YEAR: new Date().getFullYear()+ 1をするだけで来年の祝日リストを作成出来ます。

うまく動かない時は?よくあるエラーと対処法

コードを貼り付けたのに、うまく動かない…

そんな時にチェックすべき、トラブルと解決策をまとめました。

日付が1日ずれる

これはGASのタイムゾーン設定が原因です。

デフォルトでアメリカ時間(GMT-05:00)になっていることがあります。

解決策

GASのエディタ左側の「プロジェクトの設定(歯車アイコン)」を開き、タイムゾーンを 「(GMT+09:00) 日本標準日時 – 東京」 に変更してください。

これで直ります。

タイムゾーンを変更する方法の解説

エラーが出て止まる

なぜか分からないけど、エラーが出ていてシートにも何も反映されていない。

理由は色々ありますが、最も可能性が高いのが「シート名を間違えている」です。

解決策

「微妙な誤字脱字」や「半角スペースか全角スペースか」といった些細なことで動かなくなります。

シート名をコピーしてSHEET_NAME: '祝日マスタ'ここの「祝日マスタ」を適切なシート名に書き換えてください。

「もっと便利にしたい」「設定が不安」という方へ

ここまでGASによる自動化を紹介し、無事に祝日リストが作成できたかと思います。

しかし、実際の業務で使い続けるとなると、さらに踏み込んだ設定やメンテナンスが必要になることも多いと思います。

「もっと便利にしたい」
  • 創立記念日など、会社独自の休日も自動で反映させたい。
  • このリストを使って、複雑な給与計算シートを作りたい。
「設定が不安」
  • コードをいじるのが怖くて、来年の更新ができるか心配。
  • もしエラーが出た時に、自分で直せる自信がない。

業務効率化のためにツールを入れたのに、エラー対応やメンテナンスで時間を浪費してしまっては本末転倒です。

私は、あなたの業務フローに合わせた「壊れない自動化シート」の作成・運用サポートを承っております。

今回のようなマスタデータの自動化はもちろん、そこから繋がる「勤怠管理」「工程管理」のシステム構築まで、丸ごとお任せください。

MASA

「まずは今のシートを見てほしい」といった気軽なご相談も大歓迎です!

まとめ

給与計算や工数管理といった数字を扱う業務において、マスタデータの正確さはとても重要です。

ここが間違っていると、手戻りが発生したり、最悪の場合は信用問題に関わったりすることもあります。

今回ご紹介したGASを使えば、ボタン一つで今年度分の余計なデータが混ざっていない、正確な祝日リストが手に入ります。

もうカレンダーと睨めっこして手入力したり、「これ合ってるかな?」と不安になる必要はありません。

この記事があなたのお悩みを解決できたなら幸いです。

  • URLをコピーしました!

MASAのアバター MASA MASA|GAS開発者

GAS開発者のMASAです。
スプレッドシート業務の自動化や効率化の仕組みづくりを提供しています。
ブログではの自動化や効率化のTipsについて発信しています。

目次