R5(令和5年)やH15(平成15年)のように、和暦の年号をS、H、Rなどのアルファベットで示す場合もある。今回は、こういった年表記を「西暦の数値」に換算する方法を紹介していこう。また、今回の内容に関連する話として「文字列を操作する関数」の使い方も覚えていくとよい。Excelには、文字列を操作する関数が幅広く用意されている。
H15のように記された「平成の年」を西暦に換算
今回は「関数REPLACE」を使って、R5(令和5年)などの年表記を「西暦の数値」に換算する方法を紹介していこう。そのほか、文字列データを数値データに変換する「関数VALUE」、日付データから年だけを取り出す「関数YEAR」なども使い方次第で便利に活用できる。あわせて覚えておくと役に立つだろう。
ここでは、会員の「氏名」と「登録年」をまとめた表を使って具体的な操作手順を示していこう。この表には「登録年」のデータがH15(平成15年)やH3(平成3年)といった形式で記録されている。このままでは少しわかりづらいので、これらの年表記を「西暦の数値」に換算してみよう。
平成X年を西暦に換算するときは、X年に1988年を足し算してあげればよい。ただし、現時点では「H15」などのデータが「文字列」として扱われているため、そのまま計算しようとするとエラーが発生してしまう。
このような場合は「H」の文字を削除して「数字だけのデータ」に変更してあげると、計算を実行できるようになる。文字を削除する方法は色々と考えられるが、今回は文字を置き換える関数「REPLACE」を使ってみよう。
関数REPLACEを使用するときは、以下のような書式で関数を記述する。第1引数には、置換前の「文字列データ」をセル参照などで指定する。続いて、第2引数以降で「置き換える文字」を指定していく。
◆関数REPLACEの書式
=REPLACE(文字列, 開始位置, 文字数, 置換文字列)
関数REPLACEは、「N文字目」から「M個の文字」を「置換文字列」に置き換える、という形式で置き換える文字を指定する仕組みになっている。
今回の例のように「最初の1文字」を削除したい場合は、「1文字目」から「1個の文字」を「空文字」に置き換える、と指定すればよい。よって、以下の図のように関数REPLACEを記述する。
「Enter」キーを押して関数を実行すると、最初の1文字(H)が削除されて、数字だけのデータになることを確認できる。
このデータは「H15」の文字列から「H」を削除したデータになるため、現時点ではまだ「文字列データ」として扱われている。このため、データは「左揃え」で配置されている。
一般的に「文字列データ」は計算できないため、「+」(足し算)や「*」(掛け算)などの演算記号で計算しようとするとエラーが発生してしまう。ただし、「文字列」を「数値」とみなせる場合は例外となる。この場合は、Excelが自動的に「文字列」→「数値」の型変換を行ってくれるため、そのまま数式を記述しても構わない仕様になっている。
今回の例の場合、関数REPLACEで「H」を削除すると「15」という文字列データになる。このデータは「数値」とみなせるため、文字列データであってもそのまま計算することが可能だ。よって、以下のように数式を記述してもエラーは発生しない。
あとは、この数式をオートフィルでコピーするだけ。これで全データの「登録年」を「西暦の数値」に換算できる。
このように「数字以外の文字」を削除することで、「文字列」を計算可能なデータに変更する手法もある。単位付きの数字(文字列データ)を計算したい場合にも応用できるので、その仕組みをよく理解しておくとよいだろう。
昭和(S)、平成(H)、令和(R)が混在している場合は?
続いては、昭和(S)、平成(H)、令和(R)が混在している年表記を「西暦の数値」に換算する方法を紹介していこう。
この場合は、それぞれの年号に応じて「足し算する数値」を変化させる必要がある。具体的には、以下のような処理を行わなければならない。
S(昭和)の場合 ・・・・ 1925を足し算する
H(平成)の場合 ・・・・ 1988を足し算する
R(令和)の場合 ・・・・ 2018を足し算する
これをExcelで実現するには、(1)最初の1文字(S/H/R)を抜き出して、(2)関数IFSなどで条件分岐し、(3)最初の1文字(S/H/R)を削除した数字に、(4)各年号に応じた数値を足し算する、という処理を行わなければならない。とはいえ、この処理を「関数」や「数式」で記述するのは相当に困難な作業になるはずだ。そこで、もっと簡単な別の方法を紹介していこう。
まずは、文字を結合する演算子「&」を使って適当な"/月/日"を追加する。ここでは「1月1日」の日付を追加してみよう。以下のように、文字を連結する式を記述する。
これで「登録年」のデータを「日付データ」とみなせる形に変更できた。ただし、現時点では"/1/1"の文字を追加しただけなので、まだ「文字列データ」として扱われている。
これを「数値データ」に変換するときは、前回の連載で紹介した関数VALUEを利用する。
すると、「日付の文字列」を「日付データ」(シリアル値)として扱えるようになる。
続いて、関数YEARで「日付データ」から「年」だけを取り出す。これで「西暦の数値」に換算できる。なお、関数YEARの使い方は第16回の連載で詳しく紹介しているので、よく分からない方はあわせて参照しておくとよいだろう。
あとは、この数式をオートフィルでコピーするだけ。これで全データの「登録年」を「西暦の数値」に換算できる。
このように「年」を示す文字列に"/月/日"を追加して関数VALUEで変換することで、「日付データ」として扱う手法もある。色々な場面に応用できるので、覚えておくと役に立つだろう。
なお、関数YEARは「日付データ」を「文字列」で指定することも可能であるため、関数VALUEを省略した形で数式を記述できるケースもある。
ただし、状況によってはエラーが発生するケースもあるようなので、関数VALUEで「日付データ」(シリアル値)に変換してから、関数YEARなどを使用するのが基本となる。このあたりは詳しい情報がないため、実際に試しながら使用していく必要があるだろう。
いずれにしても、「文字列データ」を少し加工して「数値データ」や「日付データ」として扱えるようにするテクニックが重要であることに変わりはない。そのためには、文字列を操作する関数の使い方を学んでおく必要がある。
ということで次回は、20230731のように「8桁の数字」で記された日付を「日付データ」に変換する方法、ならびに、その逆変換を行う方法を紹介していこう。