Özellik ikonu

DatePicker

İndirme izni yok

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.

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.
Önemli sınırlar: Bu denetim 32 bit bir bileşendir. 64 bit Office sürümlerinde listede görünmez ve çalışmaz. Dosyayı denetimin kurulu olmadığı bir bilgisayara götürürseniz denetim yüklenemez. Bu yüzden ortak kullanılan çalışma kitaplarında DatePicker'a bağımlı olmak risklidir.

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
Burada Value özelliği seçilen tarihi bir Date değeri olarak verir.

Ö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.
Denetimi kodla konumlandırmak için ActiveX denetimlerinin ortak özellikleri olan Left, Top, Width, Height ve Visible da kullanılır.

Ö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ı nereye yazılır: Denetimi çalışma sayfasına eklediyseniz yordamlar o sayfanın kod modülüne yazılır (Geliştirici sekmesinde Kodu Görüntüle ya da sayfa sekmesine sağ tıklayıp Kod Görüntüle). Denetimi UserForm'a eklediyseniz yordam UserForm'un kod modülüne yazılır. Standart modüle yazılan DTPicker1_Change yordamı hiç çalışmaz.

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
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.

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.
AB
1MüşteriTeslim Tarihi
2Anadolu Gıda10.03.2025
3Ege Tekstil24.03.2025
4Marmara Yapı
5Karadeniz Lojistik
Teslim TakvimiExcelDepo v1.0.0
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.

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.
ABCDE
1Personelİşe GirişHafta Günü NoAy NoDeneme Bitişi
2Ayşe Yılmaz04.03.20241304.06.2024
3Mehmet Demir15.07.20241715.10.2024
4Elif Kaya20.11.202311120.02.2024
5Can Öztürk06.01.20251106.04.2025
6Zeynep Arslan02.09.20241902.12.2024
7Burak Şahin17.02.20251217.05.2025
Personel TarihleriExcelDepo v1.0.0
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.

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.
ABC
1Sipariş NoSipariş TarihiDurum
2SP-100115.01.2025Geçerli
3SP-100230.06.2025Geçerli
4SP-100330.12.2024Geçersiz
5SP-100431.12.2025Geçerli
6SP-100505.01.2026Geçersiz
7SP-100618.03.2025Geçerli
Sipariş KontrolExcelDepo v1.0.0
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.

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.
Ö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
9
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst