Bir önceki benzer veriyi sorgulama

Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Merhaba arkadaşlar kolay gelsin,

Mazot takip listesini daha kolay ve bilgi güvenliği açısından daha iyi bir şekilde tutmak adına vba üzerinden küçük bi program tasarlıyorum , takıldığım yer ise şu
araçların plaka , aldığı mazot miktarı ve km bilgisi giriliyor hücrelere userform kullandırtarak, ben ise girdiğim plakanın bir önceki verisine bakıp girilen km nin daha düşük olmadığını kontrol edip eğer girilen km değeri daha düşükse hata verdirtmek istiyorum

yani plaka no girdiğimde o bilgiyi metin şeklinde alarak bundan bir önceki girilen satıra ulaşıp onun km bilgisiyle yeni girilen km bilgisini karşılaştırabilmek istiyorum
 

Cengiz Demir

Altın Üye
Katılım
29 Haziran 2018
Mesajlar
604
Excel Vers. ve Dili
Office 365 TR (32 Bit)
Altın Üyelik Bitiş Tarihi
05-04-2025
Merhaba.
Örnek dosya eklerseniz daha hızlı sonuç alabilirsiniz. :)
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Formun kodlarını aşağıdaki ile değiştirin.
Kod:
Private Sub CommandButton1_Click()
    Dim SonSatir As Long
    Dim Bak As Long
    With Worksheets("Sayfa1")
        SonSatir = WorksheetFunction.CountA(.Range("A:A")) + 1
        For Bak = 2 To SonSatir
            If .Cells(Bak, "B") = ComboBox1.Text And .Cells(Bak, "D") >= Int(TextBox2.Text) Then
                MsgBox "Kilometreyi kontrol ediniz. Daha önce " & .Cells(Bak, "D") & " km kaydedilmiş." & vbLf & "Km " & .Cells(Bak, "D") & " dan büyük olmalıdır."
                TextBox2.SetFocus
                TextBox2.SelStart = 0
                TextBox2.SelLength = Len(TextBox1)
                Exit Sub
            End If
        Next
        .Cells(SonSatir, 1) = Date
        .Cells(SonSatir, 2) = ComboBox1.Value
        .Cells(SonSatir, 3) = TextBox1.Value
        .Cells(SonSatir, 4) = TextBox2.Value
    End With
End Sub
 
Son düzenleme:
Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Merhaba.
Formun kodlarını aşağıdaki ile değiştirin.
Kod:
Private Sub CommandButton1_Click()
    Dim SonSatir As Long
    Dim Bak As Long
    SonSatir = WorksheetFunction.CountA(Worksheets("sayfa1").Range("A:A")) + 1
    With Worksheets("Sayfa1")
        For Bak = 2 To SonSatir
            If .Cells(Bak, "B") = ComboBox1.Text And .Cells(Bak, "D") >= Int(TextBox2.Text) Then
                MsgBox "Kilometreyi kontrol ediniz. Daha önce " & .Cells(Bak, "D") & " km kaydedilmiş." & vbLf & "Km " & .Cells(Bak, "D") & " dan büyük olmalıdır."
                TextBox2.SetFocus
                TextBox2.SelStart = 0
                TextBox2.SelLength = Len(TextBox1)
                Exit Sub
            End If
        Next
        .Cells(SonSatir, 1) = Date
        .Cells(SonSatir, 2) = ComboBox1.Value
        .Cells(SonSatir, 3) = TextBox1.Value
        .Cells(SonSatir, 4) = TextBox2.Value
    End With
End Sub
teşekkürler işimi çok gördü bunu kullanacağım fakat daha kolay bir yolu olmalı excel bu özelliğe sahiptir diye düşünüyorum look previous tarzı bir fonksiyon
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Yerleşik fonksiyon ile de şöyle olabilir.
Kod:
Private Sub CommandButton1_Click()
    Dim SonSatir As Long
    Dim SonKm As Long
    SonSatir = WorksheetFunction.CountA(Worksheets("sayfa1").Range("A:A")) + 1
    With Worksheets("Sayfa1")
        SonKm = WorksheetFunction.MaxIfs(.Range("D:D"), .Range("B:B"), ComboBox1.Text)
        If SonKm >= Int(TextBox2.Text) Then
            MsgBox "Kilometreyi kontrol ediniz. Daha önce " & SonKm & " km kaydedilmiş." & vbLf & "Km " & SonKm & " dan büyük olmalıdır.", vbExclamation
            TextBox2.SetFocus
            TextBox2.SelStart = 0
            TextBox2.SelLength = Len(TextBox1)
            Exit Sub
        End If
        .Cells(SonSatir, 1) = Date
        .Cells(SonSatir, 2) = ComboBox1.Value
        .Cells(SonSatir, 3) = TextBox1.Value
        .Cells(SonSatir, 4) = TextBox2.Value
    End With
End Sub
 

Korhan Ayhan

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

C++:
Private Sub CommandButton1_Click()
    With Worksheets("Sayfa1")
        Son_Satir = .Cells(.Rows.Count, 1).End(3).Row + 1
        Son_Km = Evaluate("Lookup(2,1/('" & .Name & "'!B:B=""" & ComboBox1.Value & """),'" & .Name & "'!D:D)")
        
        If CDbl(TextBox2.Value) < Son_Km Then
            MsgBox "Kaydetmek istediğiniz kilometre değeri son girilen kilometre değerinden küçük olamaz!" _
                   & vbCrLf & vbCrLf & "Kayıt işlemi iptal edilmiştir!", vbCritical
            Exit Sub
        End If
        
        .Cells(Son_Satir, 1) = Date
        .Cells(Son_Satir, 2) = ComboBox1.Value
        .Cells(Son_Satir, 3) = TextBox1.Value
        .Cells(Son_Satir, 4) = TextBox2.Value
    End With
End Sub
 
Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Bazen km tablosundaki değerler text olabiliyor onu nasıl yapabilirim burada sistem sıkıntıya düşmez mi ?, sayısal değer değilde metinsel bir değer girebiliyorum "temizlik", "forklift" gibi bu noktada sorguya girmesine gerek yok direkt olarak kayda işlemesi gerek
şöyle olabilir bu üstte belirttiğim gibi kayıt edeceğim zaman plaka no girişi de olmuyor, o yüzden combobox1.text kısıtında eğer sayıyla başlıyorsa sorguya gir başlamıyorsa direkt kaydet şeklinde yapılabilir
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Bazen km tablosundaki değerler text olabiliyor onu nasıl yapabilirim burada sistem sıkıntıya düşmez mi ?, sayısal değer değilde metinsel bir değer girebiliyorum "temizlik", "forklift" gibi bu noktada sorguya girmesine gerek yok direkt olarak kayda işlemesi gerek
şöyle olabilir bu üstte belirttiğim gibi kayıt edeceğim zaman plaka no girişi de olmuyor, o yüzden combobox1.text kısıtında eğer sayıyla başlıyorsa sorguya gir başlamıyorsa direkt kaydet şeklinde yapılabilir
Kod:
Private Sub CommandButton1_Click()
    Dim SonSatir As Long
    Dim SonKm As Long
    SonSatir = WorksheetFunction.CountA(Worksheets("sayfa1").Range("A:A")) + 1
    With Worksheets("Sayfa1")
        SonKm = WorksheetFunction.MaxIfs(.Range("D:D"), .Range("B:B"), ComboBox1.Text)
        If SonKm >= Int(TextBox2.Text) And IsNumeric(Strings.Left(ComboBox1.Text, 2)) Then
            MsgBox "Kilometreyi kontrol ediniz. Daha önce " & SonKm & " km kaydedilmiş." & vbLf & "Km " & SonKm & " dan büyük olmalıdır.", vbExclamation
            TextBox2.SetFocus
            TextBox2.SelStart = 0
            TextBox2.SelLength = Len(TextBox1)
            Exit Sub
        End If
        .Cells(SonSatir, 1) = Date
        .Cells(SonSatir, 2) = ComboBox1.Value
        .Cells(SonSatir, 3) = TextBox1.Value
        .Cells(SonSatir, 4) = TextBox2.Value
    End With
End Sub
 
Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Kod:
SonKm = WorksheetFunction.MaxIfs(.Range("D:D"), .Range("B:B"), ComboBox1.Text)
Bu ifadede "object doesn't support this property or method" hatası alıyorum, çok bilgili değilim ama gayet doğru gözüküyor neden hata veriyor anlamış değilim
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kullanılan fonksiyon yeni nesil fonksiyondur. Sizin ofis sürümünüz desteklemiyordur.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Benim önerdiğim kod nasıl sorun çıkarmıştı?
 

Korhan Ayhan

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

C++:
Private Sub CommandButton1_Click()
    Dim Son As Long, Son_Km As Variant
    
    With Worksheets("Sayfa1")
        Son = .Cells(.Rows.Count, 1).End(3).Row
        
        If WorksheetFunction.CountIfs(.Range("A2:A" & Son), Date, .Range("B2:B" & Son), _
           ComboBox1.Value, .Range("C2:C" & Son), TextBox1, Range("D2:D" & Son), TextBox2) > 0 Then
            MsgBox "Mükerrer kayıt!", vbCritical
            Exit Sub
        End If
        
        If IsNumeric(Left(Me.ComboBox1, 1)) Then
            If WorksheetFunction.CountIf(.Range("B:B"), ComboBox1.Value) > 0 Then
                Son_Km = Evaluate("Lookup(2,1/(('" & .Name & "'!B2:B" & Son & "=""" & _
                                  ComboBox1.Value & """)*Isnumber('" & .Name & "'!D2:D" & Son & ")),'" & .Name & "'!D2:D" & Son & ")")
                
                If IsNumeric(TextBox2.Value) Then
                    If CDbl(TextBox2.Value) < Son_Km Then
                        MsgBox "Kaydetmek istediğiniz kilometre değeri son girilen kilometre değerinden küçük olamaz!" _
                               & vbCrLf & vbCrLf & "Kayıt işlemi iptal edilmiştir!" & _
                               vbCrLf & vbCrLf & "Son KM ; " & Format(Son_Km, "#,##0.00"), vbCritical
                        Exit Sub
                    Else
                        GoTo 10
                    End If
                Else
                    GoTo 10
                End If
            Else
                GoTo 10
            End If
        Else
10
            .Cells(Son + 1, 1) = Date
            .Cells(Son + 1, 2) = ComboBox1.Value
            .Cells(Son + 1, 3) = TextBox1.Value
            .Cells(Son + 1, 4) = TextBox2.Value
            MsgBox "Kayıt işlemi tamamlanmıştır.", vbInformation
        End If
    End With
End Sub
 
Katılım
12 Eylül 2020
Mesajlar
174
Excel Vers. ve Dili
365 ev
Deneyiniz.

C++:
Private Sub CommandButton1_Click()
    With Worksheets("Sayfa1")
        If WorksheetFunction.CountIfs(.Range("A:A"), Date, .Range("B:B"), ComboBox1.Value, .Range("C:C"), TextBox1, Range("D:D"), TextBox2) > 0 Then
            MsgBox "Mükerrer kayıt!", vbCritical
            Exit Sub
        End If
        Son_Satir = .Cells(.Rows.Count, 1).End(3).Row + 1
        If IsNumeric(Left(Me.ComboBox1, 1)) Then
            If WorksheetFunction.Count(.Range("B:B"), ComboBox1.Value) > 0 Then
                Son_Km = Evaluate("Lookup(2,1/('" & .Name & "'!B:B=""" & ComboBox1.Value & """),'" & .Name & "'!D:D)")
               
                If CDbl(TextBox2.Value) < Son_Km Then
                    MsgBox "Kaydetmek istediğiniz kilometre değeri son girilen kilometre değerinden küçük olamaz!" _
                           & vbCrLf & vbCrLf & "Kayıt işlemi iptal edilmiştir!", vbCritical
                    Exit Sub
                Else
                    GoTo 10
                End If
            Else
                GoTo 10
            End If
        Else
10
            .Cells(Son_Satir, 1) = Date
            .Cells(Son_Satir, 2) = ComboBox1.Value
            .Cells(Son_Satir, 3) = TextBox1.Value
            .Cells(Son_Satir, 4) = TextBox2.Value
            MsgBox "Kayıt işlemi tamamlanmıştır.", vbInformation
        End If
    End With
End Sub
evaluate etmiyor , kilometre küçükte olsa kayıt işlemi gerçekleşiyor sanırım numerik değer için ayrı text değer için ayrı ifle yazmak lazım
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodu revize ettim. Son halini tekrar deneyiniz.
 
Katılım
4 Nisan 2006
Mesajlar
999
Excel Vers. ve Dili
OFFICE 2021 Türkçe
Merhabalar
Userforma kopyalayınız

Kod:
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Dim bul As Range
  
    Set bul = Sayfa1.Range("B:B").Find(ComboBox1.Value, searchDirection:=xlPrevious)
    If Not bul Is Nothing Then
      
        If bul.Offset(0, 2).Value > CLng(TextBox2.Value) Then
            MsgBox "Değer küçük"
            Cancel = True
            Exit Sub
        End If
    End If
  
End Sub
 
Son düzenleme:
Üst