EXCEL VBA'DA DATESERİAL FONKSİYONU

 


VBA DateSerial fonksiyonu, kullanıcıların yıl, ay ve gün biçiminde sağladığı girdilere dayalı bir tarih döndürür. Sonuç, sisteminizin tarih biçimine göre olacaktır.


Örneğin, birden fazla kullanıcıdan tarih topladığımızda, tarih biçimi bir kullanıcıdan diğerine değişebilir. Örneğin, Bay A tarih biçimini 14 Temmuz 2023 olarak verebilirken , Bay B aynı tarihi 14 Temmuz 2023 olarak verebilir. Bu nedenle, özellikle daha büyük veri kümelerinde belirsizliği önlemek için Date Serial işlevini kullanabiliriz.

VBA Dateserial sözdizimi aşağıdaki gibidir.

DateSerial (Year as Integer, Month as Integer, Day as Integer)

Date Serial fonksiyonunun üç adet zorunlu argümanı vardır.

  • Yıl(Year): Bildiğimiz gibi tarih üç öğeden oluşur, yani gün, ay ve yıl. Burada yılı tam sayı biçiminde giriyoruz. Örneğin, tarihi "14-Şub-2023" biçiminde almak için 2023 tam sayısını sağlamamız gerekir.
  • Ay(Month): Ay numarası. Önceki örnek için 02'dir (Şub). Burada 1'den 12'ye kadar sayılar girebiliriz.
  • Gün(Day): Tarihin günü, yani 14. 1'den 31'e kadar değerler verebiliriz.

ÖNEMLİ NOKTALAR

  • Date Serial VBA fonksiyonu, üç farklı argümanda yıl, ay ve günleri sağladığımızda istenen tarihi elde etmemize yardımcı olur. Bu nedenle, kullanıcılar özellikle her ikisi de tek basamaklı sayılar olduğunda hangi argümanın gün ve ay olduğundan emin olabilirler.
  • DateSerial fonksiyonu sistem tarih formatına göre tarih formatını gösterir.
  • FORMAT fonksiyonunu kullanarak çıktı tarihini istediğimiz formata değiştirebiliriz.
  • Date Serial fonksiyonu, tamsayı değerinde olması gereken üç zorunlu argüman gerektirir.

VBA'da DATESERIAL Fonksiyonu Nasıl Kullanılır?

DateSerial fonksiyonunun VBA'da nasıl kullanıldığına bakalım.

Adım 1: Bu örnekte, A1 hücresine 15 Ocak 2023 tarihini depolamak için aşağıdaki VBA kodunu yazıyoruz.

Sub Date_Serial()
Range(“A1”).Value = DateSerial(2023, 1, 15)
End Sub

Range nesnesini Value özelliğiyle A2 hücresine erişmek için kullandık. Burada, DateSerial fonksiyonunu kullanarak tarihi depolayın.

Fonksiyonun argümanları 2023(yıl), 01 (ay) ve 15 (gün)'dür.

Adım 2: Kodu çalıştırmak için F5 tuşuna basın ve A1 hücresinde aldığımız değeri kontrol edin.

VBA DateSerial - Kullanım - Adım 2

Kodu çalıştırdığımızda DateSerial fonksiyonuna verilen argümanlara göre A1 hücresinde 15-01-2023 tarihini alıyoruz.

VBA DateSerial Fonksiyonunun Örnekleri

DateSerial fonksiyonunun VBA'da kullanımına dair örnekler göstereceğiz.

Örnek 1

DateSerial fonksiyonunu kullanarak 22-02-2023 tarihini üretmemiz gerektiğini varsayalım. Öncelikle aşağıda listelenen adımları takip edin.

Adım 1: Alt prosedürü aşağıdaki gibi adlandırarak makroyu başlatın.

VBA DateSerial - Örnek 1 - Adım 1

Adım 2: DateSerial fonksiyonu tarafından döndürülen değerin türü Tarih olduğundan, DIM ifadesini kullanarak Tarih veri türünde bir değişken (DS) bildirin.

VBA DateSerial - Örnek 1 - Adım 2

Adım 3: Değişken bildirildikten sonra bir değer atamalıyız. Bu nedenle, "DS" değişkenini girin ve ardından eşittir işaretini (=) girin.

VBA DateSerial - Örnek 1 - Adım 3

Adım 4: Tarih Seri fonksiyonuna girin ve yıl, ay ve gün kısmını girin.

VBA DateSerial - Örnek 1 - Adım 4

Adım 5: DS değişkenine değeri atadıktan sonra, bu değişkenin sonucunu mesaj kutusunda aşağıdaki gibi göstermemiz gerekiyor.

Kodun son hali aşağıdaki gibi olacaktır.

Sub Date_Serial_Example1()
Dim DS As Date
DS = DateSerial(2023, 2, 22)
MsgBox DS
End Sub

Adım 6: Yukarıdaki kodu kısayol tuşu F5'e basarak çalıştırın. Şimdi, mesaj kutusunda aşağıdaki sonucu alacağız.

VBA DateSerial - Örnek 1 - Adım 6

Sonuç dd-mm-yyyy biçimindedir . Bunun nedeni, Excel'deki sistem tarih biçimimizin dd-mm-yyyy olarak ayarlanmış olmasıdır. Ancak çıktı, kullanıcının cihazındaki tarih ayarına göre değişebilir.

Ancak, sistem tarih biçiminden bağımsız olarak VBA FORMAT işlevini kullanarak istediğimiz tarih biçimini elde edebiliriz. Bu örneklere bu makalenin ilerleyen kısımlarında değineceğiz.

Yılı, Ayı ve Günü Farklı Değişkenlere Atamak

Önceki örnekte, yıl, ay ve gün sayılarını doğrudan DateSerial fonksiyonuna girdik. Ancak, her argüman için ayrı değişkenler bildirebilir ve sonra bunları date serial fonksiyonuna geçirebiliriz.

Örneğin aşağıdaki koda bakın.

Sub Date_Serial_Example2()
Dim DS As Date
Dim DS_Year As Integer
Dim DS_Month As Integer
Dim DS_Day As Integer
End Sub

Burada DS_Year, DS_Month ve DS_Day olmak üzere üç ek değişken bildirdik. Sonra, bu değişkenlere ilgili değerleri atayın.

Sub Date_Serial_Example2()
Dim DS As Date
Dim DS_Year As Integer
Dim DS_Month As Integer
Dim DS_Day As Integer

DS_Year = 2023
DS_Month = 2
DS_Day = 22

End Sub

Daha sonra bu değişken değerlerini DateSerial fonksiyonu aracılığıyla Date türündeki DS değişkenine atayın.

Sub Date_Serial_Example2()
Dim DS As Date
Dim DS_Year As Integer
Dim DS_Month As Integer
Dim DS_Day As Integer
DS_Year = 2023
DS_Month = 2
DS_Day = 22
DS = DateSerial(DS_Year, DS_Month, DS_Day)
MsgBox DS
End Sub

Kodu F5 kullanarak çalıştırdığımızda, bir öncekiyle aynı sonucu gösteriyor. Ancak, değerleri kodda birden fazla kez değiştirirsek bu daha ölçeklenebilir bir çözümdür.


Örnek 2 – DateSerial Fonksiyonu Tarafından Döndürülen Tarihi Biçimlendirme

DateSerial işlevi tarihi döndürür; çıktı sistemin tarih biçimine dayanır. Ancak, VBA'daki FORMAT işlevini kullanarak VBA Dateserial biçimini değiştirebilirsiniz.

Örneğin, aşağıdaki DateSerial örnek koduna bakın.

Sub Date_Serial_Format()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2022
MyMonth = 5
MyDay = 10
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox MyDate
End Sub

Adım 1: Kodu çalıştırın. Bu kod, sistemimizin tarih ayarlarına göre tarihi görüntüler.

VBA DateSerial - Örnek 2 - Adım 1.jpg

Adım 2: İleti kutusunda gösterilen tarih belirsizdir çünkü sistem tarih ayarlarını bilmediğimiz sürece ilk değerin günü mü yoksa ayı mı temsil ettiğinden emin değiliz. Bu karışıklığı önlemek için tarihi biçimlendirmek için FORMAT işlevini kullanırız.

Sub Date_Serial_Format()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2022
MyMonth = 5
MyDay = 10
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(Mydate, “GG-AA-YYYY”)
End Sub

Adım 3: Çıktıyı mesaj kutusunda görüntülerken FORMAT işlevini çevreledik (sarı ile işaretli). Şimdi kodu yürütün. Sonuç FORMAT işlevindeki biçime göre görüntülenir.

VBA DateSerial - Örnek 2 - Adım 3

Ayın mayıs olduğunu rahatlıkla anlayabiliyoruz.

Örnek 3 – Tarih Seri Fonksiyonu ile İlginç Senaryolar

Şimdiye kadar, DateSerial fonksiyonunun sağlanan girdilere göre tarihi döndüreceğini öğrendik. Ancak, VBA'da DateSerial fonksiyonuyla ilgili bazı ilginç senaryolar şunlardır.

Senaryo 1 – Yıl Tek Haneli Olduğunda

Yılı tek haneli olarak girdiğimizde çıktı farklı olacaktır. Örneğin, aşağıdaki koda bakın.

Sub Date_Serial_Scenario1()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 1
MyMonth = 6
MyDay = 12
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(MyDate, “GG-AA-YYYY”)
End Sub

MyYear değişkenine 1 sayısını atadık. Şimdi kodu çalıştıralım ve nasıl bir çıktı aldığımızı görelim.

Örnek 3 - Senaryo 1

Mesaj kutusunda gösterilen yıl 2001'dir, oysa yılı 1 olarak verdik. Bunun nedeni, Yıl değeri 0 – 99 ise 1930 ile 2029 arasında yorumlanmasıdır. Dolayısıyla, 01 2001 yılını, 02 2002 yılını vb. temsil eder.

Senaryo #2 – Ay 0 olduğunda

Ay 0 olduğunda ne olacağına bir bakalım.

Sub Date_Serial_Scenario2()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2023
MyMonth = 0
MyDay = 12
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(MyDate, “GG-AA-YYYY”)
End Sub

Yukarıdaki kodda ayı 0, yılı ise 2023 yaptık. Kodu çalıştırıp çıktıda hangi tarihi aldığımıza bakalım.

Örnek 3 - Senaryo 2

Ay 0 olmasına rağmen aldığımız tarih "12-Aralık-2022"dir. Bunun sebebi ise ay sıfır olduğunda bir önceki yılın son ayı olan Aralık'ı alması ve verilen yılın da 2023'ten 2022'ye kadar geriye gitmesidir.

Senaryo 3 – Ay numarası 12'den sonra olduğunda

Hepimiz bir takvim yılında sadece 12 ay olduğunu biliyoruz. O halde ay numarasını 13 olarak verdiğimizde ne olacağını görelim.

Sub Date_Serial_Scenario3()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2023
MyMonth = 13
MyDay = 12
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(MyDate, “GG-AA-YYYY”)
End Sub

Verilen ay numarası 13; kodu çalıştıralım ve hangi tarihi elde ettiğimize bakalım.

Örnek 3 - Senaryo 3

Sonuç tuhaf görünüyor. Verdiğimiz yıl 2023 olmasına rağmen tarih 2024'ü gösteriyor.

Bunun sebebi ise ay 12 sınırını geçince yılı bir sonraki yıla, yani 2023'ten 2024'e itiyor ve takip eden yılın ilk ayı ay olarak kabul edilecek.

Bu nedenle tarih sonucunu 12-Oca-2024 olarak elde ederiz. Benzer şekilde ayı 14 yaptığımızda tarih 12-Şub-2024 olur ve bu şekilde devam eder.

Senaryo 4 – Gün 0 olduğunda.

Aşağıdaki koda bakın.

Sub Date_Serial_Scenario4()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2023
MyMonth = 5
MyDay = 0
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(MyDate, “GG-AA-YYYY”)
End Sub

Gün 0 olduğunda aşağıdaki sonucu elde edeceğiz.

Örnek 3 - Senaryo 4

Ay numarasını Mayıs (5) olarak vermemize rağmen günü 0 olarak belirttiğimiz için bir önceki ayın son gününe yani 30 Nisan'a gidiyor .


Senaryo #5 – Gün 31'i Geçtiğinde

Bir ayda en fazla 31 gün, en az ise 28 gün vardır. Peki şimdi 31'den sonraki gün sayısını girersek ne olacak ona bakalım.

Aşağıdaki koda bakın.

Sub Date_Serial_Scenario5()
Dim MyDate As Date
Dim MyYear As Integer
Dim MyMonth As Integer
Dim MyDay As Integer
MyYear = 2023
MyMonth = 5
MyDay = 32
MyDate = DateSerial(MyYear, MyMonth, MyDay)
MsgBox Format(MyDate, “GG-AA-YYYY”)
End Sub

Verdiğimiz gün 5. ay yani Mayıs için 32'dir. Kodu çalıştırın ve karşılığında ne aldığımızı görün.

Örnek 3 - Senaryo 5

Elimizde olan tarih 01-Haz-2023. Çünkü Mayıs ayında maksimum 31 gün var, 32'si bir sonraki ayın ilk gününe yani 01-Haz-2023'e gidiyor.

Eğer gün 33 ise 02-Haz-2023 tarihini verecektir.

Dikkat Edilmesi Gereken Önemli Noktalar

  • Çalışma sayfanızın İşlev kategorisinde VBA Dateserial işlevine erişemezsiniz.
  • DateSerial tarihi döndürür, ancak biçimlendirmesi sistem tarih biçimlendirmesine bağlıdır.
  • Verilen gün 31'den sonra ise, 31'den sonra kaç gün eklediğimize bağlı olarak gün değeri bir sonraki ayın tarihi olarak alınacaktır.
  • Ay 12'yi geçerse, tarih bir sonraki yılı alacaktır. Örneğin, ay numarasını 14 olarak verirseniz, bir sonraki yılın Şubat ayını alacaktır.

DateSerial fonksiyonu yalnızca tam sayı değerleri alabilir; bu nedenle, verilen değerler VBA tam sayı sınırının ötesindeyse taşma hatası verir.



Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...