#excel #vba
#excel #vba
Вопрос:
У меня есть функция VBA, которую я написал, вызываемая CalculateOverStrings(Values as Range)
. Функция в основном принимает диапазон ячеек, содержащих строки, считает, что каждая из них соответствует различным условиям, например, содержит ли она букву «A» и т.д., И возвращает строковое значение. Я столкнулся с проблемой, когда я получаю только количество первого элемента в диапазоне, соответствующего условиям.
Как я это называю: CalculateOverStrings(INDIRECT({"A1", "B2", "D4"})
. В этом случае он вернет только результат COUNTIF, имеющий вид «A1».
Из моего исследования я понял, что это потому, что мне нужно использовать SUM
из COUNTIF
для работы с несколькими диапазонами. Однако я не могу заставить это работать в VBA.
Вот моя функция:
Function CalculateOverStrings(Values As Range) As String
Dim Result As Result
Dim NumA As Integer
NumA = Application.WorksheetFunction.Sum(Application.WorksheetFunction.CountIf(Values, "*a*"))
CalculateOverStrings = ResultToStr(ResultFromCount(NumA))
End Function
NumA
всегда заканчивается как 1
или 0
в зависимости от того, содержит ли первый диапазон, предоставленный функции, a
или нет. Как мне правильно применить SUM
в VBA для достижения того же результата, что и здесь и в других подобных вопросах?
Комментарии:
1. Либо передайте ParamArray и выполните цикл через него, или, если вы действительно настаиваете на передаче
Range
, назовите это так:=calculateoverstrings((A1,B5,D13))
и выполните цикл черезAreas
диапазон в вашем UDF.2. Спасибо @Rory. Это отвечает на мой вопрос