Özellik ikonu

DateAdd

İndirme izni yok

Genel Bakış

DateAdd (DateAdd function), verilen bir tarihe ya da saate belirttiğiniz türde ve sayıda zaman aralığı ekleyerek yeni bir tarih döndüren VBA işlevidir. Vade tarihi, taksit planı, sözleşme bitişi, hatırlatma günü gibi hesaplarda ay sonu ve artık yıl farklarını kendisi düzelttiği için çok işe yarar. Negatif sayı verirseniz tarihten geriye gider.

Söz dizimi​

İşlev üç bağımsız değişken alır ve hepsi zorunludur:
VBA
DateAdd(interval, number, date)
  • interval: Eklenecek zaman aralığının türünü belirten metin ifadesidir (ör. "d", "m", "yyyy"); zorunludur. Kodlar her zaman İngilizce harfleriyle yazılır, Türkçe Excel'de de değişmez.
  • number: Eklenecek aralık sayısıdır; zorunludur. Pozitif değer ileri, negatif değer geri tarih verir. Tam sayı değilse en yakın tam sayıya yuvarlanır.
  • date: Başlangıç tarihini ya da saatini taşıyan Variant değer, hücre değeri veya tarih sabitidir; zorunludur. Bu değer işlev tarafından değiştirilmez, sonuç yeni bir değer olarak döner.
Sonucu bir değişkene ya da hücreye atayarak kullanırsınız.

Aralık (interval) kodları​

interval bağımsız değişkeni için şu kodlar geçerlidir:
  • yyyy: Yıl
  • q: Çeyrek (3 ay)
  • m: Ay
  • y: Yılın günü (sonuç olarak gün eklemekle aynıdır)
  • d: Gün
  • w: Haftanın günü (gün eklemekle aynıdır)
  • ww: Hafta (7 gün)
  • h: Saat
  • n: Dakika
  • s: Saniye
Dikkat: ay için m, dakika için n kullanılır. Bu iki kodun karıştırılması en sık yapılan hatadır.

Dönüş değeri ve davranış​

DateAdd bir Variant döndürür ve bu değerin alt türü Date'tir. Tarihe ay ya da yıl eklerken sonuç ayında karşılık gelen gün yoksa gün, o ayın son gününe çekilir. Örneğin 31 Ocak'a bir ay eklediğinizde Şubat'ın son günü elde edilir. Artık yıl da otomatik hesaba katılır. Hesaplanan tarih 100 ile 9999 yılları arasının dışına çıkarsa ya da başlangıç değeri geçerli bir tarih değilse çalışma zamanı hatası oluşur. Saat, dakika ve saniye eklerken tarihin saat kısmı da korunur ve gerekirse ertesi güne taşar.

1. Fatura vade tarihini hesaplamak​

Fatura tarihleri ve vade günleri sayfada hazırdır. Aşağıdaki kodu standart bir modüle (Ekle > Modül) yapıştırın; makro her satır için fatura tarihine vade gününü ekleyip D sütununa yazar.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Fatura No
A2 = FT-1001
A3 = FT-1002
A4 = FT-1003
A5 = FT-1004
A6 = FT-1005
A7 = FT-1006
B1 = Fatura Tarihi
B2 = 15.03.2024
B3 = 20.03.2024
B4 = 02.04.2024
B5 = 18.04.2024
B6 = 06.05.2024
B7 = 25.06.2024
C1 = Vade (Gün)
C2 = 30
C3 = 45
C4 = 60
C5 = 15
C6 = 90
C7 = 30
D1 = Vade Tarihi
D2 = 14.04.2024
D3 = 04.05.2024
D4 = 01.06.2024
D5 = 03.05.2024
D6 = 04.08.2024
D7 = 25.07.2024
VBA 16 satır
Option Explicit

Sub VadeHesapla()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Vade Takibi")

    ' 2. satırdan 7. satıra kadar her faturayı işle
    For i = 2 To 7
        ' B: fatura tarihi, C: vade günü, D: sonuç
        ws.Cells(i, 4).Value = DateAdd("d", ws.Cells(i, 3).Value, ws.Cells(i, 2).Value)
    Next i

    ws.Range("D2:D7").NumberFormat = "dd.mm.yyyy"
End Sub
DateAdd
Formülünü incelemek için bir hücre seçin.
ABCD
1Fatura NoFatura TarihiVade (Gün)Vade Tarihi
2FT-100115.03.20243014.04.2024
3FT-100220.03.20244504.05.2024
4FT-100302.04.20246001.06.2024
5FT-100418.04.20241503.05.2024
6FT-100506.05.20249004.08.2024
7FT-100625.06.20243025.07.2024
Vade TakibiExcelDepo v1.0.0
Makro, "d" koduyla fatura tarihine vade gününü ekler. İlk fatura için vade tarihi 14.04.2024, ikinci fatura için 04.05.2024 olarak hesaplanır. Ay sınırlarını aşan toplamlar (ör. 01.06.2024) otomatik doğru ayın tarihine geçer. Gün sayısı yerine ay eklemek isterseniz "m" kodunu kullanın.

2. Farklı aralık kodlarını denemek​

A sütununda aralık kodu, B sütununda başlangıç tarihi, C sütununda eklenecek miktar yer alır. Kodu standart bir modüle yapıştırın; makro her satırda kodu doğrudan DateAdd işlevine verir. Satırlarda ay sonu ve artık yıl durumları da bulunur.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Aralık Kodu
A2 = yyyy
A3 = q
A4 = m
A5 = ww
A6 = d
A7 = m
B1 = Başlangıç
B2 = 29.02.2024
B3 = 15.01.2024
B4 = 31.01.2024
B5 = 01.03.2024
B6 = 01.03.2024
B7 = 31.03.2024
C1 = Miktar
C2 = 1
C3 = 2
C4 = 1
C5 = 3
C6 = -10
C7 = -1
D1 = Sonuç
D2 = 28.02.2025
D3 = 15.07.2024
D4 = 29.02.2024
D5 = 22.03.2024
D6 = 20.02.2024
D7 = 29.02.2024
VBA 15 satır
Option Explicit

Sub AraliklariUygula()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Zaman Aralıkları")

    ' A: aralık kodu, B: başlangıç tarihi, C: miktar, D: sonuç
    For i = 2 To 7
        ws.Cells(i, 4).Value = DateAdd(ws.Cells(i, 1).Value, ws.Cells(i, 3).Value, ws.Cells(i, 2).Value)
    Next i

    ws.Range("D2:D7").NumberFormat = "dd.mm.yyyy"
End Sub
DateAdd
Formülünü incelemek için bir hücre seçin.
ABCD
1Aralık KoduBaşlangıçMiktarSonuç
2yyyy29.02.2024128.02.2025
3q15.01.2024215.07.2024
4m31.01.2024129.02.2024
5ww01.03.2024322.03.2024
6d01.03.2024-1020.02.2024
7m31.03.2024-129.02.2024
Zaman AralıklarıExcelDepo v1.0.0
Artık yıl gününe (29 Şubat) bir yıl eklendiğinde sonuç 28.02.2025 olur; yani gün, o yılın Şubat ayının son gününe çekilir. İki çeyrek ekleme sonucu 15.07.2024, 31 Ocak'a bir ay ekleme sonucu 29.02.2024 değerindedir. Üç hafta ekleme 22.03.2024, negatif sayıyla 10 gün geri gitme 20.02.2024, 31 Mart'tan bir ay geri gitme ise 29.02.2024 sonucunu verir. Negatif miktarın geriye gittiğine dikkat edin.

3. Taksit planında son taksit tarihi​

Her müşterinin ilk taksit tarihi ve taksit sayısı verilmiştir. Makro son dolu satırı kendisi bulur ve son taksit tarihini D sütununa yazar. Kodu standart bir modüle yapıştırın. İlk taksit zaten bir taksit sayıldığı için eklenecek ay sayısı taksit sayısından bir eksiktir.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Müşteri
A2 = Ayşe Yılmaz
A3 = Mehmet Kaya
A4 = Zeynep Arslan
A5 = Can Demir
A6 = Elif Şahin
B1 = İlk Taksit
B2 = 31.01.2024
B3 = 15.03.2024
B4 = 10.05.2024
B5 = 31.08.2024
B6 = 30.11.2024
C1 = Taksit Sayısı
C2 = 6
C3 = 12
C4 = 3
C5 = 4
C6 = 10
D1 = Son Taksit
D2 = 30.06.2024
D3 = 15.02.2025
D4 = 10.07.2024
D5 = 30.11.2024
D6 = 30.08.2025
VBA 19 satır
Option Explicit

Sub SonTaksitTarihi()
    Dim ws As Worksheet
    Dim sonSatir As Long
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Taksit Planı")

    ' A sütunundaki son dolu satırı bul
    sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To sonSatir
        ' B: ilk taksit, C: taksit sayısı, D: son taksit
        ws.Cells(i, 4).Value = DateAdd("m", ws.Cells(i, 3).Value - 1, ws.Cells(i, 2).Value)
    Next i

    ws.Range("D2:D" & sonSatir).NumberFormat = "dd.mm.yyyy"
End Sub
DateAdd
Formülünü incelemek için bir hücre seçin.
ABCD
1Müşteriİlk TaksitTaksit SayısıSon Taksit
2Ayşe Yılmaz31.01.2024630.06.2024
3Mehmet Kaya15.03.20241215.02.2025
4Zeynep Arslan10.05.2024310.07.2024
5Can Demir31.08.2024430.11.2024
6Elif Şahin30.11.20241030.08.2025
Taksit PlanıExcelDepo v1.0.0
Ayşe Yılmaz'ın son taksit tarihi 30.06.2024, Mehmet Kaya'nın 15.02.2025 olarak hesaplanır. İlk taksiti ayın 31'inde olan müşterilerde (ör. 30.11.2024) son taksit, ilgili ayın son gününe oturur; çünkü DateAdd olmayan günü ayın son gününe çeker. Son satırı End(xlUp) ile bulmak, listeye yeni müşteri eklendiğinde kodu değiştirmeden çalışmanızı sağlar.

Kullanırken dikkat edin​

  • Ay ve dakika kodlarını karıştırmayın: Ay için m, dakika için n kullanılır. "m" yerine "n" yazarsanız tarihe ay değil dakika eklenir ve sonuç beklediğinizden farklı çıkar.
  • Aralık kodları İngilizcedir: Excel'in dili Türkçe olsa da interval kodları ("yyyy", "d", "h" gibi) değişmez. "yyyy" yerine "yıl" ya da "gün" yazarsanız çalışma zamanı hatası alırsınız. Kodu yanlış yazmamak için küçük harfle yazmanız yeterlidir.
  • Ay sonu davranışını bilin: Ay ekleyince gün otomatik olarak ayın son gününe çekilir; ancak bu işlem geri alınmaz. 31 Ocak'a bir ay ekleyip sonucuna (Şubat'ın son günü) bir ay daha eklerseniz 31 Mart'ı değil, 29 Mart'ı bulursunuz. Her taksiti hesaplarken başlangıç tarihinden gidip ay sayısını tek seferde eklemek daha güvenlidir.
  • Tarihi metin olarak yazmayın: date yerine "03/04/2024" gibi bir metin verirseniz yorumlama, bilgisayarın bölgesel ayarlarına göre değişir ve gün ile ay yer değiştirebilir. Güvenli yol, hücre değerini ya da DateSerial işleviyle oluşturulmuş tarihi kullanmaktır.
  • Hafta sonu ve tatilleri atlamaz: DateAdd yalnızca takvim günlerini sayar; iş günü hesaplamaz. İş günü eklemek için çalışma sayfasındaki İŞGÜNÜ işlevini Application.WorksheetFunction üzerinden ya da doğrudan sayfada kullanın. Çalışma sayfasında ay eklemek için aynı işi görecek formül şudur:
    Excel formülü
    =SERİTARİH(A2;3)
    =EDATE(A2,3)
  • Sonuç aralığı ve ondalık sayılar: Ondalık bir number değeri en yakın tam sayıya yuvarlanır; yani 1,5 gün ekleyemezsiniz. Yarım gün için "h" koduyla 12 saat ekleyin. Sonuç 100-9999 yılları dışına taşarsa hata oluşur.
  • Hücre biçimini ayarlayın: Makro sonucu hücreye yazdığında Excel bazen tarih yerine sıra numarası gösterebilir. Hücrenin NumberFormat özelliğini "dd.mm.yyyy" gibi bir tarih biçimine ayarlayın.
  • İlgili konular:
    • DateDiff: İki tarih arasındaki farkı seçilen aralık türünde verir, DateAdd'in tersi gibi düşünülebilir.
    • DatePart: Tarihin yıl, ay, çeyrek gibi bölümünü döndürür.
    • DateSerial ve DateValue: Güvenli tarih değeri oluşturmak için kullanılır.
    • Date ve Now: Bugünün tarihini ve saatini verir.
    • Format: Sonucu metin olarak biçimlendirir.
    • SERİTARİH: Çalışma sayfasında belirli ay sayısı kadar ileri ya da geri tarih bulur.
    • SERİAY: Belirli ay sonrasındaki ayın son gününü verir.
    • İŞGÜNÜ: Hafta sonlarını ve tatilleri atlayarak iş günü ekler.
    • TARİH: Yıl, ay ve günden tarih oluşturur.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
15
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst