• DİKKAT

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

KTF; eğersay'ın çoklusu ; çokyerdesay

  • Konbuyu başlatan Konbuyu başlatan mersilen
  • Başlangıç tarihi Başlangıç tarihi

mersilen

Destek Ekibi
Destek Ekibi
Katılım
31 Aralık 2009
Mesajlar
1,105
Excel Vers. ve Dili
excel 2007 türkçe
Excel Vers. ve Dili Ofis 2003
Selamlar
Eğersay formülü bir karakteri bir dizinde sayabiliyorken 3-4 dizin içinde bir karakteri sayan formül yok
Eğersay formülünün 3-4 tanesini bir fonksiyon altında birleştirmek istiyorum, bunun için aralık 1-2-3 dizini içinde ölçüt değerini sayan çokeğersay fonksiyonu yapmaya çalıştım ama bir yerde hata yapıyorum.Yardımcı olabilir misiniz?

Kod:
Function çokyerdesay(aralık1, aralık2, aralık3, ölçüt As Range)
a = aralık1
b = aralık2
c = aralık3
d = ölçüt
çokyerdesay = CountIf(Range("a"), Range("d")) + CountIf(Range("b"), Range("d")) + CountIf(Range("c"), Range("d"))
End Function
 
Selamlar
Eğersay formülü bir karakteri bir dizinde sayabiliyorken 3-4 dizin içinde bir karakteri sayan formül yok
Eğersay formülünün 3-4 tanesini bir fonksiyon altında birleştirmek istiyorum, bunun için aralık 1-2-3 dizini içinde ölçüt değerini sayan çokeğersay fonksiyonu yapmaya çalıştım ama bir yerde hata yapıyorum.Yardımcı olabilir misiniz?


Eğer Sayı Aşağıdaki formulle hiç denedinizmi?


Kod:
=TOPLA.ÇARPIM((A1:A13=E1)+(B1:B13=E1)+(C1:C13=E1))
 
Hüseyin bey
Cevap için teşekkürler , sizin yolla oluyor
ama ben KTF ile yapmaya çalışıyorum.
Amacım uzun bir formülü sadeleştirmek.
 
Hüseyin bey
Cevap için teşekkürler , sizin yolla oluyor
ama ben KTF ile yapmaya çalışıyorum.
Amacım uzun bir formülü sadeleştirmek.


Ozaman Bunu Bir deneyin

Kod:
Function çokyerdesay(aralık1, aralık2, aralık3, ölçüt)
a = WorksheetFunction.CountIf(aralık1, ölçüt)
b = WorksheetFunction.CountIf(aralık2, ölçüt)
c = WorksheetFunction.CountIf(aralık3, ölçüt)

çokyerdesay = a + b + c
End Function
 
Hüseyin bey
teşekkürler
aradığım buydu.
 
merhaba

syn mersilen, excel2007 kullanıyorsunuz.
ÇOKEĞERSAY excel2007 de zaten mevcut.
 
Sayın Uzmanamele hocam

2007 ve 2010 excel versiyonlarının her ikisinide kullanıyorum
sanki sizin dediğiniz gibi olmuyor?

çokeğersay=toplaçarpım=TOPLA.ÇARPIM((A1:A13=E1)*(B1:B13=E1)*(C1:C13=E1))
çokyerdesay=eğersay1+eğersay2...
çokyerdesay=TOPLA.ÇARPIM((A1:A13=E1)+(B1:B13=E1)+(C1:C13=E1))


gibi değerlendiriyorum ben.
Eğersay sadece bir dizinde sayabiliyor, birden fazla olunca topla.çarpımla saydırılıyor
 
Son düzenleme:
merhaba

bu aynı işi görmüyor mu?
benim kaçırdığım bişey mi var?
Kod:
=EĞERSAY(A1:C10;E1)
 
uzman hocam
birleşik tek tabloda sorun yok ama birleşik olmayan tablolarda sorun oluyor
 

Ekli dosyalar

çokeğersay veya topla.çarpım fonksiyonunun * operatörü ile kullanılması AND (VE) operatörü gibidir. yani tanımlanan aralıklarda verilen ölçüte aynı anda uyan değerlerin tekrar sayısını verir.

çokeğrsay'da 1. aralık kaç sütun ve satırdan oluşuyor ise diğer aralıklar da aynı boyutta olmalıdır. (excel yardım'dan)

sizin örnekte ilk veri olan 3, bütün aralıkların sadece 3. satırında aynı anda mevcut olduğu için sonuç 1 çıkacaktır.

yani
Kod:
=TOPLA.ÇARPIM((A1:A13=E1)*(B1:B13=E1)*(C1:C13=E1)*(F1:F13=E1)*(H1:H13=E1)*(I1:I13=E1))
ile
Kod:
=ÇOKEĞERSAY(A1:A10;E1;B1:B10;E1;C1:C10;E1;F1:F10;E1;H1:H10;E1;I1:I10;E1)
aynı sonucu verir: 1


topla.çarpım'da + operatörünün kullanılması ise OR (VEYA) olduğundan, sizin örnekteki doğru sonucu verecektir.
 
Son düzenleme:
keza dizi formülü (CSE) olarak girilen aşağıdaki formül de ayn sonucu veriyor.

Kod:
=TOPLA((A1:A10=E1)*(B1:B10=E1)*(C1:C10=E1)*(F1:F10=E1)*(H1:H10=E1))
 
Sayın Mancubus
Açıklamalarınız için teşekkür ederim, ben eşit olmayan tablolarda (örnekteki tablo eşit, keşke eşit büyüklükte yapmasaymışım) sayım yaptırılırken daha kolay birşey yapılabilir mi? diye kendim için yola cıkmıştım.Hüseyin beyin sayesinde güzel bir çalışma yaptık.İnşallah diğer arkadaşlarada yardımcı olur.
Birkaç tane excel kitabı ve eğitim cd si inceledim, hiç biri sizlerin yorumu kadar güzel olayı açıklıyamıyor.Bu web sitesindeki yazıları bir kitap içinde derleyen olsa , inanın çok başarılı bir kaynak olur.Çevremdekilerede bu siteyi öneriyorum.
Tekrar herkese katkılarından dolayı çok teşekkür ederim
 
rica ederim. ben de forumdan ve internetten araştırarak öğrenmeye çalışıyorum. excel bir okyanus. o güne kadar ihtiyacınız olmadı ise çok basit bir şeyi bilmeyebiliyorsunuz. veya yeni başlayıp çok karmaşık bir şeyi daha ilk gün öğrenebiliyorsunuz.

dosyanızdaki KTF'yi kullancaksınız veya aşağıdaki gibi çoklu formül
Kod:
=EĞERSAY(A1:C10;E1)+EĞERSAY(F1:F10;E1)+EĞERSAY(H1:I10;E1)

yalnız KTF'nin mutlaka 3 aralık için olduğuna dikkat edin. daha fazla veya daha az aralık için KTf revize edilmeli.
 
2-5 arasındaki aralıklara göre revize edilmiş KTF aşağıdaki gibidir.

Kod:
Function esay_çok_aralık(ölçüt, aralık1, Optional aralık2, Optional aralık3, Optional aralık4, Optional aralık5)
'uyarlama: http://www.ozgrid.com/VBA/Sum.htm

Dim rHcr As Range
Dim iKrit
Dim vSonuç

iKrit = ölçüt
    
For Each rHcr In Union(aralık1, aralık2, aralık3, aralık4, aralık5)
    If rHcr.Value = iKrit Then
         vSonuç = vSonuç + 1
    End If
Next rHcr

esay_çok_aralık = vSonuç

'örnek1: =esay_çok_aralık("";A1:C10;F1:F10;H1:I10) 'tanımlanan alanlardaki boş hücrelerin sayısı
'örnek2: =esay_çok_aralık("zep";A1:C10;F1:F10;H1:I10) 'tanımlanan alanlarda "zep" kelimesinin toplam sayısı
'örnek1: =esay_çok_aralık(E1;A1:C10;F1:F10;H1:I10) 'tanımlanan alanlarda E1'deki değerin toplam sayısı

End Function
 
Sayın Mancubus
Emeğinize sağlık, çok kullanışlı olmuş.
 
tekrar merhaba.

konu farklı bir alan için bana da lazım oldu. "dışsal" yardım :redface: ile düzeltilmiş daha işlevsel (ve çok daha kaliteli) ktf aşağıdaki gibidir.

çok aralık toplam fonksiyonu (uyarlama bana ait :redface: ) da eklenmiştir.

Kod:
Function esay_çok_aralık(ölçüt, ParamArray aralık())
    
    Dim vSonuç As Long
     
    For i = LBound(aralık) To UBound(aralık)
         vSonuç = vSonuç + Application.CountIf(aralık(i), ölçüt)
    Next i
     
    esay_çok_aralık = vSonuç
     
End Function

örnek
=esay_çok_aralık(">"&E1;A1:C10;F1:F10;H1:I10)
tamnımlanan aralıklarda E1 hücresindeki değerden büyük olanların sayısı

Kod:
Function etopla_çok_aralık(ölçüt, ParamArray aralık())
    
    Dim vSonuç As Long
     
    For i = LBound(aralık) To UBound(aralık)
        vSonuç = vSonuç + Application.SumIf(aralık(i), ölçüt, aralık(i))
    Next i
     
    etopla_çok_aralık = vSonuç
     
End Function

örnek
=etopla_çok_aralık(E1;A1:C10;F1:F10;H1:I10)
tamnımlanan aralıklarda E1 hücresindeki değere eşit olanların toplamı
 
Son düzenleme:
Sayın Mancubus

Tekrar emeğinize sağlık, çok güzel olmuş.
Ms offis ciler bir dahaki sürüme bu kodlarınızı ekleyebilirler
Ayrıca;
Kod:
=esay_çok_aralık(">"&E1;A1:C10;F1:F10;H1:I10)

">"&E1 kısmı (metin mi? /sayı mı? diye) düzenlenebilir mi?Birkaç konudur ,tabloda ki sayıların ve metinlerin adeti ile ilgili problemler çıkıyor.Metin değilse sayıların toplamı gibi..


Excel metin fonksiyonları kısmına access ve html/java kodlarına benzer bir ktf de yapabilirmiyiz?Biraz tasarlayayım sonra ayrı bir başlık açalım.Çünkü metin içinde aynı karakterden birden fazla varken x inci karakterden önce sonra hareket sağlıyacak kod lazım gibi.

( 1234:ade32:46 ) gibi=
ade32
1234
46
 
Son düzenleme:
merhaba.

dediğim gibi kodlar tarafımdan yazılmadı.


excel metin ve rakamın birarada olduğu tablolarda nasıl hareket ediyorsa bu KTF'ler için de aynı durum geçerli.

=etopla_çok_aralık(">"&E1;A1:C10;F1:F10;H1:I10) yazdığınızda sadece aralıklardaki E1 hücresindeki değerden büyük olan sayılar toplanacaktır.

=esay_çok_aralık("<z";A1:C10;F1:F10;H1:I10) yazdığınızda ise z'den küçük metinleri sayacaktır.



Japonca olduğunu tahmin ettiğim son paragrafınız hakkında yorum yapamayacağım. :tongue:

iyi günler.
 
Son düzenleme:
Geri
Üst