Excel文字列を日付に変換する方法!関数の他VBAで処理も!

文字列を日付に変換したいときはないでしょうか。

けど、そんな中で悩むことは、

・関数で文字列を日付に変換したいが方法がよくわからない
・VBAで文字列を日付に変換したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・関数で文字列を日付に変換する方法
・VBAで文字列を日付に変換する方法

についてまとめます!

Excelで扱う日付の文字列とはなに?

Excelで扱う日付の文字列とは、日付と時間に変換できる文字列のことを差します。

Excelでは日付データをシートでは「1900/1/1 0:00:00」をVBAでは「1899/12/31 0:00:00」を「1.0」として保持する数値でもっており、整数部分が日付、小数点以下が時刻として扱われています。

この数値をシリアル値といい、今回は日付文字列をこのシリアル値に変換し、日付データとして算出していきます。

関数で文字列を日付に変換する方法

文字列を日付に変換する関数一覧

文字列を日付に変換する関数一覧は以下の通りです。

関数名 機能 書式
DATE 指定された日付に対応するシリアル値を返します。時間は変換されません。 =DATE(年, 月, 日)
DATEVALUE 日付を表す文字列をシリアル値に変換します。 =DATEVALUE(日付文字列)
TIME 指定された時刻に対応するシリアル値を返します。 =TIME(時, 分, 秒)
TIMEVALUE 時刻を表す文字列をシリアル値に変換します。 =TIMEVALUE(時刻文字列)

タカヒロ
タカヒロ
シート関数ではVBAのCdata関数のように日時文字列を同時にシリアル値に変換する関数は用意されていませんので、日と時間でそれぞれシリアル値を求めて合算する必要があります。

また、今回一緒に利用するシリアル値を日付に変換する関数一覧は以下の通りです。

関数名 機能 書式
YEAR シリアル値を年に変換します。 =YEAR(シリアル値)
MONTH シリアル値を月に変換します。 =MONTH(シリアル値)
DAY シリアル値を日付に変換します。 =DAY(シリアル値)
WEEKDAY シリアル値を曜日に変換します。 =WEEKDAY(シリアル値, [種類])
HOUR シリアル値を時刻に変換します。 =HOUR(シリアル値)
MINUTE シリアル値を時刻の分に変換します。 =MINUTE(シリアル値)
SECOND シリアル値を時刻の秒に変換します。 =SECOND(シリアル値)
DATESTRING 文字列を和暦で表示します。 =DATESTRING(文字列)

次にそれぞれの関数の結果についてみてみましょう。

日時を表す文字列は以下とします。

2022年7月22日 1:35:40

この文字列を日付型データ、すなわちシリアル値に変更し、シリアル値から年月日と時刻を求めていきます。

シリアル値変換関数は以下のようにそれぞれB2セルのシリアル値を参照する数式を入力してください。

=YEAR(B2)
=MONTH(B2)
=DAY(B2)
=WEEKDAY(B2)
=HOUR(B2)
=MINUTE(B2)
=SECOND(B2)
=DATESTRING(B2)

日付文字列を日と時刻に分割する

日付文字列では日と時刻が含まれており、ワークシート関数では日時を同時にシリアル値に変換することはできないため、日と時刻に分割していきます。

日にちを抽出する

FIND関数で日時の区切り文字の位置を判定し、それより前の文字列をLEFT関数で取得します。

=LEFT(B1,FIND(" ",B1))

   時刻を抽出する

次に時刻を取得していきます。

LEN関数で文字列の文字数を算出し、FINDで求めた区切り文字の位置をマイナスし、区切り文字以降の文字数を算出します。
RIGHT関数で後半から区切り文字までの文字を抽出していきます。

=RIGHT(B1,LEN(B1)-FIND(" ",B1))

日にちのシリアル値を求める

日にちのシリアルをDATEVALUE関数で求めていきます。

=DATEVALUE(D1)

時刻のシリアル値を求める

時刻のシリアルをTIMEVALUE関数で求めていきます。

=TIMEVALUE(E1)

日にちと時刻のシリアル値を合算する

仕上げに日にちと時刻のシリアル値を合算します。

=D2+E2

日にちと時刻のシリアル値から年月日と時刻を算出する

日にちと時刻のシリアル値から年月日と時刻を算出して完了です!

タカヒロ
タカヒロ
文字列を日付型に変更して日付として扱うにはシリアル値へ変換する必要があることがわかりましたね。

VBAで文字列を日付に変換する方法

VBAで文字列を日付に変換する方法について説明をします。

文字列「2022年7月22日 1:35:40」を一旦シリアル値へ変換し、そのシリアル値から年月日、時刻を求めていきます。

なお、シリアル値から変換をする関数はDATESTRINGを除き、ワークシート関数と同様となります。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 文字列から日付文字を出力する()

    '小数点を含むためDouble型で定義します。
    Dim doubSirial As Double
    
    'シリアル値を変数に代入します。
    doubSirial = CDate(Range("B1").Value) '日時をシリアル値へ変換します。
    'doubSirial = DateValue(Range("B1").Value) '日にちをシリアル値へ変換します。
    'doubSirial = DateSerial(2022, 7, 22) '日にちをシリアル値へ変換します。
    Range("B2").Value = doubSirial  'シリアル値をセルへ出力します。
    Range("B6").Value = Year(doubSirial)  'シリアル値を年に変換します。
    Range("B7").Value = Month(doubSirial) 'シリアル値を月に変換します。
    Range("B8").Value = Day(doubSirial) 'シリアル値を日付に変換します。
    Range("B9").Value = Weekday(doubSirial) 'シリアル値を曜日に変換します。
    Range("B10").Value = Hour(doubSirial) 'シリアル値を時刻に変換します。
    Range("B11").Value = Minute(doubSirial) 'シリアル値を時刻の分に変換します。
    Range("B12").Value = Second(doubSirial) 'シリアル値を時刻の秒に変換します。
End Sub

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

シリアル値がそれぞれの日付関数に準じた値に変換され出力されましたね。

VBAの説明

VBAについて説明をします。

小数点を含むためDouble型で定義します。

Dim doubSirial As Double

日時をCDate関数を使用し、シリアル値へ変換します。

doubSirial = CDate(Range("B1").Value)

なお、以下の関数でもシリアル値の変換が可能ですが、この場合は日にちのみが対象となります。

doubSirial = DateValue(Range("B1").Value) '日にちをシリアル値へ変換します。

 

doubSirial = DateSerial(2022, 7, 22) '日にちをシリアル値へ変換します。

結果は日にちのみ変換される形になります。

シリアル値を変数に代入します。

doubSirial = Range("B1").Value

それぞれの日付関数に準じてシリアル値が変換され、セルへ出力します。

Range("B4").Value = Year(doubSirial) 'シリアル値を年に変換します。
Range("B5").Value = Month(doubSirial) 'シリアル値を月に変換します。
Range("B6").Value = Day(doubSirial) 'シリアル値を日付に変換します。
Range("B7").Value = Weekday(doubSirial) 'シリアル値を曜日に変換します。
Range("B8").Value = Hour(doubSirial) 'シリアル値を時刻に変換します。
Range("B9").Value = Minute(doubSirial) 'シリアル値を時刻の分に変換します。
Range("B10").Value = Second(doubSirial) 'シリアル値を時刻の秒に変換します。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・関数で文字列を日付に変換する方法
・VBAで文字列を日付に変換する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です