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


24

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

DATEVALUEはこの形式を認識できません。やって#VALUE!みるとすぐに手に入ります。また、ほとんどのプログラミング言語とは異なり、カスタムの日付形式は使用しません。

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

回答:


21

文字列解析を行ってから、適切な書式設定された値をDATEVALUE次のように渡す必要があります。

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

(編集:更新された式-テストされ、1つの例で動作します-入力に応じて調整する必要がある場合があります)


1
+1:投稿したときにすぐにクリップボードにこれを用意しました:= DATEVALUE(RIGHT(A1,2)&MID(A1、FIND( "-"、A1)、5)&MID(A1,3,2))
エクセル

へえ、私はちょうどビットを再配置することを考えたことがありません。ありがとう!
クレイグウォーカー

2
8年後、複数のExcelバージョンがありますが、これは依然として最も適切な答えです!Excelが機能を提供できることを願っていますPARSEDATE([string_value], [date format])
Manu Manjunath

5

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


1
非常に重要な注意!! Excelがデフォルトで地域の設定と英語の月/日名の両方を認識しないのは残念です
アタナシス

1

Excels 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.