Standart olmayan bir tarih biçimini Excel'de nasıl ayrıştırırım?


24

Ben formatında tarih benzeri dize değerleri bir sütun var yyyy-mm-ddgibi 2011-Sep-13. Bunları formüller içerisinde kullanabilmem için bunları Excel tarih seri numaralarına dönüştürmem gerekiyor.

DATEVALUE bu formatı tanıyamıyor; Sadece #VALUE!denediğimde anlıyorum. Aynı zamanda özel bir tarih formatı almaz (çoğu programlama dilinden farklı olarak).

Rasgele tarih biçimlerini Excel tarih değerlerine nasıl dönüştürebilirim?

Yanıtlar:


21

Dize ayrıştırma yapmanız ve ardından uygun bir formatlanmış değerin içine aktarmanız gerekir DATEVALUE- buna benzer bir şey:

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

(düzenleme: güncellenmiş formül - test edildi ve benim için bir örnek üzerinde çalışıyor - girişinize bağlı olarak hassaslaştırmanız gerekebilir)


1
+1: Bunu panoya gönderdiğiniz zaman gitmeye hazır hale getirdim: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll

Heh, sadece parçaları yeniden düzenlemeyi hiç düşünmedim. Teşekkürler!
Craig Walker

2
8 yıl ve daha sonra birçok Excel sürümü, bu hala en alakalı cevap! Excel bir işlev sağlayabilir diliyorumPARSEDATE([string_value], [date format])
Manu Manjunath

5

Ay adlarının Windows Bölgesel Seçenekleri'ne özgü olduğunu unutmayın. Bu nedenle, Windows Bölgesel Seçenekleriniz Ukraynaca'ya ayarlanmışsa, DATEVALUE işlevi # DEĞER! "07-Kasım-2012" için, ancak "07-Лис-2012" kabul eder.


1
Çok çok önemli not! Hem bölgesel ayarı hem de varsayılan olarak İngilizce ay / gün adlarını
tanımayan bir seçicinin

1

Excel'in DateValue işlevi bölgeye bağımlıdır. Avrupa'da "04-11-2008" gibi bir dizgiyi ayrıştırırsanız, 4 Kasım ve ABD'de 11 Nisan olarak ayrıştırılır.

Bunu aşmak için DateSerial işlevini kullanabilir ve ayrıştırmayı kendiniz yapabilirsiniz. Bu, kendi standart dışı tarih biçiminize de kolayca uyarlanabilir.

' 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.