Soru Bir garip filtreleme sorunu :)

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
Herkese merhabalar. Başlığa ne yazacağımı bulamayınca ruh halimi yazdım. :)
Aşağıda bir tablom var üretim reçetesi. SQL Server dan verileri çekiyorum ve basit üretim yazan yerdeki numaraya göre o stoğa ait ürünleri ve reçete detayını görmek istiyorum.

235932


Aşağıda Sql Server üzerinden çekmiş olduğum veriyi görüyorsunuz. Burada BLMASKODU benim benzersiz kodum. Benim amacım ilk tabloda BLMASKODU nu yazdığım ürüne ait bilgileri alt alta getirmek. İNDİS ile denedim fakat şöyle bir sorun var veriler alt alta değil. Aşağıdaki örnek veride 126306 BLMASKODU na sahip ürünün içeriğine ait veriler farklı satırlarda. Ben BLMASKODU nu girdiğimde farklı satırlarda da olsa o mas koduna has stok kodu ürün ismi vb. gibi detayları 1. çizelgeye getirmek istiyorum. Bunun için nasıl bir formül kullanabilirim.


235931
 

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 ile yapılabilir ama örnek olması için siz SQL verilerini bir Excel dosyasına yazın, sonra verilerin aktarılacağı diğer Excel dosyası ile birlikte buraya ekleyin.

Çözümü uyarlamak için sonra siz ADO ile SQL Server'dan çekecek şekilde "connection string" i değiştirirsiniz....

.
 

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
Cevabınız için tşk ederim. 1. resim deki reçete tablosundan alt alta 50 tane olduğunu düşünün ben sadece BLMASKODU nu değiştirerek o koda ait reçete bilgilerini listeleyeceğim. bu mümkün olabilir mi dediğim şekilde acaba ona göre örnek veri hazırlayım.
 

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
Muhtemelen olur .... olmaması için bir neden yok gibi.

Ama, işin sonunda sizin Excel VBA'de SQL Server ile bağlantı kurabilmeniz gerekir. Önce bu işi deneyip, olumlu sonuç almaya çalışın. Daha sonra, istediğiniz türden bir sorgu hazırlanabilir. Yoksa, boşuna vakit kaybetmeyelim.

.
 

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
Muhtemelen olur .... olmaması için bir neden yok gibi.

Ama, işin sonunda sizin Excel VBA'de SQL Server ile bağlantı kurabilmeniz gerekir. Önce bu işi deneyip, olumlu sonuç almaya çalışın. Daha sonra, istediğiniz türden bir sorgu hazırlanabilir. Yoksa, boşuna vakit kaybetmeyelim.

.
hocam eğer müsait olursanız uzak bağlantı ile bir tanesini gösterseniz yeter bana bunu yapabilir miyiz. şimdi ben db yi dışarıya açamam localde sunucu ama dışardan bağlantı kapalı direk sql den çekeceksek bağlantı sorunu yok. özelden yazacaktım ama kapalı galiba özeliniz.
 

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
VBA ile SQL Server'a bağlanıp, sorguyu yollayıp geri dönen sonucu Excel'de sayfaya yazdırmak ..... işin özeti bu.

VBA ile SQL Server'a bağlanmak için ; aşağıdaki linki inceleyin. Bizim forumda da örnekler vardır...

 

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
Cevaplarınız için teşekkür ederim iş yoğunlugundan dolayı hemen cevap veremedim. Örnek bir dosya yükledim. amacım 1. sayfada bulunan veriyi sql serverdan çekilen veri kabul edelim. 2. sayfada bulunan reçete çizelgeleri var. ben reçete koduna göre bu bilgileri işte stok kodu ürün ismi miktarı gibi bilgileri doldurarak güncelliğini kontrol edeceğim. verilerin farklı satırlarda.
 

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
Verileri bu şekilde SQL Server'dan alabiliyorsanız, İdris Bey'in Pivot Tablo alternatifi sizin için yeterli olacaktır.

Yok eğer, SQL Server'dan sorgulayarak almak istiyorsanız; müsait olduğunuz bir zaman daha önceki mesajlarımda yazdıklarımı gerçekleştirin ondan sonra duruma bakalım...

.
 
Son düzenleme:

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
Verileri bu şekilde SQL Server'dan alabiliyorsanız, İdris Bey'in Pivot Tablo alternatifi sizin için yeterli olacaktır.

Yok eğer, SQL Server'dan sorgulayarak almak istiyorsanız; müsait olduğunuz bir zaman daha önceki mesajlarımda yazdıklarımı gerçekleştirin ondan sonra duruma bakalım...

.
hocam pivot işimi görmüyor sebebi çok uzun şimdi izah edemem belki ama formülle yapabilsem süperdi onunda hükmü yetmiyor. Sql server a bağlanma konusunda sorun yok. Ama çizelgede gördüğünüz gibi ürün bazından ayrı sayfalara ayıracağım ve diyelim bu sayfada 30 reçete olacak diğer sayfada 60 reçete, burada sadece ürünlerin kodlarını ben yazacağım geriye kalan altına ekleme olayını formül vba artık nasılsa yapmaya çalışacağım. eğer siz sql den alıp ado ile yapmak daha kolay olur derseniz ben onada uyarım.
 

Merhum İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,094
Excel Vers. ve Dili
Excel, 365 - İngilizce
.

Sahip olduğunuz Excel sürümü ile formüllerle filtreleme yapılabilir. Ancak bu formüller biraz karmaşıktır. Bir örneği formüllü verdim. Bu Karmaşık formüllerle 204 kere REÇETE'yi alt alta kopyalayacaksınız. Bakalım Excel kapasitesi taşıyabilecek mi? Bence kopyalamayın sadece bir tane kullanın ve bu bir taneden seçerek diğerlerini çıkarın.

Excel 365 sürümünün FILTRE işlevi ile yapmak daha da kolay olur.

Bunun yanına Pivot Table ile bir tane yaptım. Bunu da 204 kere alt alta kopyalayarak istenileni yapabilirsiniz. Ancak ben her iki örnekte de bu yolu önermem.

.Dosyanız ekte.

.
 

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
ADO - SQL ile çözümlenen dosya ektedir...

.
 

Ekli dosyalar

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
cevaplarınız için çok teşekkür ederim.
.

Sahip olduğunuz Excel sürümü ile formüllerle filtreleme yapılabilir. Ancak bu formüller biraz karmaşıktır. Bir örneği formüllü verdim. Bu Karmaşık formüllerle 204 kere REÇETE'yi alt alta kopyalayacaksınız. Bakalım Excel kapasitesi taşıyabilecek mi? Bence kopyalamayın sadece bir tane kullanın ve bu bir taneden seçerek diğerlerini çıkarın.

Excel 365 sürümünün FILTRE işlevi ile yapmak daha da kolay olur.

Bunun yanına Pivot Table ile bir tane yaptım. Bunu da 204 kere alt alta kopyalayarak istenileni yapabilirsiniz. Ancak ben her iki örnekte de bu yolu önermem.

.Dosyanız ekte.

.
hocam emeğine sağlık fakat dediğiniz gibi çok fazla formül ve veri yığını oluşacak iş karışacak.
ADO - SQL ile çözümlenen dosya ektedir...

.
hocam süper olmuş eline sağlık bunu inceleyeceğim biraz direk sql den çekersek tam istediğim gibi olacak çok sağolun.
 

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
4, 6 ve 9 No'lu mesajlarımda bundan bahsetmiştim...... İlk önce VBA'de SQL Server'a bağlanıp, örneğin tablonun tamamını Excel'e almaya çalışın. Bunu başarırsanız, esas gerekli sorguyu ondan sonra hallederiz demiştim....

.
 

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
4, 6 ve 9 No'lu mesajlarımda bundan bahsetmiştim...... İlk önce VBA'de SQL Server'a bağlanıp, örneğin tablonun tamamını Excel'e almaya çalışın. Bunu başarırsanız, esas gerekli sorguyu ondan sonra hallederiz demiştim....

.
iş yoğunluğundan dolayı geç cevap yazabildim.
Hocam örnek dosyayı atıyorum. Veritabanından 1 tane örnek çektim. bunu döngü içerisinde alt alta nasıl kullanabilirim veriyi çektim ama döngüyü kuramadım. ben satır ve sütun sayılarına dikkat ederek bunu alt alta çoğaltacam ama aslında mantığını öğrenmeye çalışıyorum çözersem her yere çekerim ben bunu
 

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
12 No'lu mesajdaki dosyada aradığınız her şey var....

.
 

f4tih

Altın Üye
Katılım
9 Kasım 2010
Mesajlar
81
Excel Vers. ve Dili
Office 365, (64 bit) Türkçe
Altın Üyelik Bitiş Tarihi
03-07-2026
12 No'lu mesajdaki dosyada aradığınız her şey var....

.
hocam ona baktım mantığını çözemedim : ), yoksa bir şeyleri kendi başıma yapmaya çalışıyorum ama olmadı. Ben basit for döngüsü ile işi çözüyordum ama temel konularda da eksiğim var. Anladığımı anlatayım da bir yol gösterin bana.




Kod:
Sub Main()
    Dim xRng As Range, i As Integer
    
    Set xRng = Range("E4")
    i = 4
    
    Do
        xRng.Offset(2, 0).Resize(9, 3) = ""
        Call getData(xRng)
        i = i + 14
        Set xRng = Range("E" & i)
    Loop Until xRng = ""
End Sub
yukarıdaki kod bloğundan anladığımı yazayım
xRng hücre i de sayı olacak şekilde tanımlanıyor

daha sonra xRng e4 hücre değerini alıyor.
i yi de 4 e eşitliyorsunuz.

do ile bir döngü başlatıyorsunuz ve xRng.offset(2,0) diyerek xRng in değerini e4 den e6 ya çekiyorsunuz çünkü verinin yazılacağı alandaki ilk hücre
daha sonra resize 9,3 ile de bu verinin f6 dan başlayıp 9 satır aşağı ve 3 sütun sağa genişlikte olduğunu belirtiyorsunuz

daha sonra bir altta bulunan farklı bir ürünün reçetesi için işlem devreye gireceği için i yi 14 artırıyorsunuz. ve aynı zamanda set ile de tekrar xRng a atama yaparak döngünün sorunsuz çalışmasını sağlıyorsunuz.

Call getData(xRng) = > bu kardeş calla ile getDATA yı çalıştırıyor ama bundan öteye bişey bilmiyorum :D


Sub getData(xRng As Range) modülüne gelirsek

gerkeli atamaları yapıyorsunuz ado ile ilgili vs burada objADO ado bağlantısı ile alakalı ben sql serverdan çekeceğim için benimle alakasıu yok diye biliyorum.
Sorguyu da tamam anlamdım orada problem yok.


Kod:
With objRS
       .CursorType = adOpenStatic
       .CursorLocation = adUseClient
       .LockType = adLockBatchOptimistic
       .ActiveConnection = objADO
       .Source = strSQL
       .Open
End With
bunu neredeyse anladım. anladığım kadarıyla with bir obje oluşturmaya yarıyor ve bu obje özellikleri ile ilgili atamalar yapıyoruz ama dediğim gibi bilgim yok anlayabildiğimi yazdım.

Kod:
If objRS.RecordCount > 0 Then
        Sheets("REÇETE").Range(xRng.Address).Offset(2, 0).CopyFromRecordset objRS
    End If
burada recordcount ile sorgudan dönün sonucu kontrol ediyorsunuz 0 dan büyükse işlem yap demek aslında veri geldiyse işlem yap demek
daha sonra "REÇETE" sayfasındaki ilgili yerlere CopyFromRecordset objRS diyerek veriyi yazdırıyorsunuz :D bunu yazınca anladığımı sanmayım valla anlamadım yani çok karışık geldi. ben for ile işi basitçe çözen bu işte yeni olan biriyim.

Kod:
    If objRS.State = adStateOpen Then objRS.Close
    If objADO.State = adStateOpen Then objADO.Close

Burada baglantılar açıksa kapatıyorur.

Kod:
    Set objRS = Nothing
    Set objADO = Nothing
bunları da anlamadım valla objRS e nothing ataması yapılınca ne oluyor bilmiyorum.

for ile yapmaya çalıştım biraz yol kat eder gibi oldum tamam BLMASKOD larını for ile alıyorum problem yok ama çekilen veriyi ofset ile kaydırılmış hücrelere yazdırmayı başaramadım.



Ben derdimi yukarıda anlattım inanın amacım hazıra konmak felan değil problemleri kendi başıma çözmeyi çok severim ama epey bi emek harcadıktan sonra bir yerde yardım almam şart oldu o yüzden işin aslını bana fatih' e anlatır gibi anlatırsanız yada daha bir önceki cevapta attığım excel de daha basitçe bu işlemi yaparsanız size çok minnettar kalırım. Şimdiden teşekkür ederim.
 

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
Bende SQL Server olmadığı için deneme şansım yok, siz ekli dosyayı denersiniz...

.
 

Ekli dosyalar

Üst