• DİKKAT

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

Birden fazla Combobox ile filtreleme işlemi

Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
Herkese selam.

Bu forumdan öğrendiklerimle kendi çapımda bir dosya hazırladım. Ama filtreleme işleminde takıldım. Ekteki deneme.xls dosyasında problemimi anlattım.

Burda da kısaca açıklama yapmak gerekirse Combobox1 ve Combobox 2 den seçilen seçeneklere göre data filtrelenecek ve sadece filtreli alan için hesapla butonu içindeki formüller çalışacak.

Yardımcı olacak herkese şimdiden teşekkürler.
 

Ekli dosyalar

Rocker ,

Öncelikle forumumuza hoşgeldiniz.
Sorunuzun cevabını sumif ile çözülebilir dusuncesindeyim.
Hesaplama mantıgınızı tam anlayamadım da.Oyuzden adım adım ilerleyebilirmiyiz.
 
Rocker ,

Öncelikle forumumuza hoşgeldiniz.
Sorunuzun cevabını sumif ile çözülebilir dusuncesindeyim.
Adım adım ilerleyebilirmiyiz.

Tabiki ilerleyebiliriz.

Hesapla butonu içinde kullandığım formülleride sumif , countif kullanarak yaptım zaten.

Yalnız şöyle bir sorunla karşılaştım. Orda sadece tek bir kriter belirtebildim.

Örneğin B:B alanındaki 5 leri topla diyebildim. Ancak A:A alanındaki 1 olanların B:B alanındaki 5 lerini topla şeklinde iki tane kriterle çalıştıramadım sumif ve countif leri.
 
Kod:
A = WorksheetFunction.CountIf(Range("B:B"), "5")
B = WorksheetFunction.CountIf(Range("B:B"), "4")
C = WorksheetFunction.CountIf(Range("B:B"), "6")
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Range("B:B"))
F = WorksheetFunction.SumIf(Range("B:B"), "6")


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)

Hesaplama mantığına gelince
Top Two (4+5) diyenlerin yüzdesini verebilmek için
count if ile A ve B deki formulleri yazarak 4 ve 5 diyenlerin ayrı ayrı sayılarını elde ettim.
Daha sonra D deki formülle tüm cevapların sayısını elde ettim.
Son olarak da (A + B) / D) * 100 den yüzdeyi hesapladım.

Aynı işlemi Top Box İÇİN sadece 5 diyenlerin yüzdesini verebilmek için
(A / D) * 100 formülünü kullandım.

Son olarak da (6-Fikrim yokları dahil etmeden) ortalamayı hesaplamak için Tüm datanın toplamından 6 diyenlerin toplamını çıkartıp (E-F), Gene tüm datanın sayısından 6 diyenlerin sayını çıkartıp (D-C) en son birbirine böldüm elde ettğim rakamları. (E - F) / (D - C)
 
Merhaba,

Kod:
Dim veri As Integer
veri = ComboBox1.ListIndex + 2
A = WorksheetFunction.CountIf(Columns(veri), "5")
B = WorksheetFunction.CountIf(Columns(veri), "4")
C = WorksheetFunction.CountIf(Columns(veri), "6")
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Columns(veri))
F = WorksheetFunction.SumIf(Columns(veri), "6")


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)

Yukarıdaki kodu deneyiniz.Olmayan yada yanlıs olan yere bakalım.
Zannedersem sonrasında Filtreleme de ilerleyeceğiz.
Yalnız buradaki mantıgıda anlamadım.Acıklayabilirmisiniz.
 
Merhaba,

Kod:
Dim veri As Integer
veri = ComboBox1.ListIndex + 2
A = WorksheetFunction.CountIf(Columns(veri), "5")
B = WorksheetFunction.CountIf(Columns(veri), "4")
C = WorksheetFunction.CountIf(Columns(veri), "6")
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Columns(veri))
F = WorksheetFunction.SumIf(Columns(veri), "6")


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)

Yukarıdaki kodu deneyiniz.Olmayan yada yanlıs olan yere bakalım.
Zannedersem sonrasında Filtreleme de ilerleyeceğiz.
Yalnız buradaki mantıgıda anlamadım.Acıklayabilirmisiniz.

Kodları denedim yalnız şöyle bir sorun var.
Birinci Comboboxtan S1 seçersem S1 in olduğu sütüna değilde bir önceki sütüna yani Filtre yazan sütüna işlem yapıyor. Bu hepsi için geçerli yani seçilen sorunun olduğu sütün yerine bir önceki sütündan işlem yapıyor.

Filtrelemeye gelince örnek olarak daha basitleştirmek gerekirse Filtre sutununun sadece 1 ve 2 lerden oluştuğunu varsayın. 1 Kadın 2 Erkek olsun. Erkek ve kadınlar için ayrı ayrı hesaplama yapabilmek istiyorum. Yani Kadınlaın S1 sorusuna verdiği cevapların top two top box ve meanini hesaplamak istiyorum mesela.
 
Son düzenleme:
Merhaba,

Kod:
Dim veri As Integer
veri = ComboBox1.ListIndex + 2
A = WorksheetFunction.CountIf(Columns(veri), "5")
B = WorksheetFunction.CountIf(Columns(veri), "4")
C = WorksheetFunction.CountIf(Columns(veri), "6")
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Columns(veri))
F = WorksheetFunction.SumIf(Columns(veri), "6")


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)

Yukarıdaki kodu deneyiniz.Olmayan yada yanlıs olan yere bakalım.
Zannedersem sonrasında Filtreleme de ilerleyeceğiz.
Yalnız buradaki mantıgıda anlamadım.Acıklayabilirmisiniz.

Ben cevap yazarken kodları değiştirmişsiniz sanırım ilk sorun çözüldü. Şimdi doğru sütüna hesaplama yapıyor. Filtreleme yapma kısmı kaldı şimdi.
 
Filtreleme derken , sözel olarak anlatabilirmisin.

Biraz zahmet veriyorum ama;

Estağfurullah asıl ben size zahmet veriyorum:)

Şöyle bir örnek vereyim.

Diyelim ki bir anket uyguluyorsunuz. İlk sorunuz anketi yaptığınız kişinin cinsiyeti.
(1-Kadın, 2-Erkek) , İkinci sorunuzda ".... ürününden ne derece memnunsunuz?" olsun.(1-Hiç memnun değilim 2,3,4,5-Çok memnunum,6-Fikrim Yok)

Bu durumda elinizde 2 sütunluk bir data olucak. Örneğin 100 anket yaptıysanız. Birinci sutunda 1 ve 2 lerden oluşan bir data. 2. Sütünda da 1-6 arası cevaplardan oluşan bir data.

Şu ana kadar yaptığımız kodlarla Kadın+Erkeklerin yani totalin Top two (4+5) , Top Box (5) ve Mean(6-Fikrim Yok hariç) hesaplıyabiliyoruz.

Ben sadece kadın ve sadece erkeklerin bu değerlerini hesaplamak istiyorum.

Bunun içinde comboboxta kadın erkek yada sorunun kodları olan 1 yada 2 yi seçtiğimde sadece seçtiğim özellikteki dataya işlem yapabilmek istiyorum.

Umarım anlatabilmişimdir:)
 
Sn.Rocker,

Sabrınız için teşekkurler.Soyle demek istemiştim.

Yukarıdaki kodda Filtre(Combobox2) hangi işlem için bölümnü yapılcak.

Net değilim ama kod şöyle olabilir mi?

Kod:
Dim veri,[b]G[/b] As Integer
veri = ComboBox1.ListIndex + 2
[b]'Eklediğim Alan[/b]
G = WorksheetFunction.CountIf(Columns(1), ComboBox2)
[b]'Buraya Kadar[/b]
A = WorksheetFunction.CountIf(Columns(veri), "5") / [b]G[/b]
B = WorksheetFunction.CountIf(Columns(veri), "4") / [b]G[/b]
C = WorksheetFunction.CountIf(Columns(veri), "6") / [b]G[/b]
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Columns(veri))
F = WorksheetFunction.SumIf(Columns(veri), "6") / [b]G[/b]


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)
 
Sn.Rocker,

Sabrınız için teşekkurler.Soyle demek istemiştim.

Yukarıdaki kodda Filtre(Combobox2) hangi işlem için bölümnü yapılcak.

Net değilim ama kod şöyle olabilir mi?

Kod:
Dim veri,[b]G[/b] As Integer
veri = ComboBox1.ListIndex + 2
[b]'Eklediğim Alan[/b]
G = WorksheetFunction.CountIf(Columns(1), ComboBox2)
[b]'Buraya Kadar[/b]
A = WorksheetFunction.CountIf(Columns(veri), "5") / [b]G[/b]
B = WorksheetFunction.CountIf(Columns(veri), "4") / [b]G[/b]
C = WorksheetFunction.CountIf(Columns(veri), "6") / [b]G[/b]
D = (Cells(2, 1).SpecialCells(xlLastCell).Row) - 1
E = WorksheetFunction.Sum(Columns(veri))
F = WorksheetFunction.SumIf(Columns(veri), "6") / [b]G[/b]


TextBox1.Value = Round(((A + B) / D) * 100, 2) & "%"
TextBox2.Value = Round((A / D) * 100, 2) & "%"
TextBox3.Value = Round((E - F) / (D - C), 2)[/QUOTE]

tam olarak istediğim şey bu değil Kemal bey 

ekte dosyayı gönderiyorum tekrar orda görsel olarak açıkladım.

Sanırım daha yardımcı olacaktır.
 

Ekli dosyalar

Son düzenleme:
Rocker,

Hesaplama alanları (Yapılacak 4 işlem nedir ,ne neresi ile toplancak Filtrenin adedi mi sayılacak,toplamı mı yada genele göre toplam yada blm mü olacak) işlem mantıgı nedir.bunu öğrenebilirmiyim.

Tşk.
 
Rocker,

Hesaplama alanları (Yapılacak 4 işlem nedir ,ne neresi ile toplancak Filtrenin adedi mi sayılacak,toplamı mı yada genele göre toplam yada blm mü olacak) işlem mantıgı nedir.bunu öğrenebilirmiyim.

Tşk.

Kemal bey yapılacak 4 işlemde herhangi bir değişiklik olmayacak.

Sadece sizin eklediğiniz Columns(veri) nin ben filtreyi değiştirdiğimde veriyi okuduğu alan değişmiş olacak.

Örnek olarak şu anda filtresiz olarak S1 sorusu hesaplanırken B2:B1471 aralığındaki veri kullanılıyor.

Benim yapmak istediğim ise Filtre sütunda 1 cevabı verenleri süzerek S1 sorusuna verdikleri cevaplar için hesaplama yapabilmek.

Filtre sütununa göre sortlarsak datayı o zaman istediğiniz gibi bir alan verebilirim. Datayı sortladığımızda Eğer Filtre 1 seçilirse S1 sorusu için hesaplama yapılacak alan B2:B492 oluyor. Filtre 2 seçilirsede B493:B1471 oluyor hesaplama yapılacak alan.

Ama tabiki bu alanları önceden belirleyip ona göre bir şey yazmak istemiyorum.
Çünkü bunu farklı datalarda da kullanabilmek istiyorum. O yüzden alanı kendi otomatik hesaplamalı sonra çalışacak formüller aynı zaten.

Sortladığım datayı ekte gönderiyorum.
 

Ekli dosyalar

Hocam ozaman veriler aşagıdaki gibi çıkıyor,

Two:18,03
Top:7,96
Mean:1,16 cıkıyor.
Ama sizin daha önceki verdiğiniz değerler ise farklı çıkmakta
 
Merhaba,

Ek'teki örneği inceleyiniz.

combobox1 seçiniz sonrasında combobox2 'seçiniz hesapla makrosunu combobox2 ye yerleştirdim.

Acaba böyle birşeymidir.

Application.ScreenUpdating = False

Yukarıdaki kod ile filtreleme ekranı ekranda belli olmaması açısından eklendi.Ama hala dediğiniz değerler çıkmadı.

NOT:Yanlıs yönlendirmek istemiyorum.
 

Ekli dosyalar

Merhaba,

Ek'teki örneği inceleyiniz.

combobox1 seçiniz sonrasında combobox2 'seçiniz hesapla makrosunu combobox2 ye yerleştirdim.

Acaba böyle birşeymidir.

Application.ScreenUpdating = False

Yukarıdaki kod ile filtreleme ekranı ekranda belli olmaması açısından eklendi.Ama hala dediğiniz değerler çıkmadı.

NOT:Yanlıs yönlendirmek istemiyorum.

Elinize sağlık olmuş. Sanırım ilk verdiğim değerler hatalıydı size.

Pivot alarak baktım. Sonuçlar doğru çıkıyor.

Çok teşekkür ediyorum yordum sizide.

Son bir şey sormak istiyorum artık hesapla butonuna gerek kalmadı sanırım. Filtreyi seçtiğimizde kendisi sonuçları getiriyor textboxa. Filtreleme işlemi comboboxin içinde mi yapılabiliyor sadece yani butonda olmuyormu? Merak ettim sadece:) Tekrar teşekkür ediyorum.
 
süzme ile ilgili bir sorun olduğunu farkettim. Autofilter ile datayı istediğimiz kritere göre süzsek bile countif yada sumif gibi fonksiyonlar data süzülmemiş gibi çalışıyordu. Bende biraz kafa yorarak datayı süzmek yerine if then ve döngü kullanarak başka bir sutuna sadece istediğim veriyi yazdırıp onların countunu ve sumını alarak istediğim sonuca ulaştım.

Belki kullanmak isteyen yada kodlardan faydalanmak isteyenleri içinde son halini ekliyorum dosyanın.

iyi geceler.
 

Ekli dosyalar

Geri
Üst