ListBoxta iki tarih arası listeleme?

Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Merhaba arkadaşlar.
Ekteki dosyamada iki tarih arasını ListBoxta listelemek istiyorum.
Örnek dosyaları inceledim ama altından kalkamadım. İki ayrı textBoxa tarih giriyorum. Ama butonuma tıkladığımda listeleyecek kodları düzenleyemiyorum?
Yardımcı olur musunuz?
 

Ekli dosyalar

Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Aşağıdaki kodlarımda bir hata var ama çözemedim?
A sütunudaki tarihleri listeleyemedim?

Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    
        
ListBox1.RowSource = ""
ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "80;90"

Set sh = Sheets("satış")
If WorksheetFunction.CountA(sh.Cells) > 0 Then
satson = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
sutson = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Else
Exit Sub
End If
sat1 = 0
sat2 = 0
sat3 = 0
On Error Resume Next
If IsDate(TextBox16.Text) = True Then
If IsDate(TextBox17.Text) = True Then

For i = 3 To satson
If CDate(TextBox16.Text) <= CDate(Format(sh.Cells(i, "a").Value, "dd.mm.yyyy")) & Chr(10) _
And CDate(TextBox17.Text) >= CDate(Format(sh.Cells(i, "a").Value, "dd.mm.yyyy")) Then
ListBox1.AddItem
ListBox1.List(sat1, 0) = sh.Cells(i, "a").Value
ListBox1.List(sat1, 1) = sh.Cells(i, "a").Value
sat1 = sat1 + 1
End If


Next
End If
End If
    
End Sub
 
Katılım
13 Nisan 2008
Mesajlar
205
Excel Vers. ve Dili
Excel 2003
Altın Üyelik Bitiş Tarihi
10/05/2019
Emine hanım sorunuzun cevabını UMO sayfasına verileri alan autofilter makrolarıyla aslında cevabını zaten vermişsiniz. Lakin satış formunda revize edilmesi gerekiyordu. İlgili revizeli dosya ektedir. Diğer arkadaşlara da ışık tutması dileğiyle. İyi çalışmalar....
 

Ekli dosyalar

Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Cevabınız için teşekkür ederim. Lakin benim istediğim iki tarih arasını listboxta listelemek.
Bu yaptığımız revizyonu rapor sayfasında, dediğiniz gibi halledebiliyorum. Ama ihtiyacıma cevap vermiyor?
Ayrıca UMU ya aktar dediğimde sağlıklı sonuç vermiyor!
ListBoxta süzme yapamıyor muyuz?

Saygılarımla...
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Arkadaşlar bu konuda yardımcı olabilir misiniz?
Kodlarımı aşağıdaki gibi düzenlemeye çalıştım ama yapamıyorum maalesef.
Dosyam son şekliyle ektedir. Yardımcı olabilir misiniz?

Kod:
    Private Sub CommandButton12_Click()
        If TextBox16.Value = "" Then
            MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
            Exit Sub
        End If
        If TextBox17.Value = "" Then
            MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
            Exit Sub
        End If
        bastarih = CDbl(CDate(TextBox16.Value))
        sontarih = CDbl(CDate(TextBox17.Value))
       
           
           
        ListBox1.Clear
        For i = 2 To 1000
        If CLng(CDate(Worksheets(1).Range("b" & i).Value)) >= CLng(CDate(TextBox16.Text)) _
        And CLng(CDate(Worksheets(1).Range("b" & i).Value)) <= CLng(CDate(TextBox17.Text)) Then
        sat1 = i: sat = "0000" + sat1: sat = Right(sat, 5) + " = "
        ekle = (" - " & (Worksheets(1).Range("b" & i).Value) & " - " _
        & (Worksheets(3).Range("f" & i).Value))
        ListBox1.AddItem (sat + ekle)
        End If
        TextBox18.Text = ListBox1.ListCount
        Next i
       
       

    End Sub
 

Ekli dosyalar

Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
ekteki kodları denermisiniz.

Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    Satir = 1
    On Error Resume Next
    ListBox1.RowSource = ""
    ListBox1.Clear
    On Error GoTo 0
    
    ReDim Veri_Dizisi(1 To 22, 1 To 65536)
    
    With Worksheets("Satış")
           
    For i = 2 To .Cells(Rows.Count, 1).End(3).Row
    
    If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then
    Satir = Satir + 1
    
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    
    Next Sutun
    
    End If
    
    Next i
    End With
    
    ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir)
    ListBox1.Column = Veri_Dizisi
    
End Sub
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Bu güzel çalışma dosyası için verilen emek ve katkılar için forum dostları ve üstadlara teşekkürler.
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
ekteki kodları denermisiniz.

Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    Satir = 1
    On Error Resume Next
    ListBox1.RowSource = ""
    ListBox1.Clear
    On Error GoTo 0
    
    ReDim Veri_Dizisi(1 To 22, 1 To 65536)
    
    With Worksheets("Satış")
           
    For i = 2 To .Cells(Rows.Count, 1).End(3).Row
    
    If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then
    Satir = Satir + 1
    
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    
    Next Sutun
    
    End If
    
    Next i
    End With
    
    ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir)
    ListBox1.Column = Veri_Dizisi
    
End Sub
Allah razı olsun Hüseyin Bey. Mükemmel oldu.
Ama TOPLAM KAYIT göstermiyor? Ne yapmalıyım?
Birde kodlar hakkında kısa bilgiler alabilir miyim?
Bu güzel çalışma dosyası için verilen emek ve katkılar için forum dostları ve üstadlara teşekkürler.
Çalışma tamamlanınca emeği geçen bütün arkadaşları tek tek zikrederek dosyayı paylaşacağım. Şimdiden teşekkür ederim... :)
 
Son düzenleme:
Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
Allah razı olsun Hüseyin Bey. Mükemmel oldu.
Ama TOPLAM KAYIT göstermiyor? Ne yapmalıyım?
Birde kodlar hakkında kısa bilgiler alabilir miyim?

Toplam kayıt sayısını ekledim birde en basta bos satır bırakmısım onu temizledim.


Açıklama olarak 2. kod kısmı ekledim biraz karışık oldu gibi takıldığınız yer olursa yardıımcı olmaya çalışırım.





Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    Satir = 0
    On Error Resume Next
    ListBox1.RowSource = ""
    ListBox1.Clear
    On Error GoTo 0
    
    ReDim Veri_Dizisi(1 To 22, 1 To 65536)
    
    With Worksheets("Satış")
           
    For i = 2 To .Cells(Rows.Count, 1).End(3).Row
    
    If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then
    Satir = Satir + 1
    
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    
    Next Sutun
    
    End If
    
    Next i
    End With
    
    ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir)
    ListBox1.Column = Veri_Dizisi
    TextBox18.Text = ListBox1.ListCount
   

End Sub
kodların açıklamarı için 2. kısmı ekledim burası sadece açıklama eklenmiş hali.
bu kısmı bos bir excel kod kısmına yapıştırırsanız açıklamar yeşil olur daha rahat okumak için.



Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    Satir = 0
    On Error Resume Next
    ListBox1.RowSource = ""
    ListBox1.Clear
    On Error GoTo 0
    
    ReDim Veri_Dizisi(1 To 22, 1 To 65536)   ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır  sanki bos bir excel sayfası gibi.
    
    With Worksheets("Satış")
           
    For i = 2 To .Cells(Rows.Count, 1).End(3).Row  'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz. 


'if ile ilk satıra bakıyoruz bizim istediğimiz kritere uyuyormu. yani kayıt tatihi bizim istediğimiz satırlar arasındamı.Evet ise bir alt bolumdeki yeni tabloyu dolduracağız.
  
    If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then

'-------------------------------------------
    Satir = Satir + 1 
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    Next Sutun
    End If
   'eğer satış sayfasındaki ilk satır bizim istediğimiz satır ise ilk olusturduğumuz bos tablonun ilk satırına ve sutunlarına satış sayfasındaki ilgili satırı alma işlemi yapılıyor. 
   'Artık bizim Veri_dizini tablomuzun 1 satır ve 21 sutunu satış tablosunun ilk satırı ve sutunları aynı oldu..
'Burda aslında sabit veriler arasında işimize yarayanları süzüp veri_dinzi tablosuna atıyoruz.

'-----------------------------------------------
    Next i  'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.

    End With
    
    ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.

    ListBox1.Column = Veri_Dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
    TextBox18.Text = ListBox1.ListCount 'burda listboxta kaç tane satır varsa textboxa onu yaz dedik.
   
End Sub
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Allah razı olsun Hüseyin Bey.
Çok yararlı oldu. Bir ders mahiyetinde...
Takıldığım husus şu; Tarihleri A sütunundan alıyor. Ben bu tarih sütununu nasıl değiştirebilirim?
Örneğin başka bir raporlama yaparken 21. sütundaki tarihleri kontrol etmem gerekirse.
Kriter şu kodlarda mı veriliyor?
Kod:
Satir = Satir + 1
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    Next Sutun
    End If
 
Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then


burdaki formul a sutununa bakıyor burdaki 1 leri 21 yapmanız yeterli olacaktır.
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Hüseyin Bey,
Eğer sorgulamada aranan tarih ya da tarih aralığı yoksa aşağıdaki satır hata veriyor.

Kod:
ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,608
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Aşağıdaki şekilde deneyin.

Kod:
If Satir > 0 Then ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir)
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Teşekkürler Korhan Bey.
Gecenin bir yarısı yorduk sizi... Allah razı olsun.
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Bu kodları revize etmeden önce iki tarihten birin ya da ikisini girmeden tıklanamıyordı.
Lütfen ilk tarihi girin yada son tarihi girin şeklinde hata verdirtiyorduk.
Nasıl olduğunu anlayamadım ama, Şu an bu çalışmıyor. Aşağıdaki kodlarda şu sıra hata veriyor?

bastarih = CDbl(CDate(TextBox16.Value))

Kod:
Private Sub CommandButton12_Click()
    If TextBox16.Value = "" Then
        MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    If TextBox17.Value = "" Then
        MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation
        Exit Sub
    End If
    
    
    bastarih = CDbl(CDate(TextBox16.Value))
    sontarih = CDbl(CDate(TextBox17.Value))
    Satir = 0
    On Error Resume Next
    ListBox1.RowSource = ""
    ListBox1.Clear
    On Error GoTo 0
    
    ReDim Veri_Dizisi(1 To 22, 1 To 65536)   ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır  sanki bos bir excel sayfası gibi.
    
    With Worksheets("Satış")
           
    For i = 2 To .Cells(Rows.Count, 1).End(3).Row  'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz.


'if ile ilk satıra bakıyoruz bizim istediğimiz kritere uyuyormu. yani kayıt tatihi bizim istediğimiz satırlar arasındamı.Evet ise bir alt bolumdeki yeni tabloyu dolduracağız.
  
    If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then 'tarihlerin bakılacağı sütun

'-------------------------------------------
    Satir = Satir + 1
    For Sutun = 1 To 21
    Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
    Next Sutun
    
    If IsNumeric(.Cells(i, 9)) = True Then
deg = deg + Round(.Cells(i, 9).Text, 2) * 1
End If ' tutar toplamlarını hesaplamak için
    
    
    End If
   'eğer satış sayfasındaki ilk satır bizim istediğimiz satır ise ilk olusturduğumuz bos tablonun ilk satırına ve sutunlarına satış sayfasındaki ilgili satırı alma işlemi yapılıyor.
   'Artık bizim Veri_dizini tablomuzun 1 satır ve 21 sutunu satış tablosunun ilk satırı ve sutunları aynı oldu..
'Burda aslında sabit veriler arasında işimize yarayanları süzüp veri_dinzi tablosuna atıyoruz.

'-----------------------------------------------
    Next i  'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.

    End With
    
    ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.

    ListBox1.Column = Veri_Dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
    TextBox18.Text = ListBox1.ListCount 'burda listboxta kaç tane satır varsa textboxa onu yaz dedik.
   
End Sub
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,823
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Aşağıdaki olaydan sonra

Kod:
Private Sub CommandButton12_Click()
bu kodları ekleyin

Kod:
If IsDate(TextBox16.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox17.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
Not: Kodlarınızda ekeleme veya silme işlemlerini yaparken etkileyen bölümleri gözden geçirin
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,823
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Hocam buradaki incelik "False Then" sanırım.
Bunu açıklar mısınız?
IsDate :(tarihmi diye sorguluyruz.)

False :(yanlışsa)
True : (doğruysa)

Kod:
If IsDate(TextBox16.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
TextBox16 nesnesindeki değer tarih değilse yani yanlış ise (False)mesaj verdiriyoruz.
 
Üst