8桁の数値を日付に変換する


先日ふと、この件を思い出して「ああ、そういえば、コンテンツとして書いていなかったなぁ~」と気づきました。簡単なので、書いておきます。下図のように、日付のつもりで作られた8桁の数値を、Excelが日付と認識できるシリアル値に変換する方法です。

基幹システムなどから提供されたデータでは、よくこういうのがありますよね。こういうデータを与えられたとき「ちっ!なんで日付形式(シリアル値)にしないんだよ!ったく」と、文句を言いたくなる気持ちは分かりますが、しかたありません。日付をシリアル値という仕組みで計算するというのは、Excelに備わった素晴らしい機能です。ほかのシステムなどに、そんな仕組みはありません。つまり、Excelの方が先を行っているんです。Excelについてこられない、そんな程度のシステムが作るデータですから、まぁ、ここはひとつ温かい気持ちで許してあげましょう。とはいえ、こうした"なんちゃって日付もどき"を渡されたときは、Excel側で何とか日付(シリアル値)に変換しなければなりません。その方法は、いくつかあります。本稿では手動操作で変換する方法をご紹介しますが、「取得と変換(Power Query)」を使うやり方や、マクロで変換する方法は下記をご覧ください。ちなみに、マクロでやるならコードは1行で済みます。

取得と変換(Power Query):数値を日付に変換

VBA Tips:8桁数値を日付に変換する

私だったら、たぶんワークシート関数で変換します。そのやり方は、いずれ別のコンテンツとして書きます。

さて、今回使うのは「区切り位置」という機能です。簡単ですから、手順をご紹介します。まず、8桁の数値が入力されているセル範囲を選択します。

[データ]タブ[データツール]グループの[区切り位置]をクリックします。

実行すると[区切り位置指定ウィザード - 1/3]ダイアログボックスが表示されます。

[元のデータの形式]で[コンマやタブなどの区切り文字によってフィールドごとに区切られたデータ]が選択されているのを確認して、[次へ]ボタンをクリックします。

次の[区切り位置指定ウィザード - 2/3]では何もしません。このまま[次へ]ボタンをクリックします。

表示される[区切り位置指定ウィザード - 3/3]ダイアログボックスで、まず[列のデータ形式]で[日付]を選択します。その右に表示されている「YMD」は気にしなくていいです。この画面では、もうひとつ「変換した日付(シリアル値)を、どの列に代入するか」を指定します。標準では、あらかじめ選択している列に"上書き"で代入されるようになっています。それでいいなら、このまま[完了]ボタンをクリックします。今回は、8桁の数値が入力されている列ではなく、隣のB列に日付を代入しますので、[表示先]ボックス右端にある[セル選択]ボタン(↑)をクリックして、代入したい先頭セル(ここではセルB2)をクリックします。

[セル選択]ボタン(↓)をクリックすれば元の状態に戻ります。最後に[完了]ボタンをクリックしてください。

B列にはシリアル値が入力されていますので、お好きな表示形式を設定してください。