• DİKKAT

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

çoketopla KTF si hatalı

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
daha önce sayın Mancubus sayesinde çok eğersay formülünün ktf sini öğrenmiştim
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ı


şimdi
çok eğersay formülünü çoketoplaya uyarlamaya çalıştım ama sonu hatalı değer döndürüyor
macroyu incelememiz mümkün mü?

Function ÇOKetopla_çok_aralık3(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long
If Range("a2") = "" Then vSonuç = "" Else
For i = LBound(ölçüt) To UBound(ölçüt)


vSonuç = vSonuç + Application.SumIf(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i

ÇOKetopla_çok_aralık3= vSonuç
End Function
 

Ekli dosyalar

Son düzenleme:
detaya bakma zamanım yok.
ancak basit kod yazımındaki hataları kırmızı renk ile düzelttim.
bu KTF'nin çalışacağı anlamına gelmez. detayına inmek lazım.
cevap veren olmaz ise ilk fırsatta bakarım.

Kod:
Function ÇOKetopla_çok_aralık3(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long

If Range("a2") = "" Then vSonuç = "" 

For i = LBound(ölçüt) To UBound(ölçüt)
     vSonuç = vSonuç + Application.SumIf(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i

[COLOR="Red"]ÇOK[/COLOR]etopla_çok_aralık[COLOR="red"]3[/COLOR] = vSonuç
End Function
 
Merhaba sayın Mancus
Onu biraz geçte olsa bende farkettim ve düzelttim
ama yine değer döndürmedi
 
SumIf aşağıdaki gibi kullanılamaz. hatalı.

Kod:
SumIf(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))

tam olarak neyi elde etmek istediğinizi açıklarsanız daha iyi. olur. eğer doğru anladı isem ihtiyacınızı çözmek için KTF'ye gerek yok.
 
Tekrar selam
ilgin için teşekkürler
boş duracağıma bir soruyu cevaplayabilir miyim diye başladı bu konu

http://www.excel.web.tr/f47/oketopla-formulu-yardym-t98813.html#post538650

problemi incelediğimde

'=EĞER(EBOŞSA(A2);"";
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A103")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A104")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A107")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E102")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E105")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E108")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E123")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E125")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E126")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E132")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"H101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"H102")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"K102")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y102")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y103")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y105")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y106")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"Y201")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"E131"))
daha sonra çok e toplayı oluşturan formülü inceledim

=ÇOKETOPLA(toplam_aralığı, ölçüt_aralığı1, ölçüt1, [ölçüt_aralığı2,ölçüt2], …)

problemdeki soruda ölçüt2 de bir döngü mevcuttu
çokeğersayı buna uyarlamaya çalıştım
macroyla çoketoplayı kaydettim ve benzerlikleri ayarladım

' ÇOKETOPLA(toplam_aralığı, ölçüt_aralığı1, ölçüt1, [ölçüt_aralığı2,ölçüt2], …)
'=EĞER(EBOŞSA(A2);"";ÇOKETOPLA(C2:C17; D2:D17; E2; F2:F17; G2))
' "=IF(ISBLANK(R[-6]C[-9]),"""",SUMIFS(R[-6]C[-7]:R[9]C[-7],R[-6]C[-6]:R[9]C[-6],R[-6]C[-5],R[-6]C[-4]:R[9]C[-4],R[-6]C[-3])


Function ÇOKetopla_çok_aralık3(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long
If Range("a2") = "" Then vSonuç = "" Else

For i = LBound(ölçüt) To UBound(ölçüt)
vSonuç = vSonuç + Application.SumIf(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))

Next i

ÇOKetopla_çok_aralık3= vSonuç
End Function

Tabii sonuçta işin içinden çıkılmaz hale geldi

DERKEN
BU YAZIYI YAZDIKTAN DAKİKALAR SONRA
ifs dikkatimi çekti,
sanırım aşağıdaki kod doğru çalışıyor


Function ÇOKetopla_çok_aralık4(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long



For i = LBound(ölçüt) To UBound(ölçüt)
vSonuç = vSonuç + Application.SumIfs(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i
If Range("a2") = "" Then
ÇOKetopla_çok_aralık4 = ""
Else
'
ÇOKetopla_çok_aralık4 = vSonuç
End If
End Function
macro daha çabuk karar versin diye boşsa end functiona gittin diye if i başa aldım ama bu seferde burada hata oldu

Function ÇOKetopla_çok_aralık4(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long

If Range("a2") = "" Then
ÇOKetopla_çok_aralık4 = ""
Else

For i = LBound(ölçüt) To UBound(ölçüt)
vSonuç = vSonuç + Application.SumIfs(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i

'
ÇOKetopla_çok_aralık4 = vSonuç
End If
End Function
uygun zamanda daha dikkatli inceliyeceğim
iyi ingilizce bilmemenin zararı
teşekkürler Mancus
 
Son düzenleme:
SumIf aşağıdaki gibi kullanılamaz. hatalı.

Kod:
SumIf(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))

tam olarak neyi elde etmek istediğinizi açıklarsanız daha iyi. olur. eğer doğru anladı isem ihtiyacınızı çözmek için KTF'ye gerek yok.

merhaba ksr bakmayın evimde internet yok sn mersilen dediği gibi ölçüt2 deki kısır döngüden bahsediyorum bunu tek bir çoketoplaya ekleyemezmiyiz

örneğin:

ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A103")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A104")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A107")+



yerine


ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;VE('FATURA İSTATİSTİKLERİ'!J:J;"A101";'FATURA İSTATİSTİKLERİ'!J:J;"A103";'FATURA İSTATİSTİKLERİ'!J:J;"A104";'FATURA İSTATİSTİKLERİ'!J:J;"A107"))


yani ölçüt2 değerinde sorguların herbiri için 1 tane çoketopla fformülü koyuyorum bunun yerine tekbir sorguya hepsini ekleyemezmiyim.
 
sELAM
merhaba ksr bakmayın evimde internet yok sn mersilen dediği gibi ölçüt2 deki kısır döngüden bahsediyorum bunu tek bir çoketoplaya ekleyemezmiyiz

örneğin:

ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A101")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A103")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A104")+
ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A107")+



yerine


ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;VE('FATURA İSTATİSTİKLERİ'!J:J;"A101";'FATURA İSTATİSTİKLERİ'!J:J;"A103";'FATURA İSTATİSTİKLERİ'!J:J;"A104";'FATURA İSTATİSTİKLERİ'!J:J;"A107"))


yani ölçüt2 değerinde sorguların herbiri için 1 tane çoketopla fformülü koyuyorum bunun yerine tekbir sorguya hepsini ekleyemezmiyim.
sanırm böyle birşey istiyorun


Kod:
=EĞER(EBOŞSA(A2);"";ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A101";"A103";"A104";"A107")
sizin işinize uygun olarak ktf oluşturursak
Kod:
=ÇOKetopla_çok_aralık4(C2:C17;D2:D17;E2;F2:F17;G2;H2;I2;J2)

'FATURA İSTATİSTİKLERİ'!S:S=c2:c17
'FATURA İSTATİSTİKLERİ'!B:B=d2:d17
C2=e2
'FATURA İSTATİSTİKLERİ'!J:J=f2:f17
"A101"=g2
"A103"=h2
"A104"=ı2
"A107"=j2


Kod:
=EĞER(EBOŞSA(A2);"";ÇOKETOPLA('FATURA İSTATİSTİKLERİ'!S:S;'FATURA İSTATİSTİKLERİ'!B:B;C2;'FATURA İSTATİSTİKLERİ'!J:J;"A101";"A103";"A104";"A107")
formülünün yerine de direkt bunu uyarlayın

Kod:
Function ÇOKetopla_çok_aralık5(eboşsa, toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long
For i = LBound(ölçüt) To UBound(ölçüt)
vSonuç = vSonuç + Application.SumIfs(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i

If eboşsa = "" Then
ÇOKetopla_çok_aralık5 = ""
Else
'
ÇOKetopla_çok_aralık5 = vSonuç
End If
End Function
eboşsa=a2
'FATURA İSTATİSTİKLERİ'!S:S=c2:c17
'FATURA İSTATİSTİKLERİ'!B:B=d2:d17
C2=e2
'FATURA İSTATİSTİKLERİ'!J:J=f2:f17
"A101"=g2
"A103"=h2
"A104"=ı2
"A107"=j2
....
....
....


'FATURA İSTATİSTİKLERİ'!J:J
sorgulamasını artırabilirsinde
 

Ekli dosyalar

Son düzenleme:
sn mersilen tekrar merhaba ksr kalma cevap yazamadım. özür dilerim. Evimde internet yok. Dediğin sistem düzgün çalışıyor ve bu konuda yardımcı olduğun için çok teşekkür ederim. Lakin benim 2 küçük sorunum olacak.

1- Sistem düzgün hesaplıyor fakat Kuruş Hesaplaması yapmıyor?
2- ÇOKetopla_çok_aralık4 4 ayrı ölçüt mü alıyor? Cevap evet ise bunu 30 a kadar nasıl çıkartabiliriz. - Bunu kontrol ettim bu kısımda sıkıntı yok sadece Kuruş düzenlemesi yapabilirmisiniz.


Gerçekten yardımlarınız için çok teşekkür ederim.
 
Son düzenleme:
Selam
Bu kod sanırım daha güzel olacak ve daha hızlı hesaplayacaktır
kuruş düzenlemesini anlamadım, hücre formatını ayarlarsan olur gibi geliyor
Kod:
Function ÇOKetopla_çok_aralık6(eboşsa, toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ParamArray ölçüt())

Dim vSonuç As Long


If eboşsa = "" Then
ÇOKetopla_çok_aralık6 = ""
Else

For i = LBound(ölçüt) To UBound(ölçüt)
vSonuç = vSonuç + Application.SumIfs(toplam_aralığı, ölçüt_aralığı1, ölçüt1, ölçüt_aralığı2, ölçüt(i))
Next i
'
ÇOKetopla_çok_aralık6 = vSonuç
End If
End Function
 
ÇOKetopla_çok_aralık5
ve
ÇOKetopla_çok_aralık6

#değer hatası veriyordu. sorun bende imiş. kardeşim tek sorun yuvarlama hatası kaldı. Rakamları yuvarlayıp öyle topluyor. Hücre formatı değiştirip denedim yine de olmuyor. Bunuda hallet Helal olsun.

Çok teşekkürler, Sayende çok yol aldım.
 
Son düzenleme:
bunu silerek
Kod:
Dim vSonuç As Long

yerine
Kod:
Dim vSonuç As Double
yazın.
 
Sn mersilen
Sn mancubus
emeklerinizden ötürü çok teşekkür ederim. Hakkınızı helal edin.
Sorunum çözüldü. Allah (c.c.) razı olsun.

Saygılarımla
 
Örnek tablo ekleyebilir misin?
 
faydamız dokundu ise ne mutlu bize...
 
sayın stylememo teşekkürler
bende Mancubus a ayrıca tşk ederim, kodları onun daha önceki yardımlarından esinlenerek yapmaya çalışmıştım
 
Geri
Üst