★西暦・和暦とシリアル値 (基礎知識として)
昭和時代に生まれ育ち,昭和から平成にかけて働いてきた者にとって,3つ目の元号に躊躇せざるをえません。昭和が64年まであったことを考えると,約30年で元号が変わるなどということは,全くの想定外でした。これまで誰一人としてこの問題についてのご指摘を受けたことがありませんでしたし,当サイト提供のソフト群もそのことについては,殆ど考えずに開発・公開してきておりました。
今回,その反省を含めて,西暦・和暦と年度の扱いについて,もし元号が変わった時にどう対応したらよいかという観点で,当サイト提供のソフト群だけでなく,一般的なExcelシートでも活用して頂けるような提案をさせていただきます。
ソフトによっては年(年度)に全く関係がないものも多いのですが,「年間行事予定表」などのように,密接に関係するものもあります。更に,学校では4月〜3月の「年度」という1年サイクルを基本に活動していますので,「年」とは明確に区別しなければなりません。しかも,平成が始まった年は平成1年度でなく「平成元年度」と表記しておりましたので,更に注意が必要なのです。新天皇の即位と元号の問題には目が離せません。
★今のエクセルで新元号は使えるか?(Microsoft Update での対応は?)(2019/5/23更新)
西暦 → 正確にはグレゴリオ暦と言うのが正しいようですが,16世紀に考案された暦で,今から約2000年前のキリスト誕生を起点に作られています(実際は4年ほどズレているようです)。和暦よりも長い年月を扱う場合には便利な暦です。 和暦 → 7世紀から使われている日本固有の紀年法です。法的に天皇の皇位を継承する際にのみ改めることが定められており,現天皇が退位すれば元号も改まるわけです。元号は,その時代の社会や歴史的イメージと結びついており,捨てがたいものがある一方で,数十年という短い期間で変わることや,次の元号がいつ始まりどんな元号になるかが分からないことが,PCでの扱いを難しくしているところです。 シリアル値 → エクセルで年月日や時刻をセルに入力すると,1つの数値として保存されます。例えば,「2017/1/1」と入力すると,そのまま表示されいますが,内部では「42736」という整数が保存されます。これは,1900/1/1を起点(1)としての日数を意味しており,この数値を「シリアル値」と呼ばれております。つまり,「2017/1/1」も「平成39年1月1日」も表現が異なるだけで,本質的には同じ日を表しており,理にかなっている訳です。これにより年月日の計算が速くできるようになっています。
ちなみに,1900/1/1よりも前の年月日を表すシリアル値はありません。通常の数値や文字として保存することになります。また,時分秒については小数で保存されます。例えば,「2017/4/1 6:00」は,「42826.25」が保存されます。このことににより,年月日と時分秒がたった1つの数値で処理されている訳です。
もっとも,PCでは文字でさえ最終的に数値(二進数)で保存されますので,当然といえば当然の話ですね。
●日付をシリアル値として入力する何も意識する必要はありません。エクセルが日付データを自動で判断してシリアル値に変換してくれます。しかも,入力したときの書式に合わせて表示してくれますので,そのことを知らないで使っているユーザーも多いと思われます。●シリアル値の表示書式を指定して表示する
例えば「2017/4/1」「2017年04月01日」「17/04/04」「H29/4/4」「平成27年4月4日」…これらは表示書式が違うだけで全て同じシリアル値です。既に表示されている日付データを別の書式で表示したい場合は,下図のように「セルの書式設定」ダイアログボックスを開いて,日付→カレンダーの種類→種類を選択するか,ここにない場合は,ユーザー定義→種類で探し,それでもなければ書式を定義すればよいでしょう。この書式定義で使える記号は,「Excel のセルの表示形式でユーザー定義に使用できる書式記号」でWEB検索してください。
関数で使いたい場合は,上図(クリックで拡大)のように,TEXT関数を使います。書式定義で使える記号は,「セルの書式設定」と全く同じです。 Microsoftの予告通り,2019年5月上旬から順調にMicrosoft Updateが行われて,「令和」への対応が済んだようです。2019/5/23現在で,予定してなかったExecl2010も「令和」への対応が出来ていました。Excel2007については未確認です。★当サイトの教務事務ソフトでは,どのように年(年度)の指定方法を変えたのか
上記のように,「g」や「e」が元号を含んだ和暦の日付を表す表示書式となっており,これによって明治・大正・昭和・平成・令和は表現出来ています。
ただし,Excel2007については,メインストリームサポートが終了していますので,対象外となった可能性があります。特に,Excel2007については2017/10/10で延長サポートも終了しましたので,「平成○○年」のままになるかも知れません。ただ,そうなると,同じデータファイルを開いても,Excel2013では,「令和1年」と表示されても,Excel2010で開くと「平成31年」などと表示されたり,「令和1年」と入力してもシリアル値にならず,文字列として入力されたりするといったおかしな事態になる訳です。
ただ,日本人にとって和暦は非常に重要な表現となりますし,このことでビジネス上のトラブルも起こりうる可能性もありますので,延長サポートの対象としていただけることを祈るばかりです。しかし,Microsoft社の立場から言えば,修正プログラムを開発するより,新しいOfficeを購入したもらった方がありがたいはずです。とりあえず,Microsoft のサポートがない古いExcelのために,当サイトの方で新TEXT関数(ユーザー関数)や数式を掲載します。
和暦の欠点は,元号と年数という2つの条件を指定しなければ何年かが決定しないところにあります。元号が変わらなければ,たった2桁の数字を入力するだけで,年(年度)が指定できる点がよかったのですが,元号が変わるとなるとそのことが裏目に出てしまいました。★西暦と和暦の変換数式(新元号対応のExcelでは)
右図(左側)のように,元号と年数をセットにして年(年度)を指定する方法が考えられます。そのソフトがその1年内だけに限定していれば,「平成29年度」という(シリアル値ではなく)文字列をそのまま引用するだけですので,最も簡単な設定方法となるだけでなく,新元号に対応していない古いエクセルでも使えることになります。
ただし,欠点もあります。もし,カレンダーを作るような年月日の計算が必要な場合はシリアル値が必要になりますから,新元号に対応していないPCでは新元号が認識できずエラーが起こり,計算ができなくなってしまいます,その回避策に工夫が必要になります。
当サイト提供のソフトで,この方法(文字列)で年度を指定することになったのは,学校名簿管理・会計簿&会計報告・通知表&要録一覧・体力テスト・学級編制票・保健統計などがあります。
右図(右側)のように,西暦で年(年度)を指定することも解決策の1つとなります。カレンダーと密着したソフトの場合はこちらの方がよいでしょう。西暦から和暦への変換は,エクセル自信がもつ表示形式の指定やTEXT関数を使えば,どんな元号になるかは分からなくても対応で出来ることになります。新元号に対応していない古いエクセルでも,和暦表現は「平成」のままの表示になりますが,カレンダー機能は実行できて,少なくともエラーは避けられます。
当サイト提供のソフトで,この方法(西暦)で年度を指定することになったのは,年間行事予定表・授業時数一覧表・週案です。
西暦から和暦に変換するのは,簡単な数式を使えば可能です。下の表の実際のエクセルシートはここからダウンロードできます。
番 項目 数式 表示結果 1 西暦年 元データ (セル「D3」に右のデータが入っているとします) 1989 2 西暦年度 =C3&"年度" 1989年度 3 4月1日 =DATE(D3,4,1) … 与えられた年の4/1のシリアル値が入ります H1.4.1など 4 和暦の元号のみ
を取り出す=TEXT(DATE(D3,4,1),"g") H 5 =TEXT(DATE(D3,4,1),"gg") 平 6 =TEXT(DATE(D3,4,1),"ggg") 平成 7 和暦の年数のみ =TEXT(DATE(D3,4,1),"e") 1 8 =TEXT(DATE(D3,4,1),"ee") 01 9 和暦年度 =TEXT(DATE(D3,4,1),"ggge")&"年度",又は,=TEXT(DATE(D3,4,1),"ggge年度") 平成1年度 10 和暦の年数を全角に =JIS(TEXT(DATE(D3,4,1),"ggge"))&"年度",又は,=JIS(TEXT(DATE(D3,4,1),"ggge年度")) 平成1年度 11 和暦の年数が「1」
の時は「元」に"=TEXT(DATE(D3,4,1),"ggg")&IF(TEXT(DATE(D3,4,1),"e")="1","元",JIS(TEXT(DATE(D3,4,1),"e")))&"年度" 平成元年度
この逆(和暦から西暦への変換)は,次のようにします。
番 項目 数式 表示結果 1 和暦年 元データ (セル「D17」に右のデータが入っているとします) H1 2 4月1日 =DATEVALUE(D17&"/4/1") … これがシリアル値となります H1.4.1 3 西暦年 =YEAR(DATEVALUE(D17&"/4/1"))&"年" 1989年
●注意点一見すると,和暦から西暦への変換(下の表)の方が簡単そうですが,新元号に対応していないエクセルで新元号を入力するとシリアル値が算出できず(文字として認識するだけ),そこから先の計算が出来なくなったり,エラーとなったりします。
その点,西暦から和暦への変換(上の表)の方が安定しています。新元号に対応していないエクセルの場合,平成の年号が続いていると認識して表示するでしょう(平成31年〜)。和暦表示が違っているだけで,その後の計算結果(カレンダー等)には影響を与えません。
従って,カレンダー機能のように年数などの計算が必要なソフトでは,西暦で年や年度を指定し,表示する際に和暦に変換する方がよいだろうと思われます。特に,当面の間は,Microsoft Update で和暦の修正のできない古いExcelと,修正が完了した新しいExcelを併用する多くの学校では,「西暦→和暦」を推奨いたします。
★新元号非対応のExcelでの対応新元号非対応のExcelでは,下表(ピンクのセル)のように,2019/5/1以降も「平成」のままになってしまいます。そこで,数式やVBAのユーザー関数を使って,新元号に対応する方法を考えてみました(上表右側)。
ただし,令和のローマ字表記の頭文字が「R」の場合で考えています。
●数式で対応する (上表右から2列目)その日付(シリアル値)が2019/5/1以降の場合は,元号付きの形式で表現してみて,「平成」「平」「H」の文字を「令和」「令」「R」に置き換え,年数から「30」を引けばよい訳です。数式に表すと,●VBAで対応する (上表一番右列)
この数式内の「日付」は,元になる日付のシリアル値です。直接データを入れても,参照してもOKです。
=IF(日付 < DATEVALUE("2019/5/1"),TEXT(日付,書式文字列),SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXT(DATE(YEAR(日付)-30,MONTH(日付),DAY(日付)),書式文字列),"平","令"),"成","和"),"H","R") )
DATEVALUE("2019/5/1") … 2019/5/1 のシリアル値です。
TEXT(日付,表示文字列) … 平成以前の場合,書式文字列に従って日付を表示します。
SUBSTITUTE関数 … 令和の場合,文字列中の指定された文字を他の文字に置き換える関数です。
使い方は,SUBSTITUTE(文字列, 検索文字列, 置換文字列)です。
(例) SUBSTITUTE("平成1年5月1日","平成","令和") で,結果は「令和1年5月1日」が返ってきます。上の数式は少々長すぎますので,何度も出てくると入力が大変になります。そこでそのアルゴリズムをVBAで組んでみまたのが次です。●サンプルと注意点
これで,「=Gng(日付,書式文字列)」とやるだけで,欲しい文字列が出てくるでしょう。
Function Gng(年月日 As Date, 書式文字列 As String) As String
' 日付シリアル値を新元号で表記する
If 年月日 >= DateSerial(2019, 5, 1) Then
Gng = Format(DateSerial(Year(年月日) - 30, Month(年月日), Day(年月日)), 書式文字列)
Gng = Replace(Gng, "平", "令")
Gng = Replace(Gng, "成", "和")
Gng = Replace(Gng, "H", "R")
Else
Gng = Format(年月日, 書式文字列)
End If
End Function
上記二つの方法を実際に数式やVBAを組んだサンプルを,ここからダウンロードできます。
上のどちらの方法でも必要な表示に対応できるでしょう。しかし,表示された新元号付きの日付は,「文字列」です。もはやシリアル値ではなくなっていますので,日付計算はできません。
また,「R1.5.1」等と入力しても,日付として認識されず,文字列としか入力されません。
日付順に整列させるときは,1回の操作での整列はできません。元号別に分けて処理する必要が出てきます。
★小ネタ・チップス●なぜ学校年度は4/1〜3/31なのか学校教育法施行規則の第五十九条に「小学校の学年は、四月一日に始まり、翌年三月三十一日に終わる。」とあるからです。でも,これは法的根拠であって理由の説明には不十分ですね。では,なぜ「四月一日に始まり…」と決めたのでしょうか。●4月1日生まれの子はなぜ早生まれなのか
明治初期には,一般の学校の新学期は9月(欧米に合わせた?),軍関係学校(士官学校等)の新学期は4月でしたが,このズレにより優秀な学生が一般学校に逃げてしまい,軍部は文部行政に圧力をかけ4月になったと聞いています。(?)
ではなぜ4月なのかというと,農作物を作り始めるのが春 → 地租(税金収入)の関係で政府の会計年度が4月開始 → 軍関係・学校の4月開始 …という流れが考えられます。但し,推測半分です。学校教育法の第十七条に「保護者は、子の満六歳に達した日の翌日以後における最初の学年の初めから、満十二歳に達した日の属する学年の終わりまで、これを小学校、義務教育学校の前期課程又は特別支援学校の小学部に就学させる義務を負う。…(以下略)」とあるからです。
4月1日生まれの子が「満6歳に達した日」は4月1日なのでその年に入学できます。4月2日生まれの子は4月1日時点で満5歳だからここに差が出てくる訳です。「その翌日(4/2)以後における最初の学年の初め(翌年の4/1)」というと,次の年の4/1と言うことになる訳です(釈迦に説法でしたか?)。詳しくは,こちらをどうぞ。
NHK「チコちゃんに叱られる」(2019/3/22放送)によると,前日の最後の瞬間に満年齢をカウントするのは,2月29日生まれの人のためだとも説明しておりました。
しかし,法的解釈よりも,本質は,なぜ文言に「翌日」を入れたのかにあります。確かに法律には「翌日」「翌月」という文字が多く出てきます。理系の私にはよく理解できない点が多く,あらゆることに疑問ばかりをもっていた人生でした。
いずれにせよ,「翌日」を入れても入れなくても,どこかに境界線が必要で,それが3/31と4/1の間であっても,4/1と4/2の間であっても大差はないのです。現実に何も問題はないと思います。私的なことになりますが,私の息子も4月1日生まれでしたので,小学校の低学年くらいまでは多少手間がかかったかな?…というくらいでしたね。社会人になった彼を見ていると,逆に荒波にもまれたことは,彼が強く育った要因になっているような気がします。
ホームに戻る 質問・連絡・利用コードの申込ページへ
Copyright© 2002-2017 教務事務の軽減. All rights reserved.