Soru Accesden Düşeyara (Excelden Vba ile)

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Üstadlar merhaba; Baya araştırdım ama güzel örnek bulamadım.

SiparislerDBO adlı veritabından Sipariş numarasına göre Düşeyara yapacak VBA ihtiyacım var.
Excelde sipariş numaralarını D sütununa gireceğim. Urun Adı olarak E sütununa satır bazında getirecek.

Tüm dosyalarımı ekledim.


AccesVlookup.jpg
AccesVlookupExcel.jpg
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Merhaba;

Table Recordset olarak açıp "Filter" özelliğini kullanarak amacınıza ulaşabilirsiniz.

Filter Reference : Filter property (ADO)

.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Merhaba Vba olarak gerekiyor hocam :) Projeden ufak kesit diyelim
 

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



C#:
Sub Test()
    Dim adoCN As Object, SourceFile As String, strSQL As String
          
    Range("E2:E" & Rows.Count) = ""
    
    Set adoCN = CreateObject("ADODB.Connection")
    
    SourceFile = ThisWorkbook.Path & "\SiparislerDBO.accdb"
    
    adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
    adoCN.ConnectionString = SourceFile
    adoCN.Open
    
    strSQL = " Select  T2.[UrunAd] From [Excel 12.0;HDR=Yes;Database=" & ThisWorkbook.FullName & "].[Giris$] As T1 " _
           & " Inner Join " _
           & " [SiparisTBL] As T2 " _
           & " On (Cstr(T1.[Siparis No]) = T2.[SiparisNo]) " _
           & " Where T1.[Siparis No] Is Not Null"
   
    Set RS = adoCN.Execute(strSQL)
    
    Range("E2").CopyFromRecordset RS
    
    adoCN.Close
    Set adoCN = Nothing
End Sub
.
 
Son düzenleme:

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Ellerine sağlı üstadım :)
 

Erdem Akdemir

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

İnner join sonuç bulamazsa boş bırakma yapmaz ve bulabildiği sonuçları sırası ile getirir.
Left join kullanırsanız eğer access çalışmasında sonuç dönmezse ilgili sipariş numarasını boş bırakır.
Çalışmanın durumuna göre left join kullanmak daha doğru sonuç getirecektir.

Aradaki farkı anlamak için aşağıdaki linkleri inceleyebilirsiniz.

https://www.sqlkodlari.com/20-sql-left-join-kullanimi.asp

https://www.sqlkodlari.com/19-sql-inner-join-kullanimi.asp
 

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
Bu soruya özel hazırlanmış olan yukarıdaki 4 No'lu mesajda yer alan kodda Inner veya Left Join her ikisi de kullanılabilir ve her ikisi de doğru çalışır, çünkü burada yapılan iş, Join işleminden sonra tüm alanları yazdırmıyoruz...... sorunun orjinalinde olduğu gibi, sadece "Ürün Adı" alanı yazdırılıyor. Yani, soruda belirtildiği gibi Excel'in Vlookup-Düşeyara simülasyonu yapılıyor.

.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,634
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
@Haluk hocam merhaba,

İnner join tam olarak düşeyara'yı karşılamıyor. İnner join ortak alanları getirdiği için 4 tane sipariş numarasının ürün adını getirmek isterseniz, access tablosunda tüm sipariş numaralarının olması gerekiyor. Tabloda sipariş numaralarından biri olmazsa , ortak sonuçları getirdiği için eşleşmelerde kayma olabilir. Left join'de ise soldaki tablo değerlerine göre sonuç getireceği için eşleşmeyen sipariş numarasını boş bırakır.
 

Ekli dosyalar

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
Evet, "Left Join" kullanmak daha akılcı görünüyor, çünkü örnek tablodaki tüm Sipariş No'ların Access tablosunda olup olmadığını bilmiyoruz....

.
 
Üst