web-dev-qa-db-ja.com

Excelで非標準の日付形式を解析するにはどうすればよいですか?

yyyy-mm-ddなど、2011-Sep-13の形式の日付のような文字列値の列があります。これらを数式で使用できるように、Excelの日付のシリアル値に変換する必要があります。

DATEVALUEはこの形式を認識できません。試してみると、#VALUE!が表示されます。また、ほとんどのプログラミング言語とは異なり、カスタムの日付形式を使用しません。

任意の日付形式をExcelの日付値に変換するにはどうすればよいですか?

24
Craig Walker

文字列の解析を行ってから、適切なフォーマット済みの値をDATEVALUEに渡す必要があります–次のようなものです:

=DATEVALUE(RIGHT(A1,2)&"-"&MID(A1,6,3)&"-"&LEFT(A1,4))

(編集:更新された式-テスト済みで、1つの例で機能します-入力によっては調整が必要になる場合があります)

21
Aerik

月の名前はWindowsの地域オプション固有であることに注意してください。したがって、Windowsの地域オプションがウクライナ語に設定されている場合、DATEVALUEは#VALUE!を返します。 「07-Nov-2012」の場合、「07-Лис-2012」を受け入れます。

6
Olexa

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
2
CodeKid