EXCEL VBA'DA DATEDİFF FONKSİYONU

 

DateDiff, VBA işlevi olarak kullanılabilen ve tarih ve saat işlevi olarak kategorize edilen bir zaman zekası işlevidir. VBA DateDiff işlevi iki tarih arasındaki farkı belirleyebilir. Bu işlevin özelliği, iki tarih arasındaki gerekli farkı belirleyebilmemizdir, yani farkı ay, yıl, gün, çeyrek vb. olarak alabiliriz. Verilen iki tarihin zaman damgaları varsa farkı saat, dakika olarak bile alabiliriz.


Örneğin, Excel'deki şu verilere bakın. A2 ve B2 hücrelerinde sırasıyla iki tarihimiz var ve bu iki tarih arasındaki farkı gün olarak bulmamız gerekiyor.

VBA DateDiff Giriş

Aşağıdaki VBA kodu VBA DateDiff fonksiyonu ile C2 hücresindeki bu iki tarih arasındaki farkı alacaktır. Bu VBA kodunu çalıştırdığımızda , C2 hücresinde aşağıdaki sonucu alacağız.

Sub DateDiff_Intro()
Range(“C2”).Value = DateDiff(“d”, Range(“B2”).Value, Range(“A2”).Value)
End Sub

VBA DateDiff Giriş - Çıktı

ÖNEMLİ NOKTALAR

  • VBA DateDiff, iki tarih arasındaki farkı gün, ay veya yıl olarak almamıza yardımcı olan bir VBA fonksiyonudur.
  • “d” gün cinsinden farkı, “m” ay cinsinden farkı, “yyyy” ise yıl cinsinden farkı bulmak için kullanılır.
  • FOR NEXT döngüsünü kullanarak tüm hücreleri dolaşabilir ve gün, ay veya yıl cinsinden farkı bulabiliriz.
  • Verilen FOR…NEXT kodu dinamik bir koddur; dolayısıyla veri eklendiğinde hesaplamayı dinamik olarak tüm ek satırlara genişletecektir.

Sözdizimi

Verilen iki tarihin zaman damgaları varsa, saat, dakika cinsinden farkı bile alabiliriz. VBA DateDiff fonksiyonunu anlamak için VBA DateDiff fonksiyonunun sözdizimine bakalım.

DateDiff( Aralık Dize Olarak, Tarih1, Tarih2, [HaftanınİlkGünü Olarak VbHaftanınGünü = vbPazar, YılınİlkHaftası Olarak VbYılınİlkHaftası = vbİlkOca1] )

Aralık: İki tarih arasındaki farkı hesapladığımızda, neyi hesaplamak istediğimiz önemlidir, yani farkın ay, gün, yıl veya çeyrek cinsinden olup olmamasına ihtiyacımız vardır. Bunu VBA DateDiff işlevinin aralık argümanında bir dize olarak sağlayabiliriz.

İstediğimiz farkı elde etmek için verebileceğimiz aralıklar şöyledir.

AralıkFark Birimi
DGünler
MAylar
QÇeyrekler
yyyyyyYıllar
wHafta içi
veYılın Günü
wwwYılın Haftası
HSaat
NDakikalar
SSaniyeler

Yukarıdaki aralıklardan herhangi birini tırnak işareti içine alarak istediğimiz farkı elde edebiliriz.

  • Tarih 1: İki tarihten ilki.
  • Tarih 2: İki tarihten ikinci olanıdır.

Formül şu şekilde olacaktır.

Tarih 2 – Tarih 1

Geri kalan argümanlar isteğe bağlıdır.


Excel VBA – Hepsi Bir Arada Kurs Paketi (35+ Saatlik Video Eğitimleri)

Excel ve VBA'yı profesyonel olarak öğrenmek istiyorsanız,  Excel VBA All in One Courses Bundle  (35+ saat) sizin için mükemmel bir çözümdür. İster yeni başlayan ister deneyimli bir kullanıcı olun, bu paket her şeyi kapsar: Temel Excel'den Gelişmiş Excel'e, Makrolar, Power Query ve VBA'ya.

Excel VBA'da DateDiff Fonksiyonu Nasıl Kullanılır?

VBA DateDiff İşlevini adım adım bir yaklaşımla kullanmanın bir örneğini gösterelim. İki tarihimiz olduğunu varsayalım, yani 10-Oca-2023 ve 15-Mar-2023 ve bu iki tarih arasındaki farkı gün olarak bilmek istiyoruz. Aşağıda listelenen adımları takip edelim.

Adım 1: Makroyu Excel'de adlandırarak alt prosedürü başlatın .

VBA DateDiff - Kullanım - Adım 1

Adım 2: VBA DateDiff fonksiyonu tarafından verilen sonucu tutabilecek bir değişken tanımlayın.

VBA DateDiff - Kullanım - Adım 2

VBA DateDiff fonksiyonunun sonucu bir sayı olduğundan, VBA veri türünü “Long” olarak verdik .

Adım 3: Tanımlı değişken için VBA DateDiff fonksiyonunu girerek bir değer atayalım.

Kullanım - Adım 3

Adım 4: VBA DateDiff fonksiyonunun ilk argümanı aralıktır. İki tarih arasındaki farkı gün olarak bulmamız gerekir; dolayısıyla aralık "d" olacaktır.

Kullanım - Adım 4

Adım 5: Date1 argümanı için en düşük tarihi, yani 10-Ocak-2023'ü vermeliyiz.

Kullanım - Adım 5

Adım 6: Date2 argümanı için en yüksek tarihi, yani 15-Mar-2023'ü vermeliyiz.

Kullanım - Adım 6

Adım 7: VBA DateDiff fonksiyonunun geri kalan argümanlarına gerek yoktur.

VBA DateDiff - Kullanım - Adım 7

Adım 8: DateDiff fonksiyonunun sonucu “DateDiff_Result” değişkenine atanır. Sonucu bir mesaj kutusunda gösterelim.

VBA DateDiff - Kullanım - Adım 8

F5 tuşuna basarak kodu çalıştırın. İki tarih arasındaki farkı gün olarak gösteren, yani 64 olan aşağıdaki mesaj kutusunu görebilmeliyiz.

VBA DateDiff - Kullanım - Adım 8 - Çıktı

Kod:

Sub DateDiff_Basic()
Dim DateDIff_Result As Long
DateDIff_Result = DateDiff(“d”, “10-01-2023”, “15-03-2023”)
MsgBox DateDIff_Result
End Sub

Örnekler VBA DateDiff Fonksiyonunun farklı senaryolarda uygulanmasına yönelik farklı türde örnekler gösterelim.

Örnek 1: Günlerdeki Farkı Bulmak

Benzer şekilde, iki tarihimiz olduğunu varsayalım, "05-02-2021" ve "05-02-2023". Önce bu iki tarih arasındaki farkı gün olarak bulalım. Aşağıdaki kod bize farkı gün olarak verecektir.

VBA DateDiff - Örnek 1

Kod Açıklaması:

Bölüm 1: İki tarihi atamak için Tarih veri türünde iki değişken tanımladık.

Bölüm 2: Tanımlı değişkenler için iki ayrı tarih atadık.

Bölüm 3: VBA DateDiff days fonksiyonunun döndürdüğü değeri almak için Long veri tipinde başka bir değişken tanımladık.

Bölüm 4: Bölüm #3'te tanımlanan değişken için VBA DateDiff fonksiyonunu uyguluyoruz.

Bölüm 5: Şimdi değişken sonucunu bir mesaj kutusunda gösterelim.

Kodu çalıştırdığımızda sonucu bir mesaj kutusunda alacağız.

VBA DateDiff - Örnek 1 - Çıktı

Örnek 2: Aylardaki Farkı Bulmak

VBA DateDiff işlevi çok yönlüdür çünkü iki tarih arasındaki farkı birden fazla birimde bulabiliriz. Önceki örnekte, günlerdeki farkı gördük; benzer şekilde, aynı tarihleri ​​kullanarak aylardaki farkı da bulabiliriz.

Yapmamız gereken tek şey VBA DateDiff fonksiyonunun "interval" argümanını değiştirmek. Aşağıdaki koda bakın.

Sub DateDiff_Ex2()
'İki özel tarihi atamak için değişkenleri tanımlayın
Dim Dt1 As Date
Dim Dt2 As Date
'Değişkenlere tarih atayın
Dt1 = “05-02-2021”
Dt2 = “05-02-2023”
'datediff fonksiyonunun sonucunu göstermek için bir değişken tanımlayın
Dim DD_Result As Long
'DateDiff fonksiyonunun sonucunu bir değişkene atayın. Ay farkı olduğundan “m” argüman değeridir
DD_Result = DateDiff(“m”, Dt1, Dt2)
'Sonucu bir mesaj kutusunda gösterin
MsgBox DD_Result
End Sub

Gördüğümüz gibi, yalnızca aralık argümanını "d"den (gün) "m"ye (ay) değiştirdik. Kodu çalıştıralım ve bir mesaj kutusunda aşağıdaki sonucu elde edeceğiz.

VBA DateDiff - Örnek 2 - Çıktı

İki tarih arasındaki fark 24 aydır; dolayısıyla bir mesaj kutusunda 24 değerini görürüz. Bu, VBA DateDiff ay hesaplamasıdır.

Örnek 3: Yıllar Arasındaki Farkı Bulmak

İki tarih arasındaki farkı yıl olarak da alabiliriz; tek yapmamız gereken VBA DateDiff fonksiyonunun aralığını değiştirmek.

Aşağıdaki koda bakın.

Sub DateDiff_Ex3()
'İki özel tarihi atamak için değişkenleri tanımlayın
Dim Dt1 As Date
Dim Dt2 As Date
'Değişkenlere tarih atayın
Dt1 = “05-02-2021”
Dt2 = “05-02-2023”
'datediff fonksiyonunun sonucunu göstermek için bir değişken tanımlayın
Dim DD_Result As Long
'DateDiff fonksiyonunun sonucunu bir değişkene atayın. Ay farkı olduğundan “m” argüman değeridir
DD_Result = DateDiff(“yyyy”, Dt1, Dt2)
'Sonucu bir mesaj kutusunda gösterin
MsgBox DD_Result
End Sub

VBA DateDiff fonksiyonunun aralığını “yyyy” olarak değiştirdik. Kodu çalıştıralım ve aşağıdaki sonucu elde edelim.

VBA DateDiff - Örnek 3 - Çıktı

Yıllar itibariyle fark 2 yıldır.

Örnek 4: Döngülü DateDiff Fonksiyonu

Şimdiye kadar, bir değişkende kullanılan tek bir tarih gördük. Ancak gerçek dünyada, birden fazla tarihle uğraşmamız gerekir; bu nedenle her hücreyi incelemek için bir döngü kullanmamız gerekir. Örneğin, Excel'deki aşağıdaki verilere bakın.

Örnek 4

Her poliçe numarasının başlangıç ​​ve bitiş tarihlerine sahip sigorta poliçesi verilerimiz var. Poliçe süresini gün, ay ve yıl olarak bulmalıyız. Burada birden fazla hücrede verimiz var. Bu nedenle, aynı mantığı uygulamak için her hücreyi incelemek üzere FOR NEXT döngüsünü kullanmalıyız. Örneğin, aşağıdaki koda bakın.

Sub DateDiff_Ex4()
'FOR NEXT döngüsünde kullanılacak değişkenleri tanımla
Dim k As Long
Dim i As Long
'Son kullanılan satırı bulmak için bir değişken tanımla
Dim LR As Long
'Son kullanılan satırı bul
LR = Cells(Rows.Count, 1).End(xlUp).Row
'datediff işlev aralığını bulmak için bir değişken tanımla
Dim Interval As String
'Tüm hücreleri dolaşmak için döngüyü kullan
'Döngüyü 4. sütundan 6. sütuna kadar başlatmamız gerekiyor, dolayısıyla döngünün başlangıç ​​konumu 4 olacak
For k = 4 To 6
'Mevcut sütuna göre datediff işlevi için aralık birimini bul
'Örneğin, 4. sütundaysak gün cinsinden farkı buluyoruz, dolayısıyla aralık "d" olacaktır
If k = 4 Then
Interval = "d"
'5. sütundaysak ay cinsinden farkı buluyoruz, dolayısıyla aralık "m" olacak
ElseIf k = 5 Then
Interval = “m”
Else
'eğer 6. sütunda isek o zaman yıl farkını buluyoruz, dolayısıyla interval “yyyy” olacaktır
Interval = “yyyy”
End If
'VBA DateDiff Fonksiyonunu geçerli döngü sütununa göre uygula
For i = 2 To LR
Cells(i, k).Value = DateDiff(Interval, Cells(i, 2).Value, Cells(i, 3).Value)
Next i
Next k
End Sub

Kodu çalıştırdığımızda veriler için VBA DateDiff fonksiyonunu uygulayacak ve bize aşağıdaki sonucu verecektir.

Örnek 4 - Çıktı

Gün farkını D sütununda, ay farkını E sütununda ve yıl farkını F sütununda bulduk.


Uygulama Olarak Ödev

Çeşitli örneklerden geçtik ve VBA DateDiff fonksiyonunu öğrendiğinizi umuyoruz. Bu nedenle, size pratik olması için aşağıdaki ödevi veriyoruz. Karmaşık bir şey yok, yapmanız gereken tek şey örneğimiz #4'teki bazı küçük değişikliklerle döngüleri kullanmak.

Atama

Kodunuzu oluştururken yardıma ihtiyacınız varsa, aşağıdaki koda bakabilirsiniz.

Alt DateDiff_Assignment()
'FOR NEXT döngüsünde kullanılacak değişkenleri tanımla
Dim k As Long
Dim i As Long
'Son kullanılan satırı bulmak için bir değişken tanımla
Dim LR As Long
'Son kullanılan satırı bul
LR = Cells(Rows.Count, 1).End(xlUp).Row
'datediff işlev aralığını bulmak için bir değişken tanımla
Dim Interval As String
'Tüm hücreleri dolaşmak için döngüyü kullan
'Döngüyü 4. sütundan 6. sütuna kadar başlatmamız gerekiyor, dolayısıyla döngünün başlangıç ​​konumu 4 olacak
For k = 3 To 5
'Mevcut sütuna göre datediff işlevi için aralık birimini bul
'Örneğin, 3. sütundaysak gün cinsinden farkı buluyoruz, dolayısıyla aralık "d" olacaktır
If k = 3 Then
Interval = "d"
'4. sütundaysak ay cinsinden farkı buluyoruz, dolayısıyla aralık "m" olacaktır
ElseIf k = 4 Then
Interval = “m”
Else
'5. sütunda isek o zaman yıl farkını buluyoruz, dolayısıyla interval “yyyy” olacaktır
Interval = “yyyy”
End If
'VBA DateDiff Fonksiyonunu geçerli döngü sütununa göre uygula
For i = 2 To LR
Cells(i, k).Value = DateDiff(Interval, Cells(i, 1).Value, Cells(i, 2).Value)
Next i
Next k
End Sub

VBA DateDiff - Atama - Çıktı

Bu kodu kullanarak ufak değişikliklerle kendi kodunuzu geliştirebilirsiniz.

Dikkat Edilmesi Gereken Önemli Noktalar

  • VBA DateDiff fonksiyonu yalnızca tarih değerlerini kabul eder; tarih dışında bir değer girildiğinde hata verecektir.
  • Farkı yıl olarak bulursanız, yıl (yyyy) aralığını dört kez girin; aksi takdirde hata verecektir. Ancak, yalnızca bir "y" verirseniz, farkı yıl olarak değil, gün olarak gösterecektir. Verilen tarih, Date veri türünde değilse veya yanlış tarihse, VBA'da bir Type Mismatch hatası alırız .
  • VBA DateDiff dakika ve VBA DateDiff saniye hesaplamaları tarihteki zaman kısmına ihtiyaç duyar.


Yorum Gönder

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