Video: Microsoft Excel VBA - Function 33 - ISDATE() 2024
VBA'nın IsDate işlevi, bir metin dizesinin bir tarih olarak yorumlanıp yorumlanamayacağını söyler. Örneğin, aşağıdaki ifadelerin tümü doğru olarak değerlendirilir:
IsDate ("5/25/2015") IsDate ("16 Ocak") IsDate ("12-1") IsDate ("12/1/15") IsDate ("2/30") IsDate ("30/2")
Son iki örnekte, IsDate'in gün ve ayın sırası hakkında seçici olmadığını fark ettik. Bu dizelerin her ikisi de tarih olarak yorumlanabilir, bu nedenle IsDate True değerini döndürür (sistem tarih format ayarlarınızdan bağımsız olarak).
İşte bir Microsoft Destek makalesinin bazı bilgileri:
VBA tarih işlevleri IsDate, Biçim, CDate ve CVDate, OLE Otomasyonu'nda (OleAut32.dll) bulunan bir işlevi kullanır. Bu işlev, tarihi temsil eden dizedeki her ayrılmış değerin simgeselleştirilmesi ile olası tüm tarih formatlarını arar ve girdinin bir Tarih olarak gösterilip gösterilemeyeceğini gösteren bir Boolean değeri döndürür.
Bu, 2 basamaklı bir yılı içeren bir tarihi yorumlamak için fonksiyonu kullanırken hatırlamak önemlidir. Farklı Yerel Ayarlar çeşitli tarih biçimlerini kullanır (yani, gg / aa / yy, yy / aa / gg, " DD MMM YY " , " YY MMM DD " vb.) Ve bu nedenle işlev, geçerli bir tarih bulana veya tüm olasılıkları tükenene dek tüm pozisyonlardaki basamakları dener.
IsDate bir dizgeyi tarih olarak algıladığından, dizenin güvenilir bir şekilde bir tarihe dönüştürülebileceği anlamına gelmez. Bazı durumlarda, sonuç belirsizdir. Örneğin, bu ifade ne için?
IsDate ("29 Şub 01")
29 Şubat 2001 geçerli bir tarih değildir. Bununla birlikte, bu ifade 1 Şubat 1929 (ve 2 Ocak 1929) geçerli tarihler olduğu için True değerini döndürür. Ve aynı 2029'da aynı tarihler.
IsDate dokümantasyonu için bir arama boş geldi. Sınama dayanarak, IsDate ayırıcı karakterler olarak eğik çizgi (/), tire (-), virgül (), nokta (.) Ve boşluk olarak aşağıdakilerin herhangi birini kabul eder.
Bu nedenle, aşağıdaki ifadeler True değerini döndürür:
IsDate ("5.1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
Ancak,
IsDate ("5. 1. 05")
Bununla birlikte açıkçası, bu ifade False döndürür:
IsDate ("5. 1. 05")
("5. 1. 2005")
Kullanıcının bir tarih girdiği bir InputBox içeren bir UserForm oluşturduğunuzu varsayalım. IsDate'i girişi doğrulamak için kullanmanın çok güvenilir olmadığı açık olmalıdır.
IsDate'in zaman değerlerini de kapsadığını fark ettiğinizde işleriniz daha da kafa karıştırıcı hale gelir. (IsTime işlevi yoktur.) Böylece, aşağıdaki ifadelerin hepsi doğru döndürür:
IsDate ("4: 45") IsDate ("4.45") IsDate ("4 45") IsDate ("4/45 ") IsDate (" 24: 45 ")
IsDate (" 24: 45 ")
Bu ifadeler False döndürür:
IsDate (" 4: 60 ") IsDate bir Aralık bağımsız değişkenini ilettiğinizde bu türden garip şeyleri sergileyin. Örneğin:
IsDate (Range ("A1"))
IsDate'in bir tarih veya saat içeren hücreleri tanımlamada mükemmel bir güvenilirliği var gibi görünüyor. Örneğin, tarih olarak 5. 1 içeren bir hücreyi tanımlamaz. Kodunuzun bir dize bir tarih olarak yorumlanabilir olup olmadığını belirlemek gerekiyorsa, en iyi çözüm bu dize bir hücreye koymak ve daha sonra hücre içeriğini kontrol etmek için kod yazmaktır.