• DİKKAT

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

aktarılanlara ait satırları silme

  • Konbuyu başlatan Konbuyu başlatan peleryn
  • Başlangıç tarihi Başlangıç tarihi
Katılım
10 Mayıs 2009
Mesajlar
1,080
Excel Vers. ve Dili
2003 türkçe
Herkese Merhabalar;

Ekli dosyamda Sayfa1 deki verilerden C sütununda "YES" yazan verileri sayfa2 ye buton yardımı ile aktarıyorum.Ancak aktarma işleminden sonra sayfa1 de C sütununda "YES" yazan verilerin silinmiş sadece "NO" yazan verilere ait satırların kalmış olması ve bu verilerin A sütununa göre alfabetik olarak sıralanmış olması gerekiyor ve bunu kısa yoldan sağlayamıyorum..

Yardımcı olmak isteyecekler için dosya ektedir..

İlgilenecek olan herkese teşekkür ederim..
 

Ekli dosyalar

Merhaba,

Bu şekilde denermisiniz..

Kod:
Option Explicit
 
Private Sub CommandButton1_Click()
Dim c As Range, s1 As Worksheet, i As Long, son1 As Long
Dim son2 As Long, ilkadres As Variant
Set s1 = Sheets("Sayfa2")
son1 = [A65536].End(3).Row: son2 = s1.[A65536].End(3).Row
Application.ScreenUpdating = False
With Range("C1:C" & son1)
    Set c = .Find("YES", LookIn:=xlValues)
    If Not c Is Nothing Then
        ilkadres = c.Address
        Do
            son2 = son2 + 1
            s1.Range("A" & son2 & ":C" & son2).Value = _
            Range("A" & c.Row & ":C" & c.Row).Value
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> ilkadres
    End If
End With
    For i = son1 To 1 Step -1
        If Cells(i, "c") = "YES" Then
            Rows(i).Delete Shift:=xlUp
        End If
    Next i
Range("A2:C" & son1).Sort Range("A2")
Application.ScreenUpdating = True
End Sub

.
 
Tekrar merhabalar;

s1.Range("A" & hcr.Row & ":C" & hcr.Row).EntireRow.Delete

Çok basit ama Entire kısmı bir türlü aklıma gelmedi yazamamıştım..Sorunumu yukardaki satırla hallettim..Sıralama işlemini zaten ekleyebilirim..Vaktini aldığım herkese ilgisi için teşekkür ederim.
 
Tekrar merhabalar;

s1.Range("A" & hcr.Row & ":C" & hcr.Row).EntireRow.Delete

Çok basit ama Entire kısmı bir türlü aklıma gelmedi yazamamıştım..Sorunumu yukardaki satırla hallettim..Sıralama işlemini zaten ekleyebilirim..Vaktini aldığım herkese ilgisi için teşekkür ederim.

Bu şekilde hatalı sonuçlar alırsınız.

Örnek olarak, eklediğiniz tabloda C9 hücresini YES yaparak deneyiniz..

.
 
Ömer hocam ben yukardaki msj ı yazarken cevabınızı henüz almamıştım.Çok teşekkür ederim iki problem bir arada gayet güzel halloluyor ellerinize sağlık.

Sıralama dışında 3.mesajımda gördüğünüz gibi .EntireRow.Delete kullanımı aktarılan verilere ait satırların kaldırılması için işlevsel midir sizce sormak istedim hocam?
 
Denedim hocam haklısınız peki bu hatayı neden yapıyor.Oysa ilk bakışta herşey yolunda görünüyor..
 
Yüzeysal açıklamaya çalışayım.

Sizin kod daki dönkü, 2. satırdan başlayarak artarak ilerler,

örnek; dönkü 2. satıra baktıktan sonra 3. satıra geçer sonra 4.. diye ilerler.

Bu durumda 3.satıra baktı şarta uyanı buldu sildi diyelim bu silme sonucu 4.satır 1 yukarı gelir ( bir üsten satır silindiği için ) 4. satır yukarı gelince satır numarası 3 olur fakat döngü az önce 3. satırla işlemi bitirip 4.satıra geçtiği için satır değişiminde 3.satıra kayan veriyi kontrol etmez. Bu nedenle kontrol dışı kalan satırlar olur ve silme işlemi gerçekleşmez. Eğer satır silme değil de hücre içeriği silme olsaydı sorunsuz çalışırdı.

Bu durumu yaşamamak için döngüyü tersten kurarız yani son satırdan -1 ile geriye doğru döngü kurulur. Bir satır silinse bile döngü sırası bu şekilde atlamaz.

Umarım açıklayıcı olmuştur..

.
 
Gayet net anladım hocam 8 i sildiğinde 9 a yazdığım artık 8.satırda olduğu için ve döngü o satırı geçmiş olduğu için atlamış oluyor..

Açıklamanız ve çözümünüz için çok teşekkür ederim ellerinize sağlık hocam.
 
Rica ederim, iyi çalışmalar..
 
Geri
Üst