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.
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
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.
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
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.
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
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.
Söz dizimi
İşlev üç bağımsız değişken alır ve hepsi zorunludur: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.
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
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Fatura No | Fatura Tarihi | Vade (Gün) | Vade Tarihi |
| 2 | FT-1001 | 15.03.2024 | 30 | 14.04.2024 |
| 3 | FT-1002 | 20.03.2024 | 45 | 04.05.2024 |
| 4 | FT-1003 | 02.04.2024 | 60 | 01.06.2024 |
| 5 | FT-1004 | 18.04.2024 | 15 | 03.05.2024 |
| 6 | FT-1005 | 06.05.2024 | 90 | 04.08.2024 |
| 7 | FT-1006 | 25.06.2024 | 30 | 25.07.2024 |
Vade TakibiExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Aralık Kodu | Başlangıç | Miktar | Sonuç |
| 2 | yyyy | 29.02.2024 | 1 | 28.02.2025 |
| 3 | q | 15.01.2024 | 2 | 15.07.2024 |
| 4 | m | 31.01.2024 | 1 | 29.02.2024 |
| 5 | ww | 01.03.2024 | 3 | 22.03.2024 |
| 6 | d | 01.03.2024 | -10 | 20.02.2024 |
| 7 | m | 31.03.2024 | -1 | 29.02.2024 |
Zaman AralıklarıExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Müşteri | İlk Taksit | Taksit Sayısı | Son Taksit |
| 2 | Ayşe Yılmaz | 31.01.2024 | 6 | 30.06.2024 |
| 3 | Mehmet Kaya | 15.03.2024 | 12 | 15.02.2025 |
| 4 | Zeynep Arslan | 10.05.2024 | 3 | 10.07.2024 |
| 5 | Can Demir | 31.08.2024 | 4 | 30.11.2024 |
| 6 | Elif Şahin | 30.11.2024 | 10 | 30.08.2025 |
Taksit PlanıExcelDepo v1.0.0
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:
- 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.