Makroda sumproduct kullanımı hakkında

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam,
Linteki Örnek Dosyam'ın "üretim" sayfasındaki kodlar aşağıdaki gibidir. Sayfa üzerinde detaylı açıklama ve örnekler mevcuttur.
1.sorum;
İstediklerimi aşağıdaki kodlar ile gerçekleştirebiliyorum. Ancak, fonksiyonlardaki gibi topla.çarpım yapmak için
Worksheetfunction.Sumproduct kullanarak değilde,
Kod:
[COLOR="Red"]carp = carp + WorksheetFunction.Product(veri.Cells(i, "M"), veri.Cells(i, "N")) [/COLOR][/B]
şeklinde yapabildim.

Çözümler doğrudur. Bu hususta yardımcı olabilirseniz sevinirim.

2.sorum;
aşağıdaki kodlar yerine daha sade, pratik ve/veya alternatif kodlar hususunda yardımcı olabilirseniz çok sevinirim.
linkteki örnek dosyamın "üretim" sayfasında detaylı açıklama ve örnekler belirttim.
İyi çalışmalar.
Kod:
Private Sub CommandButton2_Click()
Dim satır, son, carp, topla As Long
Dim s1, veri As Worksheet
Dim yaprak As Byte

Application.ScreenUpdating = False

Set s1 = Sheets("üretim")
Set veri = Sheets("veri")

son = veri.Cells(65536, 1).End(3).Row

satır = 1

For i = 2 To son
    If WorksheetFunction.CountIf(veri.Range("a2:a" & i & ""), veri.Cells(i, "a")) = 1 Then
        satır = satır + 1
        s1.Cells(satır, "A") = veri.Cells(i, "a")
        s1.Cells(satır, "b") = veri.Cells(i, "c").Value
        s1.Cells(satır, "c") = veri.Cells(i, "d")
        s1.Cells(satır, "d") = veri.Cells(i, "e")
        s1.Cells(satır, "e") = veri.Cells(i, "f")
        s1.Cells(satır, "f") = veri.Cells(i, "g")
        s1.Cells(satır, "g") = "" 'birleştirilen hücreleri önce boşaltmak için
        s1.Cells(satır, "I") = "" 'insört yaprakları toplanan hücreleri önce boşaltmak için
        s1.Cells(satır, "J") = "" 'insört miktarı toplanan hücreleri önce boşaltmak için
        s1.Cells(satır, "K") = "" 'insört ağırlıkları toplanan hücreleri önce boşaltmak için
        s1.Cells(satır, "L") = "" 'insört Ortlama Hızları gösterilen hücreleri önce boşaltmak için
        carp = 0
        topla = 0
        
    End If
        
    If s1.Cells(satır, "a") = veri.Cells(i, "a") Then
    
        If WorksheetFunction.CountIf(veri.Range("a2:a" & i & ""), veri.Cells(i, "a")) = 1 Then
        ara = ""
        Else
        'ara = " , "
        ara = Chr(10)
        End If
        
        If veri.Cells(i, "I") = "BS" Then
        yaprak = veri.Cells(i, "K")
        Else
        yaprak = veri.Cells(i, "K") / 2
        End If
         
        s1.Cells(satır, "g") = s1.Cells(satır, "g") & ara & veri.Cells(i, "b") & "." & veri.Cells(i, "h") 'insörtleri birleştirmek için
        s1.Cells(satır, "h") = WorksheetFunction.CountIf(veri.Range("a2:a" & i & ""), veri.Cells(i, "a")) 'insörtleri saymak için
     
        s1.Cells(satır, "I") = s1.Cells(satır, "I") + yaprak ' yaprakları toplamak için
        s1.Cells(satır, "J") = s1.Cells(satır, "J") + veri.Cells(i, "M") ' toplam insört miktarfları için
        s1.Cells(satır, "K") = s1.Cells(satır, "K") + ((yaprak * Mid(veri.Cells(i, "j"), 1, 3) * Mid(veri.Cells(i, "j"), 5, 3) * veri.Cells(i, "L") * veri.Cells(i, "M")) / 1000000000) 'toplam insört ağtrlıkları için
    
        [COLOR="Red"][B]carp = carp + WorksheetFunction.Product(veri.Cells(i, "M"), veri.Cells(i, "N")) ' miktar ve hızları topla.çarpım yapmak için[/B][/COLOR]
        topla = topla + veri.Cells(i, "M") 'miktarların toplamı
        s1.Cells(satır, "L") = carp / topla 'hız ortalama değeri için
        
    End If

Next

Application.ScreenUpdating = True

End Sub
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Topla.Çarpım formülünün makroda farklı kullanımlarını görmek için aşağıdaki linki inceleyebilirsiniz.
http://www.excel.web.tr/showthread.php?t=82178
Selam Sayın Hamitcan,
Verdiğiniz linki inceledim. Çok teşekür ederim. Ancak, yukarıda kırmızı alandaki kısmı topla.çarpım ile yapmayı beceremedim. Öğrenmek ve geliştirmek maksadıyla soruyorum;
ilk sorumdaki çözümü alternatif çözüm bulabilirseniz sevinirim.
Kolay gelsin.
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,749
Excel Vers. ve Dili
Excel 2019 Türkçe
Dosyanızla ile ilgili bir problem tekrar ekleyin. Ayrıca tam olarak ne yapmak istediğinizi belirtin.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,145
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Sn. Ergün Güler,

Ben boş bir dosyada iki sütuna veri girerek bahsettiğiniz yöntemi aşağıdaki şekilde kullandım ve olumlu sonuç aldım.

Kod:
WorksheetFunction.SumProduct(veri.Cells(i, "M"), veri.Cells(i, "N"))
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selamlar,

Sn. Ergün Güler,

Ben boş bir dosyada iki sütuna veri girerek bahsettiğiniz yöntemi aşağıdaki şekilde kullandım ve olumlu sonuç aldım.

Kod:
WorksheetFunction.SumProduct(veri.Cells(i, "M"), veri.Cells(i, "N"))
Selam Sayın Korhan Ayhan,
ilgi ve alakanıza çok teşekkür ederim.

Zaten ben de önce sizin yaptığınız gibi yaptım. tek satırlar için doğru sonucu veriyor. Ancak, istenilen şarta 2 veya daha fazla satır uyuyor ise doğru sonucu vermiyor.
Öncelikle şunu tekrar belirteyim. Benim 1.mesajımdaki kodlar ile doğru sonucu alıyorum. Ancak bir nevi kodları uzatmış oluyorum.

Örnek dosyamdan üzerinden adım adım anlatayım;
veri sayfamda A sütununda "Üretim no."su 7 olan 2 satır var.

A sütunu M sütunu N sütunu
üretim no Miktar Hız
7 14985 46000
7 10769 46000

kodları çalıştırınca "üretim" sayfasında üretim no.ları tekrarlanmmıyor. benzersiz sıralanıyor yani 2 tane 7 satırı 1'e düşürülüyor. (kodları çalıştırıp görebilirsiniz)

benim 1.isteğim şu
üretim no.7'ye ait topla.çarpımı
14985 * 46000 = 689.310.000
10769 * 46000 =495.374.000

689.310.000 + 495.374.000 = 1.184.684.000 sonucunu doğrudur.

Kod:
carp = carp + WorksheetFunction.Product(veri.Cells(i, "M"), veri.Cells(i, "N"))
ile doğru olan 1.184.684.000 sonucunu buluyor.
sizin uyguladığınız kod
Kod:
WorksheetFunction.SumProduct(veri.Cells(i, "M"), veri.Cells(i, "N"))
ise 495.374.000 sonucunu buluyor bu ise yanlış oluyor. Yani sadece 2.nin çarpımını buluyor. Yukarıdaki örnekte görebilirsiniz.
İyi çalışmalar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,145
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Daha önce forumda bu konu hakkında yorumlar yapılmış incelermisiniz.

http://www.excel.web.tr/showthread.php?t=4941

Sanıyorum TOPLA.ÇARPIM fonksiyonunu VBA editöründe WorksheetFunction.SumProduct şeklinde değilde "EVALUATE("SumProduct(..." olarak kullanabiliyoruz.

Yabancı forumlarda da araştırdım genelde yorumlar EVALUATE ile beraber kullanımı yönündedir.

Bu yorumlardan birisi;
http://www.mrexcel.com/forum/showthread.php?t=473682
 
Üst