文字列を日付に変換したいときはないでしょうか。
けど、そんな中で悩むことは、
・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(時刻文字列) |
また、今回一緒に利用するシリアル値を日付に変換する関数一覧は以下の通りです。
関数名 | 機能 | 書式 |
---|---|---|
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で文字列を日付に変換する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す