FİLTRELEMEYE GÖRE VERİ AKTARMA

Katılım
16 Temmuz 2018
Mesajlar
19
Excel Vers. ve Dili
Ev ve Öğrenci 2016, Türkçe
Merhaba Arkadaşlar, değerli forum üyeler, ve yöneticileri;
Ekte bulunan Exccel Dosyasında A sütununda içerisinde CR bulunan numaralar mevcut. Ben 2. sayfada bir filtreleme yapmak istiyorum bu filtreleme şu işlev olacak;

1. Sayfada A Sütununda CR bulunan tüm kayıtları 2. Sayfaya aktar, bu aktarmayı yaparken aktarılan satırın karşılığı olan B, C, D, E, F, sütunlarını da aktar.
Dosya Linki: http://s7.dosya.tc/server11/3clyfh/Yeni_Microsoft_Excel_Calisma_Sayfasi.xlsx.html





Yardımcı olan arkadaşlara şimdiden çok teşekkür ederim.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki kodları bir modüle kopyalayıp deneyiniz:

SQL:
Sub suz()
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] > '" & "" & "'  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,635
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Yusuf boş olmayan verileri getirmek için sorguda is null 'u kullanabilirsiniz.

İs null boş olanları, is not null boş olmayanları getirir.

Kod:
sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Teşekkürler Sayın Erdem. Sayenizde bulaştık bakalım sql'e :)
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayın Erdem'in gösterdiği yol üzere kodun son hali aşağıdaki gibidir:

PHP:
Sub suz()
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "
 
Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
Eğer verilerin Sayfa3'teki ilk boş satıra aktarılmasını istiyorsanız aşağıdaki gibi kullanabilirsiniz:

PHP:
Sub suz()
yeni = Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row + 1

Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "
 
Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A" & yeni).CopyFromRecordset rs

End Sub
Eğer Sayfa3'teki eski verilerin silinip yerine yeni verilerin aktarılmasını istiyorsanız ise aşağıdaki şekilde kullanabilirsiniz:

PHP:
Sub suz1()
eski = WorksheetFunction.Max(2, Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row)
Sheets("Sayfa3").Range("A2:F" & eski).ClearContents
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "
 
Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
 
Katılım
16 Temmuz 2018
Mesajlar
19
Excel Vers. ve Dili
Ev ve Öğrenci 2016, Türkçe
Sayın Erdem'in gösterdiği yol üzere kodun son hali aşağıdaki gibidir:

PHP:
Sub suz()
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
Eğer verilerin Sayfa3'teki ilk boş satıra aktarılmasını istiyorsanız aşağıdaki gibi kullanabilirsiniz:

PHP:
Sub suz()
yeni = Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row + 1

Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A" & yeni).CopyFromRecordset rs

End Sub
Eğer Sayfa3'teki eski verilerin silinip yerine yeni verilerin aktarılmasını istiyorsanız ise aşağıdaki şekilde kullanabilirsiniz:

PHP:
Sub suz1()
eski = WorksheetFunction.Max(2, Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row)
Sheets("Sayfa3").Range("A2:F" & eski).ClearContents
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
Kardeşim harikasın eline sağlık...
 
Katılım
16 Temmuz 2018
Mesajlar
19
Excel Vers. ve Dili
Ev ve Öğrenci 2016, Türkçe
Sayın Erdem'in gösterdiği yol üzere kodun son hali aşağıdaki gibidir:

PHP:
Sub suz()
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
Eğer verilerin Sayfa3'teki ilk boş satıra aktarılmasını istiyorsanız aşağıdaki gibi kullanabilirsiniz:

PHP:
Sub suz()
yeni = Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row + 1

Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A" & yeni).CopyFromRecordset rs

End Sub
Eğer Sayfa3'teki eski verilerin silinip yerine yeni verilerin aktarılmasını istiyorsanız ise aşağıdaki şekilde kullanabilirsiniz:

PHP:
Sub suz1()
eski = WorksheetFunction.Max(2, Sheets("Sayfa3").Cells(Rows.Count, "A").End(3).Row)
Sheets("Sayfa3").Range("A2:F" & eski).ClearContents
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
  "from[Sayfa1$] where [Cari Kodu] is not null  "

Set rs = con.Execute(sorgu)
Sheets("Sayfa3").Range("A2").CopyFromRecordset rs

End Sub
Bu kodu nasıl çalıştıracağım kardeşim ona da bi değinir misin?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu kodu nasıl çalıştıracağım kardeşim ona da bi değinir misin?
bu kodları kopyalayın, excel dosyanızdayken Alt+F11 yaparak VBA penceresini açın
Açılan sayfada Insert menüsünden Module'yi seçin
Açılan sayfaya kodları yapıştırın
Excel dosyasına geçin
Sayfaya bir adet düğme/nesne/resim vs ekleyin
Eklenen nesneye sağ tıklayıp makro ata deyin
Açılan ekranda ilgili makroyu seçin
Artık o nesneye her bastığınızda makro çalışacaktır

Dosyayı kaydederken makro içerebilen excel dosyası olarak kaydetmelisiniz.
 
Katılım
16 Temmuz 2018
Mesajlar
19
Excel Vers. ve Dili
Ev ve Öğrenci 2016, Türkçe
bu kodları kopyalayın, excel dosyanızdayken Alt+F11 yaparak VBA penceresini açın
Açılan sayfada Insert menüsünden Module'yi seçin
Açılan sayfaya kodları yapıştırın
Excel dosyasına geçin
Sayfaya bir adet düğme/nesne/resim vs ekleyin
Eklenen nesneye sağ tıklayıp makro ata deyin
Açılan ekranda ilgili makroyu seçin
Artık o nesneye her bastığınızda makro çalışacaktır

Dosyayı kaydederken makro içerebilen excel dosyası olarak kaydetmelisiniz.
@YUSUF44 kardeşim dediklerini yaptım Butona basıp Makro Ata dediğimde "Başvuru bir makro sayfasına yönelik olmalıdır." hatası alıyorum
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Çalıştıramıyorsanız yukarda neden "Kardeşim harıkasın" dediniz? Çalıştırmadan mı dediniz yoksa başka bir sıkıntı mı var?
 
Katılım
16 Temmuz 2018
Mesajlar
19
Excel Vers. ve Dili
Ev ve Öğrenci 2016, Türkçe
@YUSUF44 Harikasınız dememin sebebi cevap verildiği içindi deneme şansını biraz önce buldum.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bir şeyleri yanlış yapıyorsunuz demek ki. Baştan ve sırasıyla yapar mısınız? Eskiden eklediğiniz makroyu da iptal edin.
 
Katılım
11 Aralık 2020
Mesajlar
24
Excel Vers. ve Dili
excel 2010
Sa konu eski ama ben de buna benzer birşey arıyordum. Ben Bütün verilerin gelmesini istemiyorum. Örneğin Sayfa 3 de bir yerde Cari kod yazsın Cari kodu o olanlar gelsin gibi birşey yapılabilir mi ?
 
Katılım
11 Aralık 2020
Mesajlar
24
Excel Vers. ve Dili
excel 2010
sorgu = "select [Cari Kodu],[Ticari Unvanı],[İli],[Fatura Tarihi],[Fatura No],[Genel Toplam]" & _
"from[Sayfa1$] where [Cari Kodu]=Sheets(Sayfa3).Range (H1) " bu şekilde değiştirdim olmadı :)
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
sorgu = "select [Cari Kodu], [Ticari Unvanı], [İli], [Fatura Tarihi], [Fatura No], [Genel Toplam] from[Sayfa1$] Where [Cari Kodu]= " & Sheets(Sayfa3).Range (H1)

olmaz ise
sorgu = "select [Cari Kodu], [Ticari Unvanı], [İli], [Fatura Tarihi], [Fatura No], [Genel Toplam] from[Sayfa1$] Where [Cari Kodu]= '" & Sheets(Sayfa3).Range (H1) & "' "
 
Katılım
11 Aralık 2020
Mesajlar
24
Excel Vers. ve Dili
excel 2010
sorgu = "select [Cari Kodu], [Ticari Unvanı], [İli], [Fatura Tarihi], [Fatura No], [Genel Toplam] from[Sayfa1$] Where [Cari Kodu]= " & Sheets(Sayfa3).Range (H1)

olmaz ise
sorgu = "select [Cari Kodu], [Ticari Unvanı], [İli], [Fatura Tarihi], [Fatura No], [Genel Toplam] from[Sayfa1$] Where [Cari Kodu]= '" & Sheets(Sayfa3).Range (H1) & "' "
Teşekkür ederim ilk baştaki çalıştı kendi excelime uyarladım. Güzel çalışıyor. Peki bu kod değiştiğinde makro çalıştır yerine otomatik olarak getirme olabilir mi. Range("U2") de kütük no var. Orası değiştiğinde otomatik olarak verileri getirip yazma imkanı varmı?

Sub suz1()

eski = WorksheetFunction.Max(2, Sheets("KÜTÜK FİŞİ").Cells(Rows.Count, "A").End(3).Row)
Sheets("KÜTÜK FİŞİ").Range("A17:K30" & eski).ClearContents
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""


sorgu = "select [ESKİ İŞYERİ],[UNVANI1],[YENİ İŞYERİ],[UNVANI2],[BASLAMA TARİHİ]" & _
"from[UNVAN DEGİSİM$] where [KÜTÜK NO]= " & Sheets("KÜTÜK FİŞİ").Range("U2")

Set rs = con.Execute(sorgu)
Sheets("KÜTÜK FİŞİ").Range("A17").CopyFromRecordset rs

End Sub
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Worksheet Change olayında kodu çalıştırabilirsiniz

Forumda Intersect diye aratırsan çabucak örnekler bulabilirsiniz.
 
Üst