Bu eğitim size VBA'da Excel SUMIF ve SUMIFS işlevlerini nasıl kullanacağınızı gösterecektir.
VBA, kullanabileceğiniz SUMIF veya SUMIFS İşlevlerinin bir eşdeğerine sahip değildir - bir kullanıcı, VBA'daki yerleşik Excel işlevlerini aşağıdakileri kullanarak kullanmalıdır: Çalışma SayfasıFonksiyonu nesne.
SUMIF Çalışma SayfasıFonksiyonu
WorksheetFunction nesnesi, Excel'deki İşlev Ekle iletişim kutusunda bulunan Excel işlevlerinin çoğunu çağırmak için kullanılabilir. SUMIF işlevi bunlardan biridir.
123 | Alt TestSumIf()Range("D10") = Application.WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))Alt Bitiş |
Yukarıdaki prosedür, yalnızca C sütunundaki karşılık gelen hücre = 150 ise, Aralık(D2:D9) içindeki hücreleri toplayacaktır.
Bir Değişkene SUMIF sonucu atama
Formülünüzün sonucunu doğrudan Excel Aralığı'na yazmak yerine kodda başka bir yerde kullanmak isteyebilirsiniz. Bu durumda, sonucu daha sonra kodunuzda kullanmak üzere bir değişkene atayabilirsiniz.
1234567 | Alt AssignSumIfVariable()Sonucu Çift olarak karart'Değişkeni atasonuç = WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))'Sonucu gösterMsgBox "150 satış koduyla eşleşen sonuçların toplamı " & sonuçAlt Bitiş |
SUMIFS'i kullanma
ETOPLA işlevi, SUMIF WorksheetFunction işlevine benzer, ancak birden fazla kriteri kontrol etmenizi sağlar. Aşağıdaki örnekte, satış kodu 150 ise VE Maliyet Fiyatı 2'den büyükse satış fiyatını toplamaya çalışıyoruz. Bu formülde toplanacak hücre aralığının kriterlerin önünde olduğuna dikkat edin. SUMIF işlevinde geridedir.
123 | Sub MultipleSumIfs()Range("D10") = WorksheetFunction.SumIfs(Range("D2:D9"), Range("C2:C9"), 150, Range("E2:E9"), ">2")Alt Bitiş |
SUMIF'i Aralık Nesnesiyle Kullanma
Range nesnesine bir hücre grubu atayabilir ve ardından bu Range nesnesini Çalışma SayfasıFonksiyonu nesne.
123456789101112 | Alt TestSumIFRange()Dim rngCriteria As RangeAralık olarak Dim rngSum'hücre aralığını atarngCriteria = Aralık ("C2:C9") olarak ayarlayınrngSum = Aralık ("D2:D9") olarak ayarla'formüldeki aralığı kullanRange("D10") = WorksheetFunction.SumIf(rngCriteria, 150, rngSum)'aralık nesnelerini serbest bırakrngCriteria'yı ayarla = Hiçbir şeyrngSum'u ayarla = Hiçbir şeyAlt Bitiş |
SUMIFS'i Çoklu Aralık Nesnelerinde Kullanma
Benzer şekilde, SUMIFS'yi birden çok Aralık Nesnesinde kullanabilirsiniz.
123456789101112131415 | Alt TestSumMultipleRanges()Aralık olarak Dim rngCriteria1Aralık olarak Dim rngCriteria2Aralık olarak Dim rngSum'hücre aralığını ataSet rngCriteria1= Aralık("C2:C9")rngCriteria2 = Aralık ("E2:E10") olarak ayarlayınrngSum = Aralık ("D2:D10") olarak ayarla'formüldeki aralıkları kullanınRange("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")'aralık nesnesini serbest bırakrngCriteria1 = Hiçbir şey ayarlarngCriteria2'yi ayarla = Hiçbir şeyrngSum'u ayarla = Hiçbir şeyAlt Bitiş |
Büyüktür işareti kullandığınız için 2'den büyük ölçütlerin parantez içinde olması gerektiğine dikkat edin.
SUMIF formülü
kullandığınızda WorksheetFunction.SUMIF çalışma sayfanızdaki bir aralığa toplam eklemek için esnek bir formül değil, statik bir toplam döndürülür. Bu, Excel'deki rakamlarınız değiştiğinde, tarafından döndürülen değer anlamına gelir. Çalışma SayfasıFonksiyonu değişmeyecek.
Yukarıdaki örnekte, prosedür, C sütununda SaleCode'un 150'ye eşit olduğu Range(D2:D9)'u ekledi ve sonuç D10'a konuldu. Formül çubuğunda görebileceğiniz gibi, bu sonuç bir rakamdır, formül değil.
Aralık(D2:D9) veya Aralık(C2:D9)'daki değerlerden herhangi biri değişirse, D10'daki sonuç OLUMSUZ değiştirmek.
kullanmak yerine WorksheetFunction.SumIfkullanarak bir hücreye SUMIF İşlevi uygulamak için VBA'yı kullanabilirsiniz. formül veya formülR1C1 yöntemler.
Formül Yöntemi
Formül yöntemi, aşağıda gösterildiği gibi, örneğin: D2:D10 gibi belirli bir hücre aralığına işaret etmenizi sağlar.
123 | Alt TestSumIf()Aralık("D10").FormulaR1C1 = "=TOPLA(C2:C9,150;D2:D9)"Alt Bitiş |
FormulaR1C1 Yöntemi
FormulaR1C1 yöntemi, sizi belirli bir hücre aralığıyla sınırlamadığı için daha esnektir. Aşağıdaki örnek bize yukarıdakiyle aynı cevabı verecektir.
123 | Alt TestSumIf()Aralık("D10").FormulaR1C1 = "=TOPLA(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C )"Alt Bitiş |
Ancak, formülü daha esnek hale getirmek için kodu şu şekilde değiştirebiliriz:
123 | Alt TestSumIf()ActiveCell.FormulaR1C1 = "=TOPLA(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C)"Alt Bitiş |
Çalışma sayfanızın neresinde olursanız olun, formül doğrudan üstündeki ölçütleri karşılayan hücreleri toplayacak ve yanıtı ActiveCell'inize yerleştirecektir. SUMIF işlevinin içindeki Aralık, Satır (R) ve Sütun (C) sözdizimi kullanılarak başvurulmalıdır.
Bu yöntemlerin her ikisi de VBA içinde Dinamik Excel formüllerini kullanmanızı sağlar.
Artık D10'da değer yerine formül olacak.