önceki veriyi otomatik alsın

Katılım
5 Mayıs 2012
Mesajlar
30
Excel Vers. ve Dili
excel2007-2010 türkçe
Merhabalar
ekte motorin takiple ilgili bir tablom var.
Araçların motorinlerini ve km lerini yazıyorum.yalnız her seferinde son km sini yazıyorum.toplam km yi hesaplamak için bir önceki km sine de ihtiyacım var.benim tablomda bunu elle tek tek yazıyorum.burda yapmak istediğim plakayı yazdığımda alttan yukarı doğru bir tarama yapıp bir önceki km sini bulup karşısına yazsın.tablodada örnek verdim.
şimdiden teşekkürler
 

Ekli dosyalar

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028

Merhaba,

Sayfadayken ALT + F11 tuşlarına birlikte basarak VBE Penceresine geçin.
Üstteki menülerden önce Insert'i ardından da Module'yi seçin ve vereceğim kodları açılan sayfaya yapıştırıp F5 tuşuna basın.


Kod:
[FONT="Trebuchet MS"]Sub Emre()
    Dim i%, Rky As Range, a As Byte
    Set Rky = Range("c65536").End(3)
    For i = Range("A65536").End(3).Row To 4 Step -1
        If Cells(i, 3).Value = Rky.Value Then
            a = a + 1
            If a = 2 Then
                Rky.Offset(0, 2).Value = Cells(i, 4).Value
            End If
        End If
    Next i
    a = Empty: Set Rky = Nothing: i = Empty
End Sub[/FONT]
F4 hücresine de bu formülü girip aşağıya doğru çekin;
Kod:
[FONT="Trebuchet MS"]=D4-E4[/FONT]
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,892
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Kod:
Sub kod()
    Application.ScreenUpdating = False
    Dim i As Integer
    Dim a As Integer
    
    For i = [C65536].End(3).Row To 2 Step -1
        If Cells(i, "E") = "" Then
            For a = i - 1 To 2 Step -1
                If Cells(i, "C") = Cells(a, "C") Then
                    Cells(i, "E") = Cells(a, "D")
                    Exit For
                End If
            Next a
            
        End If
    Next i
    
    Application.ScreenUpdating = True
    MsgBox " B i t t i "
End Sub
. . .
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,636
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Alternatif olsun,

Sayfa özelliklerine kopyalayın, Plakayı girdiğiniz zaman önceki değeri getirecektir.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
son = Range("c65500").End(3)(1, 1)
adres = Range("c65500").End(3)(1, 1).Row - 1
If Intersect(Target, Columns(3)) Is Nothing Then Exit Sub
    If Target <> "" Then
Target.Offset(0, 2) = Range("c1:c" & adres).Find(son, , , , , xlPrevious).Offset(0, 1).Value
End If
End Sub
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Plâkayı girdikten sonra değeri getirecekse son satıra bakmasına gerek yok. Target' tan önceki satırlara bakmak yeterli olur.
Kod:
[FONT="Trebuchet MS"]Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Or Target.Value = "" Then Exit Sub
    On Error Resume Next
    Cells(Target.Row, "E") = Range("C4:C" & _
    Cells(Target.Row - 1, "C").Row).Find(Target.Value, , , , , xlPrevious).Offset(0, 1).Value
End Sub[/FONT]
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,636
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Plâkayı girdikten sonra değeri getirecekse son satıra bakmasına gerek yok. Target' tan önceki satırlara bakmak yeterli olur.
Kod:
[FONT="Trebuchet MS"]Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Or Target.Value = "" Then Exit Sub
    On Error Resume Next
    Cells(Target.Row, "E") = Range("C4:C" & _
    Cells(Target.Row - 1, "C").Row).Find(Target.Value, , , , , xlPrevious).Offset(0, 1).Value
End Sub[/FONT]
Murat hocam merhaba,

Kod:
adres = Range("c65500").End(3)(1, 1).Row - 1
bu satır target'tan önceki satırlara bakmasını sağlıyor.Detaylı incelemediniz sanırım. Bende biraz isimleri karıştırarak yazmışım, onu farkettim.:biggrin:
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Murat hocam merhaba,

Kod:
adres = Range("c65500").End(3)(1, 1).Row - 1
bu satır target'tan önceki satırlara bakmasını sağlıyor.Detaylı incelemediniz sanırım. Bende biraz isimleri karıştırarak yazmışım, onu farkettim.:biggrin:
Merhaba Erdem Bey,

Ben o satırda Target ifadesini görmüyorum. ;)
O satır diyor ki; C65500 hücresini referans al ve o hücreden yukarıya doğru çık, dolu gördüğün ilk hücrenin satır numarasından 1 çıkar ve o sayıyı adres değişkenine ata (ver)...

Mantık olarak; sütunda sıralı bir şekilde plâka yazılacağını düşündüğünüz için yine aynı kapıya çıkacaktır, ama 100 satır verinin 50. satırına plâka yazılması unutulursa ve o satıra plâka yazılırsa o zaman iki kod arasındaki fark ortaya çıkar. ;)

Target'tan öncesine mi bakmak ? Yoksa, sütundaki dolu olan son satırdan öncesine mi bakmak ?
İşte bütün mesele bu! :)
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,636
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba Erdem Bey,

Ben o satırda Target ifadesini görmüyorum. ;)
O satır diyor ki; C65500 hücresini referans al ve o hücreden yukarıya doğru çık, dolu gördüğün ilk hücrenin satır numarasından 1 çıkar ve o sayıyı adres değişkenine ata (ver)...

Mantık olarak; sütunda sıralı bir şekilde plâka yazılacağını düşündüğünüz için yine aynı kapıya çıkacaktır, ama 100 satır verinin 50. satırına plâka yazılması unutulursa ve o satıra plâka yazılırsa o zaman iki kod arasındaki fark ortaya çıkar. ;)

Target'tan öncesine mi bakmak ? Yoksa, sütundaki dolu olan son satırdan öncesine mi bakmak ?
İşte bütün mesele bu! :)
çok mantıklı.:biggrin:
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Bana da öyle geliyor. :D
 
Üst