Koşullara Göre Kaydet veya Düzeltme

yanginci34

Altın Üye
Katılım
6 Temmuz 2010
Mesajlar
1,627
Excel Vers. ve Dili
excel2016
Altın Üyelik Bitiş Tarihi
12-10-2026
Merhaba arkadaşlar;
Benim sorum şöyle örnek dosyamda userform daki tarih, ilçe ve mahalle tabloda aynı satır içerisinde daha önceden kayıt edilmişse değerini userform daki değer ile düzeltsin eğer eğer bunun aksi ise en son dolu satırın altına yeni kayıt eklesin.
Şimdiden yardım edenlere teşekkürler.
 

Ekli dosyalar

yanginci34

Altın Üye
Katılım
6 Temmuz 2010
Mesajlar
1,627
Excel Vers. ve Dili
excel2016
Altın Üyelik Bitiş Tarihi
12-10-2026
İyi geceler arkadaşlar konu günceldir.
 

yanginci34

Altın Üye
Katılım
6 Temmuz 2010
Mesajlar
1,627
Excel Vers. ve Dili
excel2016
Altın Üyelik Bitiş Tarihi
12-10-2026
Arkadaşlar biraz uğraştım ve bazı örnekleri geliştirerek sorunumu kendim giderdim. İhtiyacı olan arkadaşlara örnek olması açısından kaydet butonuna yazdığım kodu aşağıda paylaşıyorum.
Kod:
Private Sub CommandButton1_Click()
TextBox1.Value = Format(TextBox1.Value, "d.mm.yyyy")
son = Sheets("Sayfa1").Cells(Rows.Count, 1).End(3).Row
For i = 2 To son
veria = CDate(Sheets("Sayfa1").Cells(i, "a").Value)
verib = Sheets("Sayfa1").Cells(i, "b").Value
veric = Sheets("Sayfa1").Cells(i, "c").Value
verid = Sheets("Sayfa1").Cells(i, "d").Value
If veria = CDate(TextBox1.Value) And verib = ComboBox1.Value And veric = ComboBox2 Then
Sheets("Sayfa1").Cells(i, "a").Select
ActiveCell.Offset(0, 3).Select
ActiveCell.Value = TextBox2.Value
Exit Sub
End If
Next
Sheets("Sayfa1").Cells(son + 1, 1) = CLng(CDate(TextBox1.Value))
Sheets("Sayfa1").Cells(son + 1, 2) = ComboBox1.Value
Sheets("Sayfa1").Cells(son + 1, 3) = ComboBox2.Value
Sheets("Sayfa1").Cells(son + 1, 4) = TextBox2.Value
End Sub
 

Korhan Ayhan

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

Veri sayısı arttıkça döngü ileride yavaş kalacaktır. Aşağıdaki kod yapısı biraz daha performans sağlayacaktır.

C++:
Private Sub CommandButton1_Click()
    Dim Son As Long, Bul As Long
   
    If TextBox1.Value = "" Then
        MsgBox "Lütfen tarih girişini yapınız!", vbCritical
        TextBox1.SetFocus
        Exit Sub
    End If
   
    If ComboBox1.Value = "" Then
        MsgBox "Lütfen ilçe girişini yapınız!", vbCritical
        ComboBox1.SetFocus
        Exit Sub
    End If
   
    If ComboBox2.Value = "" Then
        MsgBox "Lütfen mahalle girişini yapınız!", vbCritical
        ComboBox2.SetFocus
        Exit Sub
    End If
   
    If TextBox2.Value = "" Then
        MsgBox "Lütfen değer girişini yapınız!", vbCritical
        TextBox2.SetFocus
        Exit Sub
    End If
   
    Son = Cells(Rows.Count, 1).End(3).Row
   
    On Error Resume Next
    Bul = 0
    Bul = Evaluate(Replace("MATCH(""" & CLng(CDate(TextBox1)) & """&""" & ComboBox1 & """&""" & ComboBox2 & """,A1:A1048576&B1:B1048576&C1:C1048576,0)", 1048576, Son))
    On Error GoTo 0

    If Bul > 0 Then
        Cells(Bul, 4) = TextBox2.Value
        MsgBox "Kayıt güncellenmiştir.", vbInformation
    Else
        Son = Son + 1
        Cells(Son, 1) = CDate(TextBox1.Value)
        Cells(Son, 2) = ComboBox1.Value
        Cells(Son, 3) = ComboBox2.Value
        Cells(Son, 4) = TextBox2.Value
        MsgBox "Yeni kayıt işlenmiştir.", vbInformation
    End If
End Sub
 

yanginci34

Altın Üye
Katılım
6 Temmuz 2010
Mesajlar
1,627
Excel Vers. ve Dili
excel2016
Altın Üyelik Bitiş Tarihi
12-10-2026
Merhaba,

Veri sayısı arttıkça döngü ileride yavaş kalacaktır. Aşağıdaki kod yapısı biraz daha performans sağlayacaktır.

C++:
Private Sub CommandButton1_Click()
    Dim Son As Long, Bul As Long
  
    If TextBox1.Value = "" Then
        MsgBox "Lütfen tarih girişini yapınız!", vbCritical
        TextBox1.SetFocus
        Exit Sub
    End If
  
    If ComboBox1.Value = "" Then
        MsgBox "Lütfen ilçe girişini yapınız!", vbCritical
        ComboBox1.SetFocus
        Exit Sub
    End If
  
    If ComboBox2.Value = "" Then
        MsgBox "Lütfen mahalle girişini yapınız!", vbCritical
        ComboBox2.SetFocus
        Exit Sub
    End If
  
    If TextBox2.Value = "" Then
        MsgBox "Lütfen değer girişini yapınız!", vbCritical
        TextBox2.SetFocus
        Exit Sub
    End If
  
    Son = Cells(Rows.Count, 1).End(3).Row
  
    On Error Resume Next
    Bul = 0
    Bul = Evaluate(Replace("MATCH(""" & CLng(CDate(TextBox1)) & """&""" & ComboBox1 & """&""" & ComboBox2 & """,A1:A1048576&B1:B1048576&C1:C1048576,0)", 1048576, Son))
    On Error GoTo 0

    If Bul > 0 Then
        Cells(Bul, 4) = TextBox2.Value
        MsgBox "Kayıt güncellenmiştir.", vbInformation
    Else
        Son = Son + 1
        Cells(Son, 1) = CDate(TextBox1.Value)
        Cells(Son, 2) = ComboBox1.Value
        Cells(Son, 3) = ComboBox2.Value
        Cells(Son, 4) = TextBox2.Value
        MsgBox "Yeni kayıt işlenmiştir.", vbInformation
    End If
End Sub
Hocam çok teşekkürler sizden bir şey rica edeceğim öğrenmek açısından aşağıdaki kodu ben çözemedim basit bir şekilde eğer mümkünse açıklarmısınız.
Bul = Evaluate(Replace("MATCH(""" & CLng(CDate(TextBox1)) & """&""" & ComboBox1 & """&""" & ComboBox2 & """,A1:A1048576&B1:B1048576&C1:C1048576,0)", 1048576, Son))
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,256
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İşin sırrı zaten o satırda...

MATCH fonksiyonunun Türkçe karşılığı KAÇINCI'dır.

A-B-C sütunlarında ki veri bu fonksiyonu içinde birleştirilerek sizin TextBox ve ComboBox nesnelerine girdiğiniz değerler bu birleştirilen dizide aranıyor. Bu da daha hızlı çalışmasını sağlıyor. Bir nevi CTRL+F (Bul) işlevi gibi çalışmaktadır.

Siz döngü ile satır satır bu kontrolü yapıyorsunuz. Bu da zaman kaybına sebep oluyor.
 

yanginci34

Altın Üye
Katılım
6 Temmuz 2010
Mesajlar
1,627
Excel Vers. ve Dili
excel2016
Altın Üyelik Bitiş Tarihi
12-10-2026
İşin sırrı zaten o satırda...

MATCH fonksiyonunun Türkçe karşılığı KAÇINCI'dır.

A-B-C sütunlarında ki veri bu fonksiyonu içinde birleştirilerek sizin TextBox ve ComboBox nesnelerine girdiğiniz değerler bu birleştirilen dizide aranıyor. Bu da daha hızlı çalışmasını sağlıyor. Bir nevi CTRL+F (Bul) işlevi gibi çalışmaktadır.

Siz döngü ile satır satır bu kontrolü yapıyorsunuz. Bu da zaman kaybına sebep oluyor.
Çok teşekkür ederim hocam iyi günler diliyorum
 
Üst