Soru Satır Silme (En Dolu Sütuna Göre)

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Arkadaşlar Merhaba;

Çalışmamda var olan sekmeler üzerinde farklı farklı sütunlar (Maks. Z sütununa kadar) değişen satır sayılarına kadar veri dolu. İsteğim ise sadece istediğim sekmelerde makrodan ayarlama yapabilcek şekilde, (Örneğin sarı ve mavi sekmede) makro z sütununa kadar baksın bunlar arasında en dolu satıra sahip olan sütunu tespit edip onun altındaki satırları silsin.
Satır silme ile ilgili çok makro inceledim ancak bu ayarda bir talebe karşılık bulamadım.


Kırmızı.jpgSarı.jpgMavi.jpg
 

Ekli dosyalar

Korhan Ayhan

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

C++:
Option Explicit

Sub Sayfalarda_Satir_Sil()
    Dim Sayfa As Worksheet, Son_Satir As Range
    
    Application.ScreenUpdating = False
    
    For Each Sayfa In Sheets(Array("Sarı", "Mavi"))
        Set Son_Satir = Sayfa.Cells.Find("*", , , , xlByRows, xlPrevious)
        If Not Son_Satir Is Nothing Then
            Sayfa.Range("A" & Son_Satir.Row + 1 & ":A" & Rows.Count).EntireRow.Delete
        End If
    Next
    
    Application.ScreenUpdating = True
    
    MsgBox "Satır silme işlemi tamamlanmıştır.", vbInformation
End Sub
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Korhan Ayhan hocam Örnek dosyamda sorunsuz çalıştı teşekkür ederim. Ancak asıl çalışmam olan Excelimde "Data" sekmesine 2 ayrı ADO bağlantı ile aldığım A ve J sütununa makroyu uygulayınca resimdeki hatayı verdi.
Bu yöntemi istememe sebebime gelince ADO ile çektiğim verileri öylece kaydedersem dosya 9 MB değerine ulaşıyor. Ancak manuel olarak kendim en dolu sütunu bulup silersem (Zaman zaman A sütunu daha dolu zaman zaman J sütunu daha dolu) dosya boyutu 148 KBlara kadar düşüyor.
Başka öneriniz varsa ona da açığım.
HAta.jpg
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sarı renkli satırda değişkenin (Son_Satir) aldığı değer nedir. Bunu kontrol edin.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Korhan Hocam kontrol ettim. Tespit edemedim. Ancak bir daha bu hatayı vermedi. Sanırım başka bir sorun vardı. Tesadüfen düzelttim. Teşekkür ederim.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Korhan Ayhan hocam sıfırdan bir excel açtım. Bu excele ado ile sorgu çektim. En dolu sütunum K sütunu ancak yine bu hatayı verdi. Sebebi anlayamıyorum. Farklı bir makro deneme şansımız olur mu? Teşekkür ederim
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hata veren dosyayı ekleyebilir misiniz?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bence ADO sorgusunda bir yanlışlık var ..... muhtemelen NULL veriler de sayfaya yazılıyor, o yüzden hücrelerde görünmediği halde yer kaplıyor ve dosya boyutu şişiyor.

.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Haluk Hocam Kodlarım bu şekilde

Kod:
Sub guncelle()
Application.ScreenUpdating = False
Sheets("dosya").Visible = True
Sheets("dosya").Select

Set con = CreateObject("Adodb.Connection"):
Set rs = CreateObject("Adodb.RecordSet")
YolA = "\\Server\Kayit\"
con.Open "provider=microsoft.ace.oledb.12.0;data source=" & YolA & "Panel.xlsm" & _
";extended properties=""excel 12.0;hdr=no;imex=1"""
Sorgu = "Select f6,f1,f10,f13 from [Giris$]
rs.Open Sorgu, con, 1, 1
Range("a2").CopyFromRecordset rs
rs.Close: con.Close
Set con = Nothing: Set rs = Nothing: Sorgu = Empty

Set con2 = CreateObject("Adodb.connection"):
Set rs2 = CreateObject("Adodb.RecordSet")
YolB = "\\Server\Kayit2\"
con2.Open "provider=microsoft.ace.oledb.12.0;data source=" & YolB & "Veriler.xlsm" & _
";extended properties=""excel 12.0;hdr=no;imex=1"""
Sorgu2 = "Select f2,f11,f10 from [Data$]"
rs2.Open Sorgu2, con2, 1, 1
Range("j1").CopyFromRecordset rs2
rs2.Close: con2.Close
Set con2 = Nothing: Set rs2 = Nothing: Sorgu2 = Empty

Sheets("dosya").Visible = False

End Sub
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Haluk hocam evet tespitiniz doğru. 1. ADO bağlantıda F13 değeri, 2.ADO Bağlantıda F10 değeri çektikten sonra altta kalan satırlara 0 (Sıfır) atıyor ve 1 milyon satıra kadar 0 yazıyor. ne yaptıysam çözemedim. Kaynak excellerimde sorun olmasın diye onlarında boş satırlarını elimle sildim. Şaşırdım kaldım çözemiyorum. bu yüzden Korhan hocamın verdiği kodlar da hata veriyor.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Dosyayı görmeden çözüm üretmek zor ama; sorguya "Where" ile alanlardan biriyle ilgili bir kriter ekleyip denemenizde fayda var .....

Örneğin; F13 alanının ne olduğunu bilmiyorum ama mesela;

"..... from [Giris$] where F13 is not null"

veya;

"..... from [Giris$] where F13 > 0 "

gibi birşeyler ....

.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Haluk hocam söylediğinizi yaptım. Sorun buradan da değilmiş. Tespit ettim nedeni. Biliyorsunuz ADO sayı içeren sütunu çektiğimizde metin olarak algılıyor.
Ben bunu düzeltmek adına herhangi bir hücreye 1 yazıp o hücreyi kopyalayıp Özel Yapıştır-Değerleri-Çarp şeklinde uygulama yapıyordum ve gördüm ki sorunumu çözüyor ancak bu şekilde boş hücrelere "0" değeri atıyor. Excel Özelliklerden "Hücre değeri 0 olanları boş göster" seçili olduğu için bunu fark edememişim.dolayısıyla Korhan hocamın makrosu tüm satırları dolu gördüğü için hata veriyor.Durum böyle.
Peki ben her ADO çekmede bu sayı problemini nasıl çözeceğim? Fikir verir misiniz? (Not;Çekilen sütun dinamik bazen 300 satır bazen 5000 satır veri çekiyor)
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
ADO'da "IMEX" parametresini kullanmanız gerekir......

Aslında siz de IMEX=1 kullanmışınız.... şu anda bilemiyorum dosyayı incelemek gerekir.


.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Anladım bir çözmeye çalışayım bakalım. Teşekkür ederim :)
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
bir hücreye 1 yazıp o hücreyi kopyalayıp Özel Yapıştır-Değerleri-Çarp şeklinde uygulama yapıyordum ve gördüm ki sorunumu çözüyor ancak bu şekilde boş hücrelere "0" değeri atıyor.
Ek bilgi olarak; bu işlemi, boş bir hücreyi kopyalayıp özel yapıştır dan "topla" seçeneğini işaretleyip yaparsanız boş hücreler 0 olmaz boş kalır.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Ömer Hocam çok teşekkür ederim çok iyi oldu uğraşmama gerek kalmadı :)
 
Üst