エクセルで文字列を日付に変更するfuncitonを作成してみました。CSVなどで日付がExcelでは自動で日付として判定されない形式の場合に、日付に変更できるように作成してみました。
作ったfunctionの特徴
- 引数は2つで、変換する対象の文字列、変換するためのフォーマットの文字列
- 引数はセルを指定でも、文字列を引数に直接指定でも、作動する
- 令和と西暦のみ対応。西暦は2桁は20xx年に変換される
- フォーマットは先頭からの文字数でしか判定しないので区切り文字は何でも可
- フォーマットは、令和はRR、西暦はYY、YYYYY、月はMM、日はDDで表す
文字列を日付に変換するfunction
完成版のVBAのコードです。
Function StrToDate(dateStrorRng, formatStrorRng) As Date 'フォーマットは、西暦はY,令和はR、月はM、日はDで表す 'それ以外の文字は判定に使われないので文字数の調整のため何の文字でも可 ' RR/MM/DD もRR.MM.DD も同じ '西暦はYで2桁の場合は20XX年になる。 '平成や昭和は対応していない。 Dim date_str As String Dim format_str As String Dim date_len As Long Dim format_len As Long Dim try_times As Long Dim r As Long Dim RR As String Dim MM As String Dim DD As String Dim YY As String Dim cha As String Dim y As Long Dim m As Long Dim d As Long Dim output_date date_str = dateStrorRng format_str = formatStrorRng RR = "" MM = "" DD = "" YY = "" date_len = Len(date_str) format_len = Len(format_str) If date_len > format_len Then try_times = format_len Else try_times = date_len End If For r = 1 To try_times cha = Mid(date_str, r, 1) Select Case Mid(format_str, r, 1) Case "R" RR = RR & cha Case "M" MM = MM & cha Case "D" DD = DD & cha Case "Y" YY = YY & cha Case Else 'パス End Select Next '年 If RR = "" Then y = Val(YY) If y < 100 Then y = y + 2000 End If Else y = Val(RR) + 2018 End If '月日 m = Val(MM) d = Val(DD) output_date = y & "/" & m & "/" & d StrToDate = DateValue(output_date) End Function
Excelのシートで関数として使用できます。
ただし、月や日が2桁で 04 や 06 のように表示されている場合限定となっています。
05.4.1などの場合は上手く変換できません。
正規表現など使えば上手くいくのかもしれません。
まとめ
このfunctionを使用することで、Excelのセルの文字列を日付にしてセルに出力することができます。
コメント