Google Apps Script

Googleスプレッドシートで和暦を表示する方法|令和・平成・昭和・大正・明治対応のカスタム関数を作ろう

スポンサーリンク

日本では日常的に「令和」「平成」などの元号(和暦)を使う場面があります。しかし、Googleスプレッドシートではデフォルトで和暦表示に対応していないため、業務で日付管理をしている方の中には「令和で表示したいのに……」と困った経験をした方も多いのではないでしょうか。

この記事では、Googleスプレッドシート上で和暦を表示できるようにする方法として、Apps Scriptを使ったカスタム関数の作り方を初心者にも分かりやすく解説します。

なぜ「ggge」などの和暦書式が使えないのか?

Excelでは日本語環境であればggge年m月d日のようにして和暦表示が可能です。しかし、Googleスプレッドシートではこのような書式はサポートされていません

理由は以下の通り:

  • GoogleスプレッドシートはISO形式(西暦)を前提とした設計が基本
  • 和暦のロケール設定や書式サポートが非常に限定的
  • カスタム表示形式でggggggeを指定しても動作しない

そのため、代替手段としてApps Scriptを使って関数を自作するのが最も確実な方法となります。


Google Apps Scriptで和暦関数を作る

Google Apps Scriptを使えば、自分だけの関数をスプレッドシートで使えるようになります。
以下では、=WAREKI(A1)のように書くだけで「令和7年6月1日」と表示されるカスタム関数を作成します。

手順①:スクリプトエディタを開く

  1. スプレッドシートの上部メニューから「拡張機能」>「Apps Script」をクリック
  2. プロジェクトが開いたら、コード.gs に以下のスクリプトを貼り付けます

📘 カスタム関数の作成についてのGoogle公式ガイド:
Googleスプレッドシートのカスタム関数 (Google)

手順②:和暦関数のスクリプトを貼り付ける

/**
 * 指定した日付を和暦(明治~令和)に変換します。
 *
 * @param {Date} inputDate 変換したい日付
 * @return {string} 和暦形式で表示された日付(例:令和7年6月1日)
 * @customfunction
 */
function WAREKI(inputDate) {
  if (!(inputDate instanceof Date)) {
    return "日付を入力してください";
  }

  const eras = [
    { name: "令和", start: new Date(2019, 4, 1), base: 2018 },
    { name: "平成", start: new Date(1989, 0, 8), base: 1988 },
    { name: "昭和", start: new Date(1926, 11, 25), base: 1925 },
    { name: "大正", start: new Date(1912, 6, 30), base: 1911 },
    { name: "明治", start: new Date(1868, 0, 25), base: 1867 }
  ];

  for (let i = 0; i < eras.length; i++) {
    if (inputDate >= eras[i].start) {
      const year = inputDate.getFullYear() - eras[i].base;
      const month = inputDate.getMonth() + 1;
      const day = inputDate.getDate();
      return `${eras[i].name}${year}年${month}月${day}日`;
    }
  }

  return "対応外の日付です";
}

🛠 このスクリプトでは、JavaScriptのDateオブジェクトを使って日付を処理しています。
詳しくは Date オブジェクトの公式解説(MDN) をご参照ください。

手順③:スプレッドシートで関数を使う

スプレッドシートに戻って、空白セルに次のように入力:

=WAREKI(A1)

A1セルに2025/6/1と入っていれば、結果は令和7年6月1日となります。

カスタマイズ例【応用編】

① 元号だけを表示したい場合(例:令和)

/**
 * 日付に対応する元号だけを返します。
 *
 * @param {Date} inputDate
 * @return {string} 元号(例:令和)
 * @customfunction
 */
function GENGO(inputDate) {
  if (!(inputDate instanceof Date)) {
    return "日付を入力してください";
  }

  const eras = [
    { name: "令和", start: new Date(2019, 4, 1) },
    { name: "平成", start: new Date(1989, 0, 8) },
    { name: "昭和", start: new Date(1926, 11, 25) },
    { name: "大正", start: new Date(1912, 6, 30) },
    { name: "明治", start: new Date(1868, 0, 25) }
  ];

  for (let i = 0; i < eras.length; i++) {
    if (inputDate >= eras[i].start) {
      return eras[i].name;
    }
  }

  return "対応外";
}

② 「元年」表記に対応させたい場合(例:令和元年)

/**
 * 和暦で「元年」表示に対応する形式を返します。
 *
 * @param {Date} inputDate
 * @return {string} 令和元年のような表示
 * @customfunction
 */
function WAREKI_GEN(inputDate) {
  if (!(inputDate instanceof Date)) {
    return "日付を入力してください";
  }

  const eras = [
    { name: "令和", start: new Date(2019, 4, 1), base: 2018 },
    { name: "平成", start: new Date(1989, 0, 8), base: 1988 },
    { name: "昭和", start: new Date(1926, 11, 25), base: 1925 },
    { name: "大正", start: new Date(1912, 6, 30), base: 1911 },
    { name: "明治", start: new Date(1868, 0, 25), base: 1867 }
  ];

  for (let i = 0; i < eras.length; i++) {
    if (inputDate >= eras[i].start) {
      const yearNum = inputDate.getFullYear() - eras[i].base;
      const yearStr = yearNum === 1 ? "元" : yearNum;
      const month = inputDate.getMonth() + 1;
      const day = inputDate.getDate();
      return `${eras[i].name}${yearStr}年${month}月${day}日`;
    }
  }

  return "対応外";
}

③ 和暦に曜日も追加したい場合(例:令和7年6月1日(日))

/**
 * 和暦の日付に曜日を加えて表示します。
 *
 * @param {Date} inputDate
 * @return {string} 曜日付き和暦(例:令和7年6月1日(日))
 * @customfunction
 */
function WAREKI_WITH_DAY(inputDate) {
  if (!(inputDate instanceof Date)) {
    return "日付を入力してください";
  }

  const eras = [
    { name: "令和", start: new Date(2019, 4, 1), base: 2018 },
    { name: "平成", start: new Date(1989, 0, 8), base: 1988 },
    { name: "昭和", start: new Date(1926, 11, 25), base: 1925 },
    { name: "大正", start: new Date(1912, 6, 30), base: 1911 },
    { name: "明治", start: new Date(1868, 0, 25), base: 1867 }
  ];

  const days = ["日", "月", "火", "水", "木", "金", "土"];

  for (let i = 0; i < eras.length; i++) {
    if (inputDate >= eras[i].start) {
      const year = inputDate.getFullYear() - eras[i].base;
      const month = inputDate.getMonth() + 1;
      const day = inputDate.getDate();
      const weekday = days[inputDate.getDay()];
      return `${eras[i].name}${year}年${month}月${day}日(${weekday})`;
    }
  }

  return "対応外";
}

④ 文字列の日付から和暦に変換したい場合(例:”2025/6/1″)

/**
 * 文字列または日付を和暦に変換します(元年対応)。
 *
 * @param {string|Date} input 任意の形式の日付(例: "2025/6/1" や Date型)
 * @return {string} 和暦での表示(例: 令和7年6月1日 または 令和元年6月1日)
 * @customfunction
 */
function WAREKI_TEXT(input) {
  let date;

  if (typeof input === "string") {
    date = new Date(input);
    if (isNaN(date)) return "日付が無効です";
  } else if (input instanceof Date) {
    date = input;
  } else {
    return "無効な入力です";
  }

  const eras = [
    { name: "令和", start: new Date(2019, 4, 1), base: 2018 },
    { name: "平成", start: new Date(1989, 0, 8), base: 1988 },
    { name: "昭和", start: new Date(1926, 11, 25), base: 1925 },
    { name: "大正", start: new Date(1912, 6, 30), base: 1911 },
    { name: "明治", start: new Date(1868, 0, 25), base: 1867 }
  ];

  for (let i = 0; i < eras.length; i++) {
    if (date >= eras[i].start) {
      const year = date.getFullYear() - eras[i].base;
      const yearStr = year === 1 ? "元" : year;
      const month = date.getMonth() + 1;
      const day = date.getDate();
      return `${eras[i].name}${yearStr}年${month}月${day}日`;
    }
  }

  return "対応外の日付です";
}

まとめ

Googleスプレッドシートでは、表示形式で和暦にすることはできませんが、Apps Scriptを活用すれば自由にカスタム関数を作成して和暦表示を実現することができます。

業務で使う帳票や日報など、日本の文化に根ざしたフォーマットを整える上で非常に便利な手段となります。

必要に応じて、元年表示や曜日追加、文字列対応、大正・明治対応などのカスタマイズも可能ですので、この記事のコードをベースに活用してみてください!

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