• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

önceki veriyi otomatik alsın

  • Konbuyu başlatan Konbuyu başlatan prof77
  • Başlangıç tarihi Başlangıç tarihi
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


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

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

. . .
 
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
 
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]
 
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 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! :)
 
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:
 
Bana da öyle geliyor. :D
 
Geri
Üst