とうとうこの日が来てしまった「改元」。全て「西暦」の表示で済ませられればいいものの,お仕事の都合で,どうしても元号表示が必要になる方もいると思う。でも古いソフトだと,通常「令和」の元号表示はそのままでは「自動的に」は対応できない。
比較的新しいバージョンなら,元から対応,あるいはアップデートでサポートされる「改元対応版」もあるかもしれないが,資金の面とか,これまでの「実務」の蓄積との互換性は大丈夫かとか,不安要因は多々あり,急に「全て最新版に!」とはいかないことが多いと思う。
ところが,「表計算ソフト」の場合,ソフトは古いままでも,自動で計算する機能をうまく使えば,新元号である「令和」対応の日付を自動表示させることも可能になる。ここではその方法を解説したい。
● 表計算ソフト特有の事情
筆者が作成する文書に入れる日付はたいてい西暦なので,本来は改元など気にしなくていいのだけど,最近パソコンの関係で「ちょっと仕事手伝って~」ってンで呼ばれた会社は,「見積書」などを自治体のような公的機関に提出することがあるため,日付を「元号表示しなくちゃ」という「使命感」的なものがある。そのため他の文書もそれに全部合わせてしまっていたところへ,「改元」となった次第。そこで,以前その見積書の「ひな型」の作成をアウトソーシング的に頼まれたことがある筆者が呼ばれたというわけ。
「『平成→令和』くらい自分で書き換えられないのか」と思われそうだが,そんなに単純じゃない。分かる人は分かると思うが,ソフトには自動で日付を元号で表示するよう設定する機能もあることはあるので,これまではそれで済んでいた。ところが,平成時代ずっと使い続けてきたソフトなものだから,当然「令和」の改元までは想定されておらず,少なくとも今後の日付については,その機能は意味がなくなってしまっている。特に「当日の日付が自動的に元号で表示される箇所」があるので,放っておくと,そこが今後も全て「平成」のまま。でも,そこを何とか「令和に」,しかも「自動で」なるようにしたいというわけだ。
「見積書」が複数ページあると,各ページに同じ日付を印刷する必要も出てくる。各ページごとに日付の欄を設けているとたいへんだから,1箇所「この枠の内容は全てのページに印刷する」といった枠の指定をし,そこに日付を設定してあるので,全ページに印刷される。まぁ,こうした小細工も「単純に直せば済む」わけにいかなくしている要因かもしれないけど。でも,たとえ数十ページになっても,枠1箇所の日付を直すだけで済むし,手間的には数分の1から数十分の1程度になるのだから,超便利。見積書を作れば作るほど,修正をすればするほど,手間の差は拡大するから,年間で数時間くらいの差になるかもね。「改元」なんて今回くらいなのだから,こうした方法は使わない手はない。
厄介なのは,今後作成する文書の扱い。ずっと印刷当日の日付入りの書面だけでいいなら「令和に直すだけ」でも済むけど,何らかの理由で過去の時点での見積りを再度印刷したい時は,「平成」でないとマズい場合も起こりうる。また「期限の起算日」など過去の日付を扱う場合は「平成⇔令和」の自動切り替えが必要になることも考えられる。そうでなくても,来年以降は数字の表示で済むが,今年だけは「元」年と表示したいし,それを印刷する度,確認したり直したりするのもたいへん。
というわけで,単純に「文字を『令和』にすれば済む」というわけにもいかない場合も多い。ここでは,表計算ソフトでそれに対応する方法を考えてみる。
それにしても,お役所が元号表示を半ば強制しているのだとしたら,こうしたことにコストをかけさせているようなもので,中小企業イジメのような感じがしなくもない。
● 基礎知識……日付は「数値」として扱われている
表計算ソフトに日付を書き込むと,たいていは数値として扱われる。たとえば,「即位礼正殿の儀」が行なわれる日である「2019/10/22」と入力すると,「2019 年 10 月 22 日」とか,「10/22」などと,自動的に表示が変わってしまうことがある。これは,そのセルに「日付を表す数値」が入力されたものとして扱われ,そのソフトで定められた共通した日付の書式に変換されたため。
「日付を表す数値」とは何かというと,多くの場合,西暦 1900 年の
3 月 1 日を第 61 日目とした通し日数。「2019 年 10 月 22 日」ならば,そうした文字が入力されているわけではなく,実際は基準日を基に計算された 43760 という数値が入力されているものとして扱われる。
ちなみに,10/22 は今年だけ「祝日」になるが,周知度はいまいち。
人間が説明を聞くと面倒くさいが,コンピュータは一瞬で計算できるので関係ない。むしろ数値で扱うと,日数の計算がし易い。たとえば,「半年(180 日)前は何月何日か?」を求める場合は,単純にそこから 180 を引くだけ。前述の「即位礼正殿の儀」の半年前なら,180 を引いた 43580 にするだけで求められたことになる。むしろ,そうした計算をし易くするために「通し日数」で扱っているようなもの。
それにしても「西暦 1900 年の 3 月 1 日が第 61 日目」なんて中途半端な基準だと思われそうだが,じつは,ソフトによって基準が微妙に違う。筆者が使っている OpenOffice の表計算ソフトは,「西暦 1899
年の 12 月 30 日が第0日目」としているが,古いパソコンに入っているマイクロソフトのエクセルで確認したところ,「西暦 1900 年の元旦が第1日目」という扱いだった。前日の 12 月 31 日が「第0日」だから,ここだけを見ると1日ズレている。ところが,誰が設計したのだかそのエクセル,科学的法則を厳密に適用すると 1900 年は閏年にならないのに,2 月 29 日が存在していた。そのため,第 61 日目にあたる日が 3 月 1 日になって OpenOffice と一致し,以降は全て一致する。逆に言えば,第 60 日目以前はこの2つのソフトでズレが出てしまうので「3 月 1 日」を基準にしたというわけ。ただまぁ,それほど昔になると,今の閏年の科学的な基準を厳密に守っていたか疑問ではあるが。
なお,別のソフトではまた異なる基準を使っているようなので,以降の「通し日数」の数値は確認しながら使って欲しい。詳しくは各ソフトのヘルプを参照のこと。
ちなみに時刻は小数点以下で表されている。正午だったら小数点以下が 0.5 になる。
◆ 「平成」まではソフトが自動対応してくれたが
今まで「平成」で表示したい時は,表計算ソフトに以下のような設定をすれば済んでいた。
GGGE
ひょっとすると何のことだか分からない人もいるかもしれないので説明すると,たとえば今年の日付が入力されているセルで「書式設定」の画面を出し([Ctrl]+[1] と押してもいい,また表示された設定の画面で「ユーザー設定」をクリックして選択する必要がある場合もある),書式の欄に“GGGE”と入力し [OK] すると「平成 31」という表示になると思う。ここで「令和」と表示されたら既に対応済み。同様に“GE”だと「H31」,“GGE”だと「平 31」といった表示になる。ちなみに,“YYYY”と入力すると「2019」となる。どれも内容が変わったわけじゃなく,表示の仕方が変わっただけ。つまり,表計算ソフトが自動で日付を元号に変換して表示してくれるということ。今まで,必死で西暦の下2桁に 12 を足して書き直していた人は,時間を損していただけの話。
ただ,改元がなければそれで済んでいた。改元が決まる前までに作られたソフトでは,改元に対応したアップデートでもない限り,「令和」には自動で変換はされない。
● 「令和」で表示するためのテクニック
述べたように,日付は「数値」として扱われていて,「平成」までの文字はその「日付を表す数値」として扱うようソフトに最初から設定されているが,「令和」という「あとから決まった」元号まで自動で対応はしてくれない。「令和」は単なる文字とみなされ,数値としては扱ってくれない。そこで工夫が必要になる。
◆ 「今日」の日付を「令和」で表示する
たとえば,今日の日付を「令和」で表示する簡単な方法は,以下の式をセルに入力する。
="令和 "&(YEAR(NOW())-2018)&" 年 "&MONTH(NOW())&" 月 "&DAY(NOW())&" 日"
アルファベットのつづりに括弧()が続くものは「関数」と呼ばれ,様々な機能を呼び出せる。たとえば NOW() というのは,今日の日付の数値を示す。ここで使われている関数は,以下の通り。
- NOW() …… 今日の日付の数値を求める。
- YEAR( 日付の数値 ) …… 日付の数値の西暦年を求める。
YEAR( NOW() )- 2018 は現在の西暦から 2018 を引いた数,たとえば 2019 年なら1,2020 年なら2になる。
- MONTH( 日付の数値 ) …… 日付の数値の月(1~12)を求める。
MONTH( NOW() ) は現在の月を示すことになる。
- DAY( 日付の数値 ) …… 日付の数値の日(1~31)を求める。
DAY( NOW() ) は現在の日を示すことになる。
“&”というのは,その左右を文字として結合する。つまりこれは全体としても「文字」として扱われ,「数値」ではないため,述べたような「引き算で×日前の日付を求める」などはできなくなる。
略号で「R1.10.22」などと表示したいなら,こう。
="R"&(YEAR(NOW())-2018)&"."&MONTH(NOW())&"."&DAY(NOW())
前述“NOW()”の部分が現在の日付の数値を表すわけだが,重要なのは,これが3箇所あるという点。つまり,同じ「日付の数値」を3回使う必要があるわけだ。
◆ 改元と年の境界は一致しない
「数値として扱える」ということは,述べたように,日数計算が簡単なだけでけなく,「条件判断」も容易になるということも大きな利点。たとえば,改元日「2019-05-01」は表計算ソフトの数値では 43586 になる。つまりこの日以降は「令和」であり,これより前は「平成」だ。
表計算ソフトには IF() という関数が用意されていて,「条件式」を埋め込める。以下のように使う。
- IF( 条件式; 真の値; 偽の値 ) …… 条件式が成立(0でない)時は「真の値」,それ以外は「偽の値」を結果として求める
もし今日の日付の数値が 43586 未満なら「平成」,それ以外(つまり 43586 以上)は「令和」と表示したい場合は,以下の式になる。
=IF(NOW()<43586;"平成";"令和")
なお,上記の区切りにセミコロン(;)が使われているが,これは,筆者が使っている「OpenOffice Calc」という表計算ソフトのもので,他ソフトではこの区切りが異なる場合があるので,それぞれのソフトに合わせて変換して欲しい。たとえば「マイクロソフト・エクセル」では区切りのセミコロンをコンマ(,)に置き換えて使って欲しい。
ただ,別の意味でこの式は役に立たない。なぜかって,「今日」という日に,もう「平成」は来ないのだから。「令和」としか表示しない。
◆ 今年は「元」年と表示させたい
今年5月以降は「令和元年」だが,来年以降は「令和2年,3年」と数字になる。このように 2020 年以降は数字,今年だけ「元」を表示したい場合は,やはり条件式を使い,以下のようにする。
="令和 "&IF(2020<=YEAR(NOW());YEAR(NOW())-2018;"元")&" 年"
最初の「年月日」を表示する例と組み合わせると,以下の通り。
="令和 "&IF(2020<=YEAR(NOW());YEAR(NOW())-2018;"元")&" 年 "&MONTH(NOW())&" 月 "&DAY(NOW())&" 日"
◆ 印刷範囲から日付指定欄を分離すべき
述べてきた例は“NOW()”の部分が「今日の日付の数値」を表しているから,任意の日付を表示させたい時は,NOW() の部分を該当する日付の数値に置き換えればいいことになる。ただ,最初のほうの例でも見たように,「年,月,日」と表示させるには何度も記載する必要があり,そもそもその表示させたい「日付の数値」がいくつなのかを求める必要もあるので,それでは修正する時にかえってスゴく面倒になる。
こうした場合,「日付を指定する(だけの)セル」と,「表示/印刷で使うセル」を分離するといい。
まず,「日付を指定する(だけの)セル」には,今までどおり日付を入れる。一般的に「西暦」で表示されるが,もちろん「令和」の文字を入れてしまうと「数値」として扱えなくなるのでそのままにする。その代わり,そのセルは印刷領域の指定から外す。
一方「表示/印刷で使うセル」には述べてきたような「令和」対応の式を入れ,式の中の“NOW()”の代わりに,前述した「日付を指定する(だけの)セル」を指定する。
たとえば,一番左上の A1 のセルに日付を入れた場合,「令和」による年月日表示は以下のようになる。
="令和 "&IF(2020<=YEAR(A1);YEAR(A1)-2018;"元")&" 年 "&MONTH(A1)&" 月 "&DAY(A1)&" 日"
この式を2行めより下で使い,1行めを印刷範囲から外せば,A1 の西暦日付は印刷されず,「令和」日付だけが印刷される。A1 セルは,「○ 月×日」といった文字が表示されていても,西暦表示などの標準書式であれば,通常は上記の式の中で日付を表す数値扱いになる。
もちろん,日付を修正する時は,印刷範囲のほうはいじらず,指定するだけのセルである A1 のほうを変更するようにする。
仕上げに,「平成」の自動切り替えと組み合わせると,以下のようになる。
=IF(A1<43586;"平成 "&(YEAR(A1)-1988);"令和 "&IF(2020<=YEAR(A1);YEAR(A1)-2018;"元"))&" 年 "&MONTH(A1)&" 月 "&DAY(A1)&" 日"
以下の画像は,前述の式を期間や過去の日付計算に応用した例。画像の上のグレー背景の枠部分が「日付を指定する(だけの)セル」で,下の太枠の部分が「印刷範囲」として設定しておく部分。
▼ 期間や過去の日付計算の例 |
C2 セルに入れた日付の1年前の日がその下の C3 に計算され,その下の C4 にはさらに半年(180 日)前の日が計算される。で,各4行下の C6,C7,C8 には,それぞれの日付を元号表示するための式がコピペされている。参照しているセルは異なるが,相対的な位置関係が同一になるので,1つ式を手入力すれば,あとの2つはそのコピペで済む。
例として C2 セルに東京五輪開会日を入力すると,当日は令和2年,1年前は令和元年(閏年なので 366 日前にしてある),さらに半年前は,令和元年と同じ年でも「平成 31 年」の表示になるのが分かる。
そこで,太線の枠部分だけを「印刷範囲」にすれば,上の西暦で記載された日付部分は印刷されず,書面は「令和」の日付表示だけになる。そうやって印刷(PDF のスクショ)した結果がこちら。
▼ 印刷結果 |
入力されている値と式を全て見えるようにした画像が以下。サイズが大きく,小さい画面で見ると表示しきれないことがあるため,右クリックのメニューから「画像だけ表示」を選択するなどして見て欲しい。
▼ 期間や過去の日付計算の例 |
◆ 印刷範囲から外す方法
印刷範囲から外す方法は,以下の2つの方法のどちらかになる。
- 最初の数行を日付入力(指定)専用セルとして,そこを印刷範囲から外し,印刷したい部分は数行下から作るようにする
- 印刷するシートと日付を入力(指定)する「シートを」別にする
前者は例として挙げた画像で使った方法。入力した日付と元号の表示を同時に確認したい人は,前者がおすすめ。これなら,入力する日付と印刷される状態が1シートで一度に見れるため関係が分かり易い。
後者は,別シートのセル値の参照があるので,式が複雑になる一方,印刷されない「日付指定(西暦)」が扱うシートの中に見えないので,パッと見で「どんな書面になるか」が分かり易い。分かる人は挑戦してみてもいいと思う。筆者がよく使う方法は後者。
◆ 必ず2桁で表示させたい
これはちょっと高度。というのも,普通に数値を表示させると,どうしても高位桁の不要な「0(ゼロ)」は表示されないため。ただ,桁が揃っていたほうが見栄えするし,日付も探し易いなど,利点もある。
じつは表計算ソフトには,いちおう「必ず指定桁数で表示する」という書式が用意されている。たとえば,最初のほうで述べた「平成元号で日付を表示する」という書式指定で以下のように指定すると,元号の年と月日を全て2桁ずつで表示する。
GEE-MM-DD
何となくお分かりかと思うが,MM や DD のように2回繰り返さず,M や D とすると,10 未満は1桁で表示する。
全部を「日付」として扱うならこれで済むが,「令和(R)」はそのままでは対応しないから,年だけは日付ではなく,一般的な数値として扱う必要がある。たとえ十未満でも,必ず2桁(十の位に0)で表示させたい時は,以下のような書式設定が必要になる。
00
そして,こうした表計算ソフトの「書式」を適用する関数が用意されている。それが TEXT() 関数。
- TEXT( 数値; 書式 ) …… 数値に書式を適用して文字にする
この関数はけっこう便利。というのも,最初のほうで述べたように,元々表計算ソフトには元号書式で表示する機能があるので,平成以前の年は TEXT(A1;"GEE") とすればその機能がそのまま使えることになる。もしソフト側の書式が「明治~平成」まで対応していれば,そこに令和以降の表示条件を補足することで,全てに対応させることができる。
「R02.07.24」などと表示したい時は,これらを組み合わせて使う。たとえば A1 セルにある日付をその形式で表示させるには,以下のような式になる。
=IF(A1<43586;TEXT(A1;"GEE");"R"& TEXT(YEAR(A1)-2018;"00"))&"."&TEXT(A1;"MM.DD")
いちおう,表計算ソフトで「令和」に自動対応させる話はここまで。他の書式は,述べてきた機能を組み合わせて,使う方側で応用のほど。
● 「エクセルを使わない」という選択
ちなみに,何度か述べているが,筆者が使っている表計算のソフトは
OpenOffice と呼ばれるもの。表計算ソフトといえばエクセルが主流だが,そちらは使っていない。
とはいえ,今回のようなセルの中に指定する式での大きな相違点は,関数の括弧の中で使うデータの区切りが OpenOffice では「セミコロン(;)」だが,エクセルでは「コンマ(,)」を使うといった程度。この記事で例として挙げた式は,OpenOffice 用ではあるものの,式の中のセミコロンをコンマに置き換えれば,エクセルでもほぼ同じように使えるはずなので,試してほしい。
「何で多くの人が使っているソフトを使わないのか」と思われそうだが,それはまずエクセルに「使いにくさ」を感じるから。「神ソフト」とまで思っていた時期もあったが,今はその片鱗も感じない。
じつは「エクセル」云々ではなく,もう Windows をあまり使わなくなっている。自宅には中古のパソコンがいくつかあるが,サポートも切れているうえ,新しいセキュリティに対応できない機能などもあって,そのままでは使えない。そこで Windows は消去して,代わりに Linux
と呼ばれる OS を入れて使っている。Windows のままでは使えなくなったパソコンも,OS を Linux に入れ替えれば,何とか使い続けることができる場合もある。
もちろん「エクセル」は Windows 用に作られたソフトなので,Linux
用はない。というわけで,どうしても Linux で使える表計算ソフトということになり,OpenOffice を使っているような感じ。じつはこのソフト,Windows 用もあり,それも以前から使っていたので,Linux でも
OpenOffice を使っているというわけ。
Windows って,最新版は使っていないので筆者は詳しく知らないが,何かとアップデートがあって,その都度時間がかかって使いにくい,と聞いている。それでも「造り」がしっかりしていればまだいいが……。
先日,知り合いが買ったばかりの Windows で,警告音が止まらなくなるというトラブルに見舞われた。「二度」も!
一度目は,どうも夜中にエラーを起こしたようで,夜中じゅうずっと警告音を出していたらしい。ひょっとすると,その「アップデート」の最中にエラーを起こした可能性もある。
二度めは,たまたま筆者がその場にいる時に起きた。やはりピーピーピーピー警告音が止まらなくなり,「ここをクリックして更新してください」と表示も出ていた。が! 何かおかしいと感じた筆者は,「それ押さないでください!」と使用者を制止し,他のパソコンから同現象について検索をかけた。案の定,詐欺サイトにつながる罠だった。ブラウザを閉じてことなきを得た。
ネットで見た記事によると,どうやらその詐欺警告,Windows に標準搭載されているブラウザと,一部他のブラウザでも出るようで,勝手に入り込んで来るらしい。買ったばかりですよ!? いきなり詐欺サイトにつながるなんて思っていない人は,かなりクリックしてしまっているのではないかと思う。
これが,筆者の見た最新 Windows のセキュリティ。
こうした詐欺というのは,「下手な鉄砲」式に罠を大量に仕掛けて,引っかかる「カモ」を待つ。だから,大量に仕掛けられる=多くの人が共通して使っている機械を狙うのが一般的。Windows は恰好の猟場だ。一方,Linux は使っている人が少ないため,その手の詐欺に狙われにくい。詐欺警告が勝手に入り込む Windows 特有のブラウザも使えないので,そうした点でも安全性は高いと思う。
そんなわけで,エクセルが「使えない」機械を使用している筆者は,OpenOffice のような,あまり一般的ではないソフトを使わざるを得ない。問題は,外部の人とデータの交換が必要になった時かもしれない。が,ほとんど不自由はない。OpenOffice は PDF を直接作成する機能があるし,最近はたいていどんな機械でも PDF を扱えるので,それほど困らない。ちょっと前,福祉機器の会社をお手伝いした時も,お相手の会社は OpenOffice を使用しているという話はなかった(使っていないと思う)が,全て OpenOffice で作成した PDF でデータのやりとりをしていて,何の問題もなかった。
筆者が OpenOffice を使うのは,操作性が旧来のソフトに近いことも理由。昔ながらの「ツールバー」とキーボードショートカットなので,古いエクセルから移行する時もスムーズだった気がする。むしろ,以前のエクセルを使っていた人が,最新版エクセルに移行するほうがハードルが高いのではないか……筆者はそう感じるレベル。
そして何より「無料」というのが利点。有償ソフトは,インストールするパソコンごとに「ライセンス」の購入が必要で,予算の関係で全てのパソコンに一度にインストールすることができないと,バージョンの違いによってパソコン間で書式がズレてしまったりすることがあるかもしれないが,無料なら,全てのパソコンに同じソフトをインストールして使えるから,バージョンも全て揃えることができ,書式のズレなども気にする必要がない。
「でも,今までエクセル使ってきたし……」と思っている方に,無理におすすめするものではないけど。ただ,それで「資金難だー!」とか訴えるようでは,矛盾するような気もしますけどね。
ソフトウエアは「何を使うのか」より,何であれ「うまく使えるか」が重要だと思うのですよ。