データによっては、日付が「8桁の数字」として記録されているケースもある。たとえば、2023年8月7日の日付が「20230807」と表記されている場合などだ。今回は、こういった「8桁の数字」を「日付データ」(シリアル値)に変換する方法、ならびに、その逆変換について紹介していこう。

「8桁の数字」を「日付データ」に変換する方法

システムからダウンロードしたデータを扱うときに、日付が「8桁の数字」で記録されているデータに遭遇することもある。たとえば、2022年12月15日は「20221215」、2023年8月7日は「20230807」という具合に日付が記録されているケースもある。このような記述形式は、日付を含むファイル名にもよく利用されている。

ただし、このままでは日付データとして扱えないので、文字を抜き出す関数LEFT、MID、RIGFHTを使って「8桁の数字」を「日付データ」(シリアル値)に変換する方法を紹介していこう。

  • 文字を抜き出す関数LEFT、MID、RIGFHTの応用的な使い方

ここでは、あるユーザーのポイント履歴を記録した表を使って、具体的な手順を解説していこう。この表の1列目には、日付が「8桁の数字」で記録されている。

  • 「8桁の数字」で日付が記録されている表

まずは、データ変換用に列を挿入する。

  • 変換用の列を挿入

続いて、「8桁の数字」から最初の4文字(年)、中間の2文字(月)、最後の2文字(日)を抜き出す作業を進めていく。このように、データから「指定した数」だけ文字を抜き出したいときは、LEFT、MID、RIGHTといった関数を活用するとよい。

「関数LEFT」は、データの先頭から指定した「文字数」だけ文字を抽出する関数となる。その書式は以下のとおりで、第1引数に「文字列」、第2引数に抜き出す「文字数」を記述する。

◆関数LEFTの書式
 =LEFT(文字列, 文字数)

関数LEFTは、基本的に「文字列データ」に対して使用する関数となるが、今回の例のように「数値データ」に対して文字の抽出を行うことも可能だ。今回の例の場合、以下のように関数LEFTを記述すると、「8桁の数字」から「最初の4文字」を抽出できる。

  • 関数LEFTを使った「年」の抽出

  • 文字列データとして抽出された「年」

これで「年」の部分だけを抽出できたことになる。なお、抽出結果が「左揃え」で配置されていることからも分かるように、抽出後のデータは「文字列データ」として扱われる仕様になっている。

続いては、「関数RIGHT」の使い方を紹介していこう。こちらは、データの末尾から指定した「文字数」だけ文字を抽出する関数となる。

◆関数RIGHTの書式
 =RIGHT(文字列, 文字数)

たとえば「=RIGHT(A2,2)」と関数を記述すると、「A2セルのデータ」から「末尾の2文字」だけを抜き出すことが可能となる。A2セルが日付を示す「8桁の数字」であった場合は、「日」の部分だけを抽出できることになる。

最後に紹介する「関数MID」は、データの中間部分にある文字を抜き出す関数となる。引数は3つ必要で、「何文字目から」を第2引数、「何文字分」を第3引数で指定する仕様になっている。

◆関数MIDの書式
 =MID(文字列, 開始位置, 文字数)

たとえば「=MID(A2,5,2)」と関数を記述すると、「A2セルの5文字目から2文字分」のデータを抜き出すことができる。A2セルが日付を示す「8桁の数字」であった場合は、「月」の部分だけを抽出できることになる。

このようにLEFT、MID、RIGHTといった関数を使うと、「年」、「月」、「日」に相当する文字(数字)だけを抽出することが可能となる。あとは、関数DATE(※)で「日付データ」に変換するだけだ。

(※)関数DATEの使い方は、第17回の連載で詳しく解説。

  • 年/月/日を抽出し、関数DATEで日付データを作成

関数DATEの引数は「数値データ」で指定するのが基本となるが、今回の例のように「数字だけの文字列データ」であった場合、Excelが勝手に「数値データ」に変換してくれる。よって、問題なく使用することが可能だ。

「Enter」キーを押して関数を実行すると、正しく「日付データ」に変更されていることを確認できるだろう。

  • 「日付」に変換されたデータ

以上が「8桁の数字」を「日付データ」に変換するときの正攻法となる。LEFT、MID、RIGHTといった関数は「文字列データ」に対して使用するのが一般的であるが、今回の例のように「数値データ」に対して活用できるケースもある。

もっと手軽に「日付データ」に変換するには?

続いては、もっと手軽に「8桁の数字」を「日付データ」に変換する裏技を紹介していこう。具体的には、関数TEXTを使って「4桁/2桁/2桁」の表示形式に強制的に変換する方法だ。

なお、第2引数で表示形式を指定するときは、「/」のコードが「割り算」として機能することに注意しなければならない。「/」を文字として扱うには、その前に「!」のコードを記述しておく必要がある。

  • 関数TEXTを使った「日付」への変換

この方法でも「8桁の数字」を「年/月/日」という形式に変換できる。ただし、データが「左揃え」で配置されていることからも分かるように、このデータは「文字列データ」として扱われている。

  • 「日付」の形式に変換されたデータ(文字列データ)

これを「数値データ」(シリアル値)にするには、全体を関数VALUEで囲むか、もしくは最後に「*1」(掛ける1)の数式を追加しておく必要がある。

  • 数値データ(シリアル値)として扱う場合

すると「文字列の日付」が「数値データ」に変換され、そのシリアル値が表示される。

  • シリアル値に変換されたデータ(数値データ)

あとは、セルの表示形式を「日付」に変更するだけ。これで「日付データ」として扱えるようになる。

  • 「日付」の表示形式を指定

このように関数TEXTを使って「8桁の数字」→「日付データ」の変換を行うことも可能である。日付以外の場面にも応用できるので、覚えておくと役に立つだろう。

「日付データ」を「8桁の数字」に変換する方法

これまでの内容とは逆に、「日付データ」を「8桁の数字」に変換する方法も紹介していこう。まずは正攻法の考え方で変換する場合だ。

日付データから「年」、「月」、「日」を取り出すときは、YEAR、MONTH、DAYといった関数を利用する(※)。あとは、抽出した「年」、「月」、「日」を「&」で結合すればよい。

(※)これらの関数の使い方は、第16回の連載で詳しく解説。

  • 関数YEAR、MONTH、DAYを使った変換

これで「/」を除いた形の「文字列データ」に変換できるが、この方法は失敗例と言わざるを得ない。というのも、「月」や「日」が必ずしも2桁の数字になるとは限らないからだ。このため、全体で「8桁の数字」にならないケースが多々ある。

  • 変換されたデータ(失敗例)

「月」や「日」を必ず2桁の数字にするには、関数TEXTを使って表示形式を指定しなければならない。よって、以下のように記述するのが正しい手法となる。

  • 関数TEXTを使って月日を必ず2桁で表示

これで日付「8桁の数字」に変換できる。あとはオートフィルを使って数式(関数)をコピーするだけ。以上が、正攻法での変換手順となる。

  • 変換されたデータ(成功例)

こちらも関数TEXTを使った裏技を紹介しておこう。この場合は、表示形式を"yyyymmdd"と指定すればよい。

  • 関数TEXTを使った裏技

すると「4桁の年」、「2桁の月」、「2桁の日」が区切り文字なしで出力されるため、結果として「8桁の数字」に変換できる。

  • 変換されたデータ

なお、上記に示した正攻法と裏技は、いずれも「8桁の数字」が「文字列データ」として扱われることに注意しなければならない。これを「数値データ」に変換するには、全体を関数VALUEで囲むか、もしくは最後に「*1」(掛ける1)の数式を追加しておく必要がある。

  • 数値データとして扱いたい場合

すると、以下の図のように「#」が何個も並ぶ結果が表示される場合がある。これは「日付」の表示形式が引き継がれてしまい、「8桁の数字」がシリアル値として扱われていることが原因だ。この場合の日付は西暦1万年以上になってしまうため、正しく表示できないことを示す「#」の羅列になってしまう。

この表示を修正するには、セルの表示形式に「標準」や「数値」を指定しなければならない。

  • 表示形式の指定

すると、「8桁の数字」がそのまま「数値データ」として表示されるようになる。

  • 「8桁の数値」に変換された日付

以上が「8桁の数字」と「日付データ」を相互に変換する手法となる。

「8桁の数字」で記された日付を扱う機会がない方には使い道のないテクニックかもしれないが、関数LEFT、MID、RIGHTを使った「文字の抽出」、関数TEXTを使った「表示形式の変更」は色々な場面に応用できるので、覚えておいても損はないだろう。参考にして頂ければ幸いだ。