(Excel)文字列を日付に変換する方法

 Excelで、セル内に文字列として記録されている日付を通常の日付(シリアル値(数値)を日付の表示形式にしたもの)に変換する方法についてです。
 関数による方法とメニュー操作による方法を紹介します。

関数による方法

日付とみなされる文字列の場合

 B列に様々な形式の日付文字列が記録されています(実際には「'2016/3/14」のように入力しています)。
 数値を同様に入力した場合はセルの左上に緑の三角マークが表示されてクリックすると数値に変換したりできますが、日付の場合はそのように簡単に日付に変換するメニューが現れません。
 そこでここでは関数(数式)を使って日付に変換してみます。

 なお、ここに示したような文字列はそのままでも日付関数(DAY関数やDATEDIF関数など)では日付とみなされます。本当に変換する必要があるかどうかは利用方法に応じてご検討ください。



 実際に変換してみます。
 まず次の画像ではC列に数式を入力して、各文字列を数値に変換しています。

 C3セル(C7セルまでフィルコピー)

=B3*1

 単純に参照して「*1」をつなげることで文字列が5桁の数値に変換されました。
 Excelで通常「日付」と呼ばれるものの正体はシリアル値と呼ばれる数値であり、データの「型」としての変換はこれだけで完了していることになります。



 ただしそれでは(人間には)いつの日付かわかりませんので、続いて書式(表示形式)を変更します。
 数式を入力したC3:C7セルの範囲を選択し、右クリックして「セルの書式設定」を選択するとダイアログが現れます。そこで「表示形式」タブを選択し左側の欄から「日付」を、右側の欄から適当な見た目の表示形式を選択して最後にOKボタンをクリックします。

 


 以上で通常目にするような日付に変換されました。

 なお、シリアル値に変換するための数式は「=DATEVALUE(B3)」や「=VALUE(B3)」でも同じ結果となります。
 意味が分かりやすいのはDATEVALUE関数ですが、ここでも最も簡単なものを使用しました。

8桁の数字の場合

(※数式のみ実行すると数値が表示されますが、表示形式の変更は上記例と同じなので省略し、その結果のみ示しています)

 区切り文字のない8つの数字(西暦4桁,月2桁,日2桁)を日付とみなして日付に変換するケースです。
 LEFT関数やMID関数などを使って年月日をそれぞれ切り分ける方法もありますが、ここではTEXT関数を使っています。

 C3セル(C7セルまでフィルコピー)

=TEXT(B3,"0000!/00!/00")*1

 TEXT関数は、値に特定の書式を適用した文字列を得る関数です。ここではB3セルの値を「/」で区切った文字列を取得し(「2019/02/24」といった文字列が得られます)、1をかけてシリアル値に変換しています。
 式中の「!」は次の「/」を特殊な意味を持つ文字とみなさないための記号(エスケープ)です。また、日付に変換するからといって「"yyyy!/mm!/dd"」などとするとうまくいきません。

日付とみなされない区切り文字を使っている場合

(※数式のみ実行すると数値が表示されますが、表示形式の変更は上記例と同じなので省略し、その結果のみ示しています)

 区切り文字によっては文字列が日付とみなされないので、最初の例のような「*1」などではうまくいきません。
 ここでは区切り文字が「_」なので「=B3*1」のなどの数式ではシリアル値に変換されずエラーとなります。そこで文字列の置換を行って対処しています。

 C3セル(C7セルまでフィルコピー)

=SUBSTITUTE(B3,"_","/")*1

 SUBSTITUTE関数を使い、区切り文字を「/」に置き換えています。これにより(最初の例のような)日付とみなされる文字となるのであとは「*1」をつけてシリアル値に変換しています。月や日の桁数を考慮する必要がなく2桁固定(09など)でも1桁/2桁の混在でも適用でき、年が和暦の文字列にも対応します。

「区切り位置」メニューによる方法

 セルに入力されている文字列を直接日付に変換する方法です。
 関数の場合と異なり、書式(表示形式)を設定しなくても(数値ではなく)日付として表示されます。


 まずは対象となる文字列が入っている範囲(ここではB3:B7)を選択し、「データ」タブにある「区切り位置」を選択します。

 


 ダイアログが現れます。
 ここでは「コンマやタブなどの~」を選択した状態で「次へ」をクリックします。

 


 次に区切り文字の選択になりますが、ここでは何も指定する必要はありません。正確には実際に含まれる区切り文字を指定しないようにします。
 文字列に含まれている区切り文字(ここでは「_」)を指定してしまうと、年・月・日の値が複数セルに分割されるという結果になるからです。

 


 最後にデータ形式の選択です。
 ここでは左側にある「日付」を選択し、プルダウンからは文字列中の年月日の並び順(このケースでは年,月,日の順なのでYMD)を選びます。
 なお区切り文字が「/」の場合は「G/標準」のままでもうまくいきます。

 


 完了ボタンをクリックすると文字列が日付に変換されました。