Този урок ще ви покаже как да използвате функциите Excel COUNTIF и COUNTIFS във VBA
VBA няма еквивалент на функциите COUNTIF или COUNTIFS, които можете да използвате - потребителят трябва да използва вградените функции на Excel във VBA, като използва WorkSheetFunction обект.
COUNTIF Работен лист Функция
Обектът WorksheetFunction може да се използва за извикване на повечето от функциите на Excel, които са налични в диалоговия прозорец Вмъкване на функция в Excel. Функцията COUNTIF е една от тях.
123 | Sub TestCountIf ()Диапазон ("D10") = Application.WorksheetFunction.CountIf (Диапазон ("D2: D9"), "> 5")End Sub |
Горната процедура ще брои клетките в диапазон (D2: D9) само ако те имат стойност 5 или по -голяма. Забележете, че тъй като използвате знак по -голям, критериите по -големи от 5 трябва да бъдат в скоби.
Присвояване на COUNTIF резултат на променлива
Може да искате да използвате резултата от формулата си другаде в кода, вместо да го пишете директно обратно в и Excel диапазон. Ако случаят е такъв, можете да присвоите резултата на променлива, която да използвате по -късно във вашия код.
1234567 | Sub AssignSumIfVariable ()Затъмнете резултата като двоен'Задайте променливатарезултат = Application.WorksheetFunction.CountIf (Обхват ("D2: D9"), "> 5")'Покажете резултатаMsgBox "Броят на клетките със стойност по -голяма от 5 е" & резултатEnd Sub |
Използване на COUNTIFS
Функцията COUNTIFS е подобна на функцията COUNTIF WorksheetFunction, но ви позволява да проверите за повече от един критерий. В примера по -долу формулата ще преброи броя клетки в D2 до D9, където продажната цена е по -голяма от 6 И цената на себестойността е по -голяма от 5.
123 | Sub UsingCountIfs ()Range ("D10") = WorksheetFunction.CountIfs (Range ("C2: C9"), "> 6", Range ("E2: E9"), "> 5")End Sub |
Използване на COUNTIF с Range Object
Можете да присвоите група клетки на обекта Range и след това да използвате този Range обект с Работен лист Функция обект.
123456789 | Sub TestCountIFRange ()Dim rngCount като Range'задайте диапазона от клеткиЗадайте rngCount = Обхват ("D2: D9")'използвайте диапазона във формулатаДиапазон ("D10") = Функция на работен лист.SUMIF (rngCount, "> 5")'освободете обектите на диапазонаЗадайте rngCount = НищоEnd Sub |
Използване на COUNTIFS върху обекти с множество обхвати
По същия начин можете да използвате COUNTIFS за множество Range обекти.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngCriteria1 As RangeDim rngCriteria2 като диапазон'задайте диапазона от клеткиЗадайте rngCriteria1 = Обхват ("D2: D9")Задайте rngCriteria2 = Обхват ("E2: E10")'използвайте диапазоните във формулатаRange ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")'освободете обектите на диапазонаЗадайте rngCriteria1 = НищоЗадайте rngCriteria2 = НищоEnd Sub |
COUNTIF Формула
Когато използвате Работен лист Функция.COUNTIF за да добавите сума към диапазон във вашия работен лист, се връща статична стойност, а не гъвкава формула. Това означава, че когато вашите цифри в Excel се променят, стойността, която е била върната от Работен лист Функция няма да се промени.
В горния пример процедурата е преброила количеството клетки със стойности в диапазон (D2: D9), където продажната цена е по -голяма от 6, и резултатът е поставен в D10. Както можете да видите в лентата с формули, този резултат е цифра, а не формула.
Ако някоя от стойностите се промени в диапазон (D2: D9), резултатът в D10 ще бъде НЕ промяна.
Вместо да използвате Работен листFunction.SumIf, можете да използвате VBA, за да приложите SUMIF функция към клетка, използвайки Формула или Формула R1C1 методи.
Метод на формулата
Методът на формулата ви позволява да посочите конкретно диапазон от клетки, например: D2: D9, както е показано по -долу.
123 | Sub TestCountIf ()Обхват ("D10"). Формула R1C1 = "= COUNTIF (D2: D9," "> 5" ")"End Sub |
Формула Метод R1C1
Методът FormulaR1C1 е по -гъвкав, тъй като не ви ограничава до определен диапазон от клетки. Примерът по -долу ще ни даде същия отговор като този по -горе.
123 | Sub TestCountIf ()Обхват ("D10"). Формула R1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")"End Sub |
За да направим формулата още по -гъвкава, бихме могли да променим кода така, че да изглежда така:
123 | Sub TestCountIf ()ActiveCell.FormulaR1C1 = "= COUNTIF (R [-8] C: R [-1] C," "> 5" ")"End Sub |
Където и да сте в работния си лист, формулата ще преброи клетките, които отговарят на критериите точно над него, и ще постави отговора във вашия ActiveCell. Обхватът във функцията COUNTIF трябва да бъде посочен чрез синтаксиса на ред (R) и колона (C).
И двата метода ви позволяват да използвате формули за динамичен Excel в рамките на VBA.
Сега ще има формула в D10 вместо стойност.
Текстът на вашата връзка