Genel Bakış
DatePicker (Date Picker), Excel'de hücreye takvimden tarih seçtirmek için kullanılan açılır takvim denetimine verilen addır. Excel'in yerleşik bir DatePicker nesnesi yoktur. Bu iş için genellikle Microsoft Date and Time Picker Control 6.0 (SP6) adlı ActiveX denetimi (VBA'daki sınıf adı DTPicker) kullanılır. Bu sayfada denetimin eklenmesi, özellikleri, olayları ve denetimin kullanılamadığı durumlarda uygulanabilecek yöntemler anlatılır.
Denetimi eklemek için şu adımları izleyin:
Denetimin listede yoksa ya da kullanıcılarınızın 64 bit Office'i varsa, aşağıdaki alternatifleri düşünün: Veri Doğrulama ile tarih kısıtlaması, UserForm üzerinde Gün/Ay/Yıl açılır kutuları veya kendi yazdığınız bir takvim formu.
Denetimle çalışan kodun temel kalıbı şöyledir:
Burada Value özelliği seçilen tarihi bir Date değeri olarak verir.
Olay yordamının genel söz dizimi şudur:
Yordamın adı, denetimin Ad özelliğiyle, olayın adından alt çizgiyle ayrılarak oluşur. Denetimin adını değiştirirseniz yordamın adını da değiştirmeniz gerekir.
Tabloda tarihi boş olan B4 ve B5 hücrelerinden birini seçtiğinizde denetim hücrenin üzerinde belirir. Takvimden bir gün seçince tarih hücreye gg.aa.yyyy biçiminde yazılır. Denetim kurulu değilse sayfa açıldığında denetim yüklenemez ve kod çalışmaz; bu durumda sonraki örneklerdeki yöntemlere geçin.
Makro her satırdaki tarihi önce IsDate ile denetler, sonra bölümlerine ayırır. İlk personel için hafta günü numarası 1, ay numarası 3 ve deneme süresi bitişi 04.06.2024 olarak yazıldı. Weekday işlevinin ikinci bağımsız değişkeni olan vbMonday, haftanın Pazartesi ile başlamasını sağlar. Bu bölümlere ayırma mantığı, Null olmayan bir Value değeri için DatePicker'dan gelen değere de aynen uygulanır.
Kural eklendikten sonra B2:B7 hücrelerine 2025 dışında bir tarih girmek engellenir. Makro, var olan değerleri de denetler: SP-1001 için sonuç Geçerli, SP-1003 için Geçersiz, SP-1005 için Geçersiz olarak yazıldı. Validation.Value özelliği, hücrenin mevcut değerinin kurala uygun olup olmadığını True ya da False olarak verir. Veri Doğrulama yalnızca elle girilen değerleri engeller; yapıştırılan veriler kuralı atlayabilir.
DatePicker nedir, nerede bulunur
Excel şeridinde Tarih Seçici adında yerleşik bir düğme ya da nesne bulunmaz. Word'deki Tarih Seçici içerik denetimi de Excel'de yoktur. Excel kullanıcılarının DatePicker dediği şey, Windows ile birlikte gelen MSCOMCT2.OCX dosyasındaki Date and Time Picker ActiveX denetimidir.Denetimi eklemek için şu adımları izleyin:
- Geliştirici > Denetimler > Ekle > Diğer Denetimler (Developer > Controls > Insert > More Controls) yolunu izleyin. Geliştirici sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir bölümünden açın.
- Listeden Microsoft Date and Time Picker Control 6.0 (SP6) seçeneğini bulun ve sayfada bir alan çizin.
- Tasarım Modu açıkken denetime sağ tıklayıp Özellikler penceresinden adını ve biçimini ayarlayın. Varsayılan ad DTPicker1'dir.
Denetimin listede yoksa ya da kullanıcılarınızın 64 bit Office'i varsa, aşağıdaki alternatifleri düşünün: Veri Doğrulama ile tarih kısıtlaması, UserForm üzerinde Gün/Ay/Yıl açılır kutuları veya kendi yazdığınız bir takvim formu.
Denetimle çalışan kodun temel kalıbı şöyledir:
VBA
3 satır
Private Sub DTPicker1_Change()
ActiveCell.Value = DTPicker1.Value
End Sub
Önemli özellikler
DTPicker denetiminde en sık kullanılan özellikler şunlardır:- Value: Seçili tarihi ya da saati okur veya ayarlar. CheckBox özelliği açıksa ve kutu işaretsizse değer Null olabilir; atama yapmadan önce kontrol edin.
- Format: Görünüm biçimini belirler. dtpLongDate (0) uzun tarih, dtpShortDate (1) kısa tarih, dtpTime (2) saat, dtpCustom (3) özel biçim anlamına gelir.
- CustomFormat: Format özelliği dtpCustom iken kullanılan biçim metnidir (ör. dd.MM.yyyy).
- MinDate ve MaxDate: Seçilebilecek en erken ve en geç tarihi sınırlar.
- CheckBox: True ise denetimin yanında bir onay kutusu görünür; kutu işaretli değilse tarih seçilmemiş sayılır.
- UpDown: True ise açılır takvim yerine yukarı/aşağı düğmesi görünür.
- Day, Month, Year: Seçili tarihin gün, ay ve yıl bölümlerini ayrı ayrı okur ya da ayarlar.
Önemli yöntemler ve olaylar
Denetimin başlıca olayları şunlardır:- Change: Seçilen tarih değiştiğinde çalışır. Seçimi hücreye yazmak için en çok kullanılan olaydır.
- DropDown: Takvim açıldığında çalışır.
- CloseUp: Takvim kapandığında çalışır.
Olay yordamının genel söz dizimi şudur:
VBA
3 satır
Private Sub DTPicker1_Change()
' seçilen tarihle yapılacak işlem
End Sub
1. Sayfadaki DatePicker ile hücreye tarih yazma
Sayfaya Date and Time Picker denetimini ekleyin ve adını DTPicker1 olarak bırakın. Aşağıdaki kodu bu sayfanın kod modülüne yapıştırın. B sütunundan bir hücre seçtiğinizde denetim o hücrenin üzerine gelir; takvimden seçtiğiniz tarih hücreye yazılır. Kod, denetimin kurulu olmasını gerektirdiği için bu sayfada çalıştırılmaz.
VBA
26 satır
Option Explicit
' B sütununda bir hücre seçilince denetimi o hücrenin üzerine getirir
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 And Target.Column = 2 And Target.Row > 1 Then
With Me.DTPicker1
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 20
.Height = Target.Height
.Format = 1 ' dtpShortDate
If IsDate(Target.Value) Then .Value = Target.Value
.Visible = True
End With
Else
Me.DTPicker1.Visible = False
End If
End Sub
' Takvimden tarih seçilince etkin hücreye yazar
Private Sub DTPicker1_Change()
If Not IsNull(Me.DTPicker1.Value) Then
ActiveCell.Value = Me.DTPicker1.Value
ActiveCell.NumberFormat = "dd.mm.yyyy"
End If
End Sub
DatePicker
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Müşteri | Teslim Tarihi |
| 2 | Anadolu Gıda | 10.03.2025 |
| 3 | Ege Tekstil | 24.03.2025 |
| 4 | Marmara Yapı | |
| 5 | Karadeniz Lojistik |
Teslim TakvimiExcelDepo v1.0.0
2. Seçilen tarihin bölümlerini ayrıştırma
Takvimden seçilen değer bir tarihtir ve gün, ay, hafta günü gibi bilgilere ayrılabilir. Ancak CheckBox özelliği açıkken ve kutu işaretsizse DTPicker Value değeri Null döner; bu durumda ayrıştırma yapılamaz. Bu örnek DatePicker kullanmadan, tarih hücrelerinden aynı bilgileri üretir. Kodu standart modüle yapıştırıp çalıştırın. Makro B sütunundaki işe giriş tarihlerini okur, hafta günü numarasını (Pazartesi 1), ay numarasını ve üç ay sonraki deneme süresi bitiş tarihini yazar.
VBA
22 satır
Option Explicit
Sub TarihBilgisiYaz()
Dim ws As Worksheet
Dim i As Long
Dim t As Date
Set ws = ActiveSheet
For i = 2 To 7
If IsDate(ws.Cells(i, 2).Value) Then
t = ws.Cells(i, 2).Value
' Pazartesi 1 olacak şekilde hafta günü numarası
ws.Cells(i, 3).Value = Weekday(t, vbMonday)
' Ay numarası
ws.Cells(i, 4).Value = Month(t)
' Üç ay sonraki tarih
ws.Cells(i, 5).Value = DateAdd("m", 3, t)
ws.Cells(i, 5).NumberFormat = "dd.mm.yyyy"
End If
Next i
End Sub
DatePicker
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Personel | İşe Giriş | Hafta Günü No | Ay No | Deneme Bitişi |
| 2 | Ayşe Yılmaz | 04.03.2024 | 1 | 3 | 04.06.2024 |
| 3 | Mehmet Demir | 15.07.2024 | 1 | 7 | 15.10.2024 |
| 4 | Elif Kaya | 20.11.2023 | 1 | 11 | 20.02.2024 |
| 5 | Can Öztürk | 06.01.2025 | 1 | 1 | 06.04.2025 |
| 6 | Zeynep Arslan | 02.09.2024 | 1 | 9 | 02.12.2024 |
| 7 | Burak Şahin | 17.02.2025 | 1 | 2 | 17.05.2025 |
Personel TarihleriExcelDepo v1.0.0
3. DatePicker yerine tarih doğrulama kuralı
DatePicker kullanılamıyorsa, hücreye yalnızca belirli aralıkta tarih girilmesini Veri Doğrulama ile zorlayabilirsiniz. Aşağıdaki kodu standart modüle yapıştırıp çalıştırın. Makro B2:B7 aralığına 2025 yılı içinde bir tarih girilmesi kuralını ekler, sonra her hücrenin kurala uyup uymadığını C sütununa yazar.
VBA
30 satır
Option Explicit
Sub TarihKuraliUygula()
Dim ws As Worksheet
Dim i As Long
Dim ilk As Long, son As Long
Set ws = ActiveSheet
' Tarihlerin seri numaraları
ilk = CLng(DateSerial(2025, 1, 1))
son = CLng(DateSerial(2025, 12, 31))
With ws.Range("B2:B7").Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=CStr(ilk), Formula2:=CStr(son)
.ErrorTitle = "Geçersiz tarih"
.ErrorMessage = "2025 yılı içinde bir tarih girin."
End With
' Mevcut değerlerin kurala uyup uymadığını denetle
For i = 2 To 7
If ws.Cells(i, 2).Validation.Value Then
ws.Cells(i, 3).Value = "Geçerli"
Else
ws.Cells(i, 3).Value = "Geçersiz"
End If
Next i
End Sub
DatePicker
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sipariş No | Sipariş Tarihi | Durum |
| 2 | SP-1001 | 15.01.2025 | Geçerli |
| 3 | SP-1002 | 30.06.2025 | Geçerli |
| 4 | SP-1003 | 30.12.2024 | Geçersiz |
| 5 | SP-1004 | 31.12.2025 | Geçerli |
| 6 | SP-1005 | 05.01.2026 | Geçersiz |
| 7 | SP-1006 | 18.03.2025 | Geçerli |
Sipariş KontrolExcelDepo v1.0.0
Kullanırken dikkat edin
- 64 bit Office uyumsuzluğu: Date and Time Picker denetimi 32 bit bir ActiveX bileşenidir. 64 bit Excel'de Diğer Denetimler listesinde görünmez, dosya 64 bit Excel'de açılınca denetim yüklenemez. Dağıtacağınız dosyalarda önce kullanıcıların Office sürümünü öğrenin.
- Başka bilgisayarda çalışmama sorunu: Denetim, kurulu olmadığı bir bilgisayarda yüklenmez ve ilgili kod hata verir. Excel güncellemeleri de bazen ActiveX denetimlerinin kaybolmasına yol açar. Güvenilir bir çözüm gerekiyorsa DatePicker'a bağımlı olmayan bir yöntem seçin.
- Null değer ve boş hücre: CheckBox özelliği açıksa Value, onay kutusu işaretsizken Null döner. Bu değeri doğrudan hücreye yazmadan önce IsNull ile denetleyin. Hücrede metin varsa Value'ya atamadan önce IsDate ile tarih olup olmadığına bakın.
- Olay yordamının doğru modülde olması: DTPicker1_Change gibi yordamlar yalnızca denetimin bulunduğu sayfanın ya da UserForm'un kod modülünde çalışır. Standart modüle yazılırsa hata vermez ama çalışmaz. Denetimin adını değiştirdiyseniz yordamın adını da güncelleyin.
- Tarih biçimi ve bölge ayarları: Hücreye tarih yazarken NumberFormat özelliğini açıkça belirleyin. Değeri metin olarak yazarsanız sayısal hesaplar bozulur. Kodda tarihi sabit yazmak yerine DateSerial kullanmak, bölge ayarlarından kaynaklanan gün/ay karışıklığını önler.
- İlgili konular:
- Veri Doğrulama: Veri > Veri Araçları > Veri Doğrulama (Data > Data Tools > Data Validation) ile tarih aralığı kuralı.
- Validation.Add: Doğrulama kuralını kodla ekleyen yöntem.
- UserForm, ComboBox ve ListBox: Kendi tarih seçim formunuzu kurmak için.
- Worksheet_Change ve Worksheet_SelectionChange: Hücre seçimine ya da değişikliğe göre işlem yapan olaylar.
- DateSerial, DateAdd, Weekday, Month, IsDate: VBA'da tarih işlevleri.
- BUGÜN, TARİH, HAFTANINGÜNÜ, AY: Çalışma sayfasında aynı işleri yapan işlevler.