Как работать с несмежным диапазоном при использовании COUNTIF в VBA UDF?

#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. Это отвечает на мой вопрос