VBA SUMIF ve SUMIF İşlevleri

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.

wave wave wave wave wave