yyyy-mm-dd
など、2011-Sep-13
の形式の日付のような文字列値の列があります。これらを数式で使用できるように、Excelの日付のシリアル値に変換する必要があります。
DATEVALUEはこの形式を認識できません。試してみると、#VALUE!
が表示されます。また、ほとんどのプログラミング言語とは異なり、カスタムの日付形式を使用しません。
任意の日付形式をExcelの日付値に変換するにはどうすればよいですか?
文字列の解析を行ってから、適切なフォーマット済みの値をDATEVALUE
に渡す必要があります–次のようなものです:
=DATEVALUE(RIGHT(A1,2)&"-"&MID(A1,6,3)&"-"&LEFT(A1,4))
(編集:更新された式-テスト済みで、1つの例で機能します-入力によっては調整が必要になる場合があります)
月の名前はWindowsの地域オプション固有であることに注意してください。したがって、Windowsの地域オプションがウクライナ語に設定されている場合、DATEVALUEは#VALUE!を返します。 「07-Nov-2012」の場合、「07-Лис-2012」を受け入れます。
ExcelのDateValue関数は地域に依存します。 「04-11-2008」のような文字列をヨーロッパでは11月4日として、米国では4月11日として解析するとします。
これを回避するには、DateSerial関数を使用して、自分で解析を行います。これは、独自の非標準日付形式にも簡単に適合させることができます。
' Region independent date parsing
' Expects a datetimestr in the format "04-11-2008 21:39:39"
' The function VBA.DateTime.DateValue() mixes up the date and month in different regions
Function parseDateTime(dateTimeStr As String) As Date
Dim parts As Variant
parts = VBA.Strings.Split(dateTimeStr, " ")
Dim datePart As String, timePart As String
datePart = parts(0)
timePart = parts(1)
Dim dateParts As Variant, day As Integer, month As Integer, year As Integer
dateParts = VBA.Strings.Split(datePart, "-")
day = dateParts(0)
month = dateParts(1)
year = dateParts(2)
Dim parsed_date As Date, parsed_time As Date
parsed_date = VBA.DateTime.DateSerial(year, month, day)
parsed_time = VBA.DateTime.TimeValue(timePart)
parseDateTime = parsed_date + parsed_time
End Function