• DİKKAT

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

WorksheetFunction.Sum(If( - = {Topla(Eğer(

Katılım
12 Nisan 2007
Mesajlar
170
Excel Vers. ve Dili
Office XP
Arkadaşlar Excelde bildiğimiz ={Topla(Eğer(...... şeklinde yazılan formülün VBA'daki karşılığı nasıldır. Aşağıda bir denemem var. Fakat çalıştıramadım. Yardımcı olursanız sevinirim.

Cells(satır2, sütun2).Value = WorksheetFunction.Sum(If(Sheets("Gusto_Veri").("e1:e1000").Value = Cells(satır2, 2).Value, If(Sheets("Gusto_Veri").("h1:h1000").Value = Cells(4, sütun2).Value, Sheets("Gusto_Veri").("ı1:ı1000").Value,0),0))
 
Rkadaşlar yardımcı olacak kimse yok mu? Benim için çok önemli.
 
Hamitcan Bey, verdiğiniz linkte SumIF yani ETOPLA komutu anlatılıyor. Benim sorum Sum(IF( yani TOPLA(EĞER( ile ilgili. Bu ikisinden ilki tek bir koşul ile arama ve toplama yaparken diğeri birden fazla koşula göre toplama yapabiliyor. Forumda ne kadar arasam da bu konuda bir sonuca ulaşamadım. Buna göre yardımcı olabilir misiniz?
 
Bu linki de incelemiştim ama benim istediğim Sum(If formülünü hücre içine yazdırmak değil WorksheetFunction.Sum(If ile sonuç değerini hücreye yazdırmak. Yukarıda verdiğim örnekte hata var bu hatayı düzeltebilirseniz çok makbule geçer.
 
aşağıdaki gibi deneyin. Olmazsa bir örnek ekleyin.
Kod:
 Cells(satır2, SÜTUN2).Value = Evaluate("=SUMPRODUCT(('Gusto_Veri'!E1:E1000=" & Cells(satır2, 2).Address & _
")*('Gusto_Veri'!H1:H1000=" & Cells(4, SÜTUN2).Address & ")*('Gusto_Veri'!I1:I1000))")
 
#Değer! hatası veriyor for nexti kaldırdım tek hücreyi kontrol ettirdim yine olmadı. Bunu WorksheetFunction.Sum(If( formatıyla yapamaz mıyız.
 
Kendim için yaptığım uygulama aşağıdadır

=TOPLA(EĞER(B148=A8:A145; EĞER(H148=H8:H145; EĞER("İçi"=N8:N145;J8:J145;0))))

satırını 148 ila 153. satırlar arasında çoğaltıp özet almakta kullandım

Kod:
Sub KosulluToplam_hsr()
FormSonSat = 145
For HCR = 148 To 153
With Range("J" & HCR)
                    .FormulaArray = "=SUM(IF(B" & HCR & "=A8:A" & FormSonSat & ", IF(H" & HCR & "=H8:H" & FormSonSat & " , IF(""İçi""=N8:N" & FormSonSat & ",J8:J" & FormSonSat & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
End With
         
With Range("K" & HCR)
                    .FormulaArray = "=SUM(IF(B" & HCR & "=A8:A" & FormSonSat & ", IF(H" & HCR & "=H8:H" & FormSonSat & " , IF(""Dışı""=N8:N" & FormSonSat & ",J8:J" & FormSonSat & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
End With
Next HCR
Application.CutCopyMode = False
End Sub
 
Sayın hsayar arkadaşım dediğin şekilde formülü uyguladım aşağıdaki şekle dönüştü. Ama Run time error 424 hatası ile "Obje Required" hatası verdi. Bu formülü hücre içine yazıp kopyala değerleri yapıştır yapmadan WorksheetFunction.Sum(If ile doğrudan yazamaz mıyız.

For sat = 6 To (Ürün_Sayısı * 2 + 5) Step 2
For süt = 4 To (4 + Hammadde_Sayısı * 2)

With Cells(sat, süt).Address
.FormulaArray = "=SUM(IF(" & Cells(sat, 2).Address & "=" & "'Gusto_Veri'!E1:E1000" & "," & "IF(" & Cells(4, süt).Address & "=" & "'Gusto_Veri'!H1:H1000" & "," & "'Gusto_Veri'!I1:I1000" & ",0)))"
.Copy
.PasteSpecial Paste:=xlPasteValues
'End With

Next süt
Next sat
 
Son düzenleme:
Hücrede Formülü görebilmek için aşağıdaki gibi yapınız
Kod:
Sub KosulluToplam_hsr2()
FormSonSat = 145
For HCR = 148 To 153
'=TOPLA(EĞER(B148=A8:A145; EĞER(H148=H8:H145; EĞER("İçi"=N8:N145;J8:J145;0))))
Range("J" & HCR).FormulaArray = "=SUM(IF(B" & HCR & "=A8:A" & FormSonSat & _
                                   ", IF(H" & HCR & "=H8:H" & FormSonSat & _
                                   ", IF(""İçi""=N8:N" & FormSonSat & _
                                              ", J8:J" & FormSonSat & ",0))))"
Next HCR
End Sub

Cellsli kullanıım ve içiçe sütunla for next konusunda ben anlalam ama örnek tablo veya manuel oluşturduğunuz formülü buraya yapıştırırırsanız vaktim olunca ilgilenirim.
 
Son düzenleme:
2.bir seçenek olarak ta şu şekilde denedim. Burada da Run time error 13 Type Missmatch hatası verdi. bu hataların ne olduğu veya aşağıdaki kodu düzeltme konusunda bilgisi olan var mı?

Cells(sat, süt).Value = WorksheetFunction("Sum(If(Cells(sat, 2).Address & " = " & Gusto_Veri!E1:E1000" & "," & "IF(Cells(4, süt).Address & " = " & Gusto_Veri!H1:H1000" & "," & "Gusto_Veri!I1:I1000" & "," & 0)
 
Elle Oluşturduğunuz formulu veriniz ve her sütun için ayrı ayrı giriniz ....
 
Sayın alibaskan,

1-Gusto_Veri sayfasındaki verilerinizde başlık sütunu varmı.
2-Başlık sütunu varsa hangi satırdan başlıyor.
3-Toplamını almak istediğiniz sütunda metinsel ifade varmı.

Birde ekteki dosyayı inceleyin.
 
Şu an işteyim eve geçince dosyanın bir örneğini ekleyeceğim. Böylelikle kodlar üzerinde çalışabilirsiniz. İlginizden dolayı çok teşekkür ediyorum.
 
Arkadaşlar dosyayı ekliyorum. Dosya örnektir. Ürün isimleri ve hammadde isimleri gerçekte değişiklik göstermektedir. Bu yüzden kodları değiştirirken isimlere göre kod yazmayın. Şirket bilgilerini içerdiği için orjinal dosyayı ekleyememekteyim.Tablo sayfasına geçtiğinizde makro çalışmaktadır. Makronun hata verdiği yer düzeltilecektir. İlgilenen arkadaşlara teşekkür ediyorum.
 
sn alibaşkan dosynıza baktım da
1) ürün1 tabloya gelmiyor, DOĞRUMU
2)
MAMUL CİNSİ ÜRETİM Hammadde1
Kg. Kg. YTL
ÜRÜN2 480.000

ÜRÜN3 60.000

ÜRÜN4 500.000

ÜRÜN5 2.500

ÜRÜN6 4.000.000

ÜRÜN7 20.000

TOPLAM 5.062.500 0 0,00



tablolarında veri sayfasındaki ad ve kod arasındaki başlıksız sütrunun altındaki 480000 satırlarının toplamı değil kendi geliyor neden ?
diğerlerirnde

ürün adı ve hammade adına göre kg ve ytl sinin mi koşullu toplamını istiyorsunuz
 
Not manuel oluşturmaya kalktımda dizi formulleri birleşik hücrelerde geçersizdir diyor...
Sayfa_Aktif kodlarını buna göre ayarlayınız
(Birleşik hücre olmayacak.)

YTL ve kg sütunları nerede bu arada
 
Kod:
'With Cells(sat, süt).Address
'.FormulaArray = "=SUM(IF(" & Cells(sat, 2).Address & "=" & "'Veri'!E1:E1000" & "," & _
'"IF(" & Cells(4, süt).Address & "=" & "'Veri'!H1:H1000" & "," & "'Veri'!I1:I1000" & ",0)))"
'                    .Copy
'                    .PasteSpecial Paste:=xlPasteValues
'End With
bunun yerine formüllü cevabı
Kod:
Cells(sat, süt).value = "=SUMPRODUCT(('Veri'!E4:E1000=" & Cells(sat, 2).Address & _
")*('Veri'!H4:H1000=" & Cells(4, süt).Address & ")*('Veri'!I4:I1000))"

Kod:
Cells(sat, süt).value = Evaluate("=SUMPRODUCT(('Veri'!E4:E1000=" & Cells(sat, 2).Address & _
")*('Veri'!H4:H1000=" & Cells(4, süt).Address & ")*('Veri'!I4:I1000))")
buda formülsüz cevabı
deneyin
 
sayın exes emeğiniz ve yoğun ilginizden dolayı çok teşekkür ediyorum. Sayın hsayar ile msn görüşmeleri sonrasında sorun etopla yani SumIf ile çözülmüştür. excelde 2 sütundaki veri tek bir sütunda birleştirilmiş sonra etopla ile aratılarak toplaması sağlanmıştır. Yani birden fazla sütun kontrolü etopla ile de bu yöntemle yapılabilmektedir.
 
Geri
Üst