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

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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.
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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.
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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)
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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.
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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:
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Filtreleme derken , sözel olarak anlatabilirmisin.

Biraz zahmet veriyorum ama;
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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:)
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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)
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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:

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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.
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
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

Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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.
 
Katılım
1 Eylül 2008
Mesajlar
10
Excel Vers. ve Dili
Excel 2003 İngilizce
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

Üst