VBA Tarih Değeri işlevi, metin biçimindeki bir tarihi Microsoft Excel tarih-zaman kodundaki tarihi temsil eden bir sayıya dönüştürür. Çalışma sayfası işlevi olarak da kullanılabilen yerleşik bir VBA işlevidir.
Unutmayın, Excel'de anlamamız gereken önemli şey, tarihlerin seri numaralarıyla temsil edildiğidir. Seri numarasına tarih biçimi uygulandığında, uygulanan biçimde tarihi görebiliriz.
Örneğin Excel'deki şu tarihe bakalım.

Şimdi, başka bir hücredeki tarihi almak için VBA Tarih değer fonksiyonunu kullanabiliriz.
Ayrıca aşağıdaki kod da referansınız içindir.
Sub Date_Value_Basic()
Range(“B2”).Value = DateValue(Range(“A2”).Value)
End Sub
Şimdi bu bize B2 hücresinde aşağıda gösterildiği gibi bir sonuç verecektir.

Şimdi VBA'da DATEVALUE fonksiyonunun sözdizimini öğrenelim.

Unutmayın, VBA'da DATEVALUE fonksiyonunda yalnızca bir argüman vardır, yani Visual Basic Dilinde geçerli tarihi temsil eden bir dize. Bundan böyle zorunludur.
ÖNEMLİ NOKTALAR
- VBA DateValue fonksiyonu, Microsoft Excel tarih-zaman kodunu temsil eden tarihi dönüştürmek için kullanılan yerleşik bir fonksiyondur. Hem çalışma sayfası fonksiyonu hem de VBA fonksiyonu olarak kullanılabilir.
- VBA'da DATEVALUE fonksiyonunun sözdizimi =DATEVALUE(Date As String) şeklindedir; burada Date as String zorunlu tek argümandır.
- VBA'da DateValue fonksiyonunu kullanarak metin olarak saklanan tarihi doğru tarihe dönüştürebiliriz.
- DatePart, çalışma sayfası fonksiyonu olarak kullanılamayan bir VBA fonksiyonudur.
- DatePart fonksiyonu verilen tarihin çeyreğini, yılın haftasını, haftanın gününü çıkarabilir.
Açıklama
Örneğin Excel'deki şu tarihe bakalım.

Şimdi, B2 hücresinde 14 Şubat 2023 tarihi var . Temel olarak, bu tarih seri numarasından türetilmiştir. Seri numarasını görmek için, B2 hücresinin biçimini tam sayıya değiştirin.

Yani, 44971 seri numarası, Excel'deki tarih biçiminin uygulandığı 14-02-2023 tarihini temsil ediyor . Yani temelde, 14 Şubat 2023 tarih ve 44971 tarih değeridir.
Öncelikle Excel'deki TARİH DEĞERİ fonksiyonunu kullanarak bir örnek gösterelim.
Örneğin, Excel'in A2 hücresindeki şu tarihe bakın.

Şimdi A2 hücresindeki tarih değerini alabilmek için B2 hücresine DATEVALUE fonksiyonunu uygulayalım.

Şimdi, B2 hücresine tarih değeri fonksiyonunu uyguladığımızda, karşılığında #VALUE! aldık. Bunun nedeni, A2 hücresindeki değerin uygun bir tarih biçimi olması ve tarihin kendisi olarak saklanmasıdır.
Unutmayın, DATE VALUE işlevi yalnızca metin olarak depolanan tarih hücrelerinden tarih değerini alır. Çalışması için, tarihin başlangıcından önce tek tırnak işareti (') girerek A2 hücresindeki değeri metne dönüştürelim.

Tarihten önce tek tırnak işaretini girdikten sonra Enter tuşuna basarak A2 hücresindeki değeri metin değerine dönüştürebilirsiniz.

Tarih A2 hücresindeki metne dönüştürüldüğü anda, Tarih Değeri işlevi herhangi bir hata olmadan mükemmel bir şekilde çalışır. Bu, Excel'deki tarih değeri işlevinin özelliklerinden biridir.
Yani Date Value fonksiyonu, VBA aracılığıyla doğada metin olarak saklanan tarihten tarih değerini almak için kullanılır.
Şimdi tarih değeri fonksiyonunun VBA kısmına geçelim.
Excel VBA DATEVALUE Nasıl Kullanılır?
Gelişmiş pratik örneklere geçmeden önce, Excel'de VBA DATEVALUE fonksiyonunun kullanımına dair birkaç temel örneğe bakalım.
Örnek 1 – DATEVALUE Fonksiyonunu Kullanarak Tarihin Seri Numarasını Alın
DATEVALUE işlevini kullanmanın ilk temel kuralı, tarihin metin olarak depolanıp depolanmadığını kontrol etmektir. Örneğin, bir Excel hücresindeki aşağıdaki tarihe bakın.

Açıkça, A2 hücresindeki değerin metin olarak depolandığını görebiliriz. Sadece teyit etmek için, B2 hücresinde basit ISNUMBER işlevini uygulayalım.

A2 hücresindeki değerin sayı veya tarih değil, metin olarak saklanan bir tarih olduğu doğrulandı.
Bunu tarihe dönüştürmek için, bu tarih için tarih değerini almamız gerekiyor. Şimdi, aşağıda listelenen adımları takip edelim.
Adım 1: İlk olarak makroyu aşağıdaki gibi adlandırarak alt rutini başlatın.

Adım 2: Daha sonra A2 hücresinin verilerini tarih biçiminde saklayacak bir değişken tanımlayın.

Adım 3: Daha sonra A2 hücresinin değerini bu değişkene atayın.

Adım 4: Şimdi bu değişken adını A3 hücresine kaydedelim.

Kodun tamamı aşağıda sizin için mevcut.
Sub Date_Value_Ex1()
Dim String_Date As Date
String_Date = Range(“A2”).Value
Range(“A3”).Value = String_Date
End Sub
Şimdi yukarıdaki makronun içerisine aktif imleci yerleştirip Visual Basic Editor'da F5 tuşuna basarak kodu çalıştıralım ve A3 hücresine aşağıdaki gibi bir tarih bilgisi alalım.
İlk değer ile ikinci değer arasındaki farkı görmek için ISNUMBER excel fonksiyonunu B3 hücresine de uygulayalım ;

Şimdi, A3 hücresindeki tarih metin olarak değil tarih olarak depolanır. Bu nedenle, ISNUMBER işlevi sonuç olarak TRUE döndürdü.
Örnek 2 – VBA'da DATEVALUE Fonksiyonunun Önemi
Örneğin Excel'deki aşağıdaki VBA koduna bakın.

Bölüm 1: Dim String_Date As String
Burada, “String_Date” değişkenini tanımladık ve veri türünü Date olarak değil “String” (Text) olarak atadık. Önceki durumda, veri türünü date olarak atadık.
Bölüm 2: String_Date = “23-05-2023”
Şimdi, tanımlı değişkene çift tırnak içinde tarihi atıyoruz.
Bölüm 3: Range(“A10”).Value = String_Date
Atanan tarihi C5 hücresine kaydediyoruz.
Şimdi bu kodu çalıştıralım.

C5 hücresinde tarihimiz var. Ancak, değişkenin veri türü “String” olduğundan tarih metin olarak saklandığı için doğru biçimde değil .
Bunu doğrulamak için C5 hücresinde saklanan tarih için ISNUMBER fonksiyonunu kullanın.

Açıkça, ISNUMBER fonksiyonu çıktıyı FALSE olarak döndürmüştür, yani C5 hücresindeki değer tarih değil, metindir.
Bu hatayı önlemek için DATEVALUE fonksiyonunu kullanacağız. Aşağıdaki kod, tarih depolama yöntemini ortadan kaldıracaktır.
Sub Date_Value_Ex2()
Dim String_Date As String
String_Date = “23-05-2023”
Range(“C5”).Value = DateValue(String_Date)
End Sub
Önceki kodda yaptığımız tek değişiklik, değişkeni B5 hücresine kaydederken , “String_Date” değişkenini DATEVALUE fonksiyonuyla çevrelememizdir .
Şimdi C5 hücresindeki sonuca bakalım.

Şimdi, C5 hücresinde saklanan değer tarihtir çünkü ISNUMBER fonksiyonu sonucu TRUE olarak döndürmüştür.
Örnekler
Şimdi, VBA'da DATE VALUE fonksiyonunun gelişmiş kullanımını inceleyelim.
Örnek 1 – Bir Tarihten Gün, Ay ve Yılı Elde Etme
Herhangi bir tarih 3 bölümden oluşur, yani Gün, Ay ve Yıl. Çoğu zaman, tarihin farklı bölümlerini ayrı ayrı almamız gerekebilir. Bu durumda, günü, ayı ve yılı ayrı ayrı çıkarmak için DATEVALUE işlevini kullanabiliriz.
Örneğin Excel'deki aşağıdaki verilere bakalım.

Şimdi, elimizde çok sayıda tarih var, dolayısıyla gün, ay ve yılı almak için FOR döngüsünü kullanmamız gerekiyor.
Aşağıdaki kod, her bir ayrı sütundaki tarihin parçalarını elde edecektir.
Sub Date_Value_Obtain_Dates()
'3 kez döngüye almak için.
Dim k As Long
'Tarihler arasında döngüye girmek ve tarihin gününü almak için.
Dim D As Long
'Tarihler arasında döngüye girmek ve tarihin ayını almak için.
Dim M As Long
'Tarihler arasında döngüye girmek ve tarihin yılını almak için.
Dim Y As Long
'Çalışma sayfasının son kullanılan satırını bulmak için
Dim LR As Long
'Son kullanılan satırı bul
LR = Cells(Rows.Count, 1).End(xlUp).Row
'Tüm tarihler arasında döngü yap ve tarihten günü çıkar
For D = 2 To LR
Cells(D, 2).Value = Day(DateValue(Cells(D, 1).Value))
Next D
'Tüm tarihler arasında döngü yap ve tarihten ayı çıkar
For M = 2 To LR
Cells(M, 3).Value = Month(DateValue(Cells(M, 1).Value))
Next M
'Tüm tarihler arasında döngü yap ve tarihten yılı çıkar
For Y = 2 To LR
Cells(Y, 4).Value = Year(DateValue(Cells(Y, 1).Value))
Next Y
End Sub
Daha sonra yukarıdaki kodu Visual Basic Editor penceresine kopyalayın.

Şimdi kodu çalıştırdığımızda çalışma sayfamızda aşağıdaki sonucu elde edeceğiz.

Örnek 2 – DatePart'ı Kullanarak Date'in Farklı Bölümlerini Elde Etme
Sadece DATEVALUE fonksiyonu bize tarihin çeşitli bölümlerini çıkarmamızı sağlamaz, hatta VBA'da DATEPART fonksiyonunu kullanarak tarihin farklı bölümlerini alabiliriz.
Öncelikle DATEPART fonksiyonunun söz dizimine bakalım.
DatePart(Interval As String, Date, [First Day of Week], [First Week of Year])
Aralık(Range): Bir dize ifadesi bize tarihin hangi kısmına ihtiyacımız olduğunu söyler. Aşağıdaki tablodan referansı alabilir ve buna göre kullanabiliriz.
| Ayar | Tanım |
|---|---|
| yyyyyy | Yıl |
| Q | Çeyrek |
| M | Ay |
| ve | Yılın günü |
| D | Gün |
| w | Hafta içi |
| www. | Hafta |
| H | Saat |
| N | Dakika |
| S | Saniye |
Tarih: Verilen aralığı çıkarmaya çalıştığımız tarih (argüman 1).
Bunlar zorunlu 2 argümandır; diğer 2 argümanı şimdilik göz ardı edebiliriz.
Örnek
Önceki örnekte kullandığımız verileri burada da farklı bir çalışma sayfasında kullanalım.

DATEPART fonksiyonunun özelliği, çeyreği, haftayı, günü, ayı ve yılı çıkarabilmemizdir.
Ayrıca, tarihin gerekli tüm kısımlarını çıkarmak için aşağıdaki kodu kullanabiliriz.
Sub DatePart_Obtain_Dates()
'3 kez döngüye almak için.
Dim k As Long
'Tarihler arasında döngüye girmek ve tarihin gününü almak için.
Dim D As Long
'Tarihler arasında döngüye girmek ve tarihin ayını almak için.
Dim M As Long
'Tarihler arasında döngüye girmek ve tarihin yılını almak için.
Dim Y As Long
'Çalışma sayfasının son kullanılan satırını bulmak için
Dim LR As Long
'Tarihler arasında döngü yapmak ve çeyreği almak için
Dim Q As Long
'Tarihler arasında döngü yapmak ve haftayı almak için
Dim W As Long
'Son kullanılan satırı bulmak için
LR = Cells(Rows.Count, 1).End(xlUp).Row
'Tüm tarihler arasında döngü yap ve tarihten günü çıkar
For D = 2 To LR
Cells(D, 2).Value = DatePart(“d”, Cells(D, 1).Value)
Next D
'Tüm tarihler arasında döngü yap ve tarihten ayı çıkar
For M = 2 To LR
Cells(M, 3).Value = DatePart(“m”, Cells(M, 1).Value)
Next M
'Tüm tarihler arasında döngü yap ve tarihten yılı çıkar
For Y = 2 To LR
Cells(Y, 4).Value = DatePart(“yyyy”, Cells(Y, 1).Value)
Sonraki Y
'Tüm tarihler arasında döngü yap ve tarihten çeyreği çıkar
For Q = 2 To LR
Cells(Q, 5).Value = DatePart(“q”, Cells(Q, 1).Value)
Sonraki Q
'Tüm tarihler arasında döngü yap ve tarihten hafta gününü çıkar
For W = 2 To LR
Cells(W, 6).Value = DatePart(“ww”, Cells(W, 1).Value)
Sonraki W
End Sub
Yukarıdaki kodu çalıştırdığımızda tarihin aşağıdaki kısımlarını elde edeceğiz.

Dikkat Edilmesi Gereken Önemli Noktalar
- VBA DateValue fonksiyonu, veri türü uyumsuzluğu olduğunda Çalışma Zamanı Hatası 13 döndürür. Bu, verilen değerin tarih değeri fonksiyonu tarafından tarihe dönüştürülemeyeceği anlamına gelir.
- Çalışma sayfasında, tarih değeri fonksiyonu yalnızca tarih metin olarak saklandığında çalışır, aksi takdirde #DEĞER! Hatası alırız .
- DatePart, çift tırnak içinde doğru aralık kodunu gerektirir, aksi takdirde hata alırız.
- Varsayılan olarak, DatePart fonksiyonu haftanın başlangıç günü olarak Pazar gününü alır.
DateValue ve CDate arasındaki temel fark, DateValue'nun bize yalnızca tarihi vermesi, CDate fonksiyonunun ise bize tarihi ve saati de vermesidir.
Örneğin, VBA'daki aşağıdaki koda bakın.
Sub DateValue_vs_CDate()
Dim DV As Date
Dim CD As Date
DV = DateValue(“2023-08-24 08:05:15”)
CD = CDate(“2023-08-24 08:05:15”)
MsgBox DV
MsgBox CD
End Sub
Yukarıdaki kodda, biri DateValue fonksiyonunu kullanarak tarihi dönüştüren, diğeri CDate fonksiyonunu kullanan 2 değişken tanımladık.
Şimdi, sağladığımız tarih, tarih ve saatin birleşimidir.
Şimdi, kodu çalıştıralım ve DateValue ile CDate fonksiyonları arasındaki farkın ne olduğunu görelim.
Unutmayın, DateValue fonksiyonunu kullandığımızda, tarih ve saati sağlamış olmamıza rağmen sadece tarih kısmını aldık. Sonra, OK'e
tıklayın ve CDate fonksiyonunun sonucunu elde ederiz.
CDate fonksiyonu bize hem tarihi hem de saati verir.
Veri türü uyuşmadığında DateValue işlevi Çalışma Zamanı Hatası 13 döndürür. Bu, verilen değerin tarih değeri işlevi tarafından tarihe dönüştürülemeyeceği anlamına gelir.
VBA Tarih Değeri fonksiyonunu kullanarak, metin olarak saklanan tarihleri gerçek tarih formatına dönüştürebiliriz ve böylece tarih verileriyle sorunsuz bir şekilde çalışabiliriz.
