Koşullara Bağlı Benzersiz Hücreleri Sayma

Koşullara Bağlı Benzersiz Hücreleri Sayma

  • Konuyu başlatan Konuyu başlatan skambur
  • Başlangıç tarihi Başlangıç tarihi

skambur

Kullanıcı
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba,

excel.webp


elimde bu şekil bir tablo var.

Yapmak istediğim alt etiket(birden fazla il var) ve a.türüne (birden fazla tür var) bağlı olarak abone ıd'deki benzersiz ıd'leri saydırmak.

Saygılarımla.
 
elimde bu şekil bir tablo var.

O elinizdeki tabloyu atabilirseniz iyi olurdu gerçi :)

Alttaki kodları bir modül içerisine ekleyin, dosyanızı xlsm uzantılı olarak kaydedin.

[REPLY]
Kod:
#If VBA7 Then
Const Saglayici As String = "Microsoft.ACE.OLEDB.12.0"
Const Ozellik As String = "Excel 12.0"
#Else
Const Saglayici As String = "Microsoft.Jet.OLEDB.4.0"
Const Ozellik As String = "Excel 8.0"
#End If

Public Baglan As Object

Function Benzersiz_Say(ByVal Benzersiz_Sutun_Basligi)
    VeriKaynagi = ThisWorkbook.FullName
   
    Set Baglan = CreateObject("adodb.connection")
    Baglan.Open = "provider=" & Saglayici & ";data source=" & VeriKaynagi & ";extended properties=""" & Ozellik & ";hdr=yes"""
   
    Sorgu = "SELECT COUNT(*) FROM (SELECT DISTINCT [" & Benzersiz_Sutun_Basligi & "] FROM [Sayfa1$])"
   
    Set kayit = VBA.CreateObject("adodb.Recordset")
    kayit.Open Sorgu, Baglan, 1, 1
   
    If kayit.RecordCount > 0 Then
        benzersiz = kayit(0)
    Else
        benzersiz = 0
    End If
    Benzersiz_Say = benzersiz
    Set kayit = Nothing
    Set Baglan = Nothing
End Function
[/REPLY]

Kullanımı :
Herhangi bir boş hücreye:
=Benzersiz_Say(B1) yazın.

B1 ABONE ID sütununa göre baz aldım.

Yorumlarınıza göre revize ederiz kodları.
Kodlar, büyük verilerde hızlı sonuç almanızı sağlayacaktır.
 
Selamlar,
Formülle çözüm olarak örnek bir dosya hazırladım... İncelersiniz...

Kişisel tavsiyem ise, makro kodlarıyla hazırlanan KTF kullanımı olacaktır.

Açıklamalar :
A - B - C kolonlarındaki tablonun Dinamik Alan olarak kullanılabilmesi amacıyla
Kullanılan Ad Tanımlamaları
Kod:
Abone =KAYDIR(Sayfa1!$B$2;;;KAÇINCI("zzzzz";Sayfa1!$B$2:$B$100000);1)
Burada, KAÇINCI("zzzzz";Sayfa1!$B$2:$B$100000) formülü ile, $B$2:$B$100000 aralığındaki METİN olarak (Abone ID leri METİN olarak aldım... Eğer onlar SAYI ise, KAÇINCI(9^99;Sayfa1!$B$2:$B$100000) şeklinde formüle edilmeli) en son dolu hücreye göre Listedeki SATIR Adedini verir. Ad Tanımlamaları Formüllerde kullanılmıştır.
Dizi Formül internet kaynaklıdır
Eğer Ad Tanımlamaları yapılmasa, bu formül içinden çıkılmaz bir hale geliyor.
Açıklamada belirtilen Dinamik Alan için Abone Ad Tanımlamasına ilave olarak bu formülde kullanılmak üzere,
x Ad Tanımlaması da yapıldı...
Kod:
x =EĞER(ALTTOPLAM(3;KAYDIR(Abone;SATIR(Abone)-MİN(SATIR(Abone));;1));Abone;"")

F1 hücresinde Benzersiz Abone ID Adedi hesaplanmak üzere kullanılan DİZİ Formül

Kod:
=TOPLA(S(EĞER(EYOKSA(KAÇINCI("";x;0));KAÇINCI(Abone;Abone;0);EĞER(KAÇINCI(x;x;0)=KAÇINCI("";x;0);0;KAÇINCI(x;x;0)))=SATIR(Abone)-MİN(SATIR(Abone))+1))

şeklindedir...
Not : DİZİ Formülün hücreye girişi, sadece ENTER ile değil, CTRL + SHIFT + ENTER tuşlarının üçüne aynı anda basılarak yapılır. Formül doğru girildiğinde otomatik olarak {...} parantezleri içerisine alınır. Doğru girilmediğinde ya da { } parantezleri manuel yazıldığında formül düzgün çalışmayacaktır.

Office 365 ile daha kolay hesaplanabiliyor...Ve bunun için sadece Abone ad tanımlaması yeterli olmakta...

Office 365 ile hesaplamada, I1 hücresindeki formül

Kod:
=SATIRSAY(BENZERSİZ(FİLTRE(Abone;ALTTOPLAM(3;KAYDIR(İNDİS(Abone;1);SATIR(Abone)-MİN(SATIR(Abone));;1)))))

şeklindedir..
 

Ekli dosyalar

Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst