Для расчета средневзвешенного я использую следующий простую пользовательскую функцию VBA код:VBA - использовать видимые ячейки только для средневзвешенного UDF
Function wgtavg(values As Range, weights As Range)
wgtavg = WorksheetFunction.SumProduct(values, weights)/WorksheetFunction.Sum(weights)
End Function
Я хочу функцию, которая учитывает только видимые ячейки - Может кто-нибудь предложить решение ?
редактировать: Я понял это:
Function wgtavg(values As Range, weights As Range)
counter = 0
xSumproduct = 0
xSum = 0
For Each xVal In values
counter = counter + 1
If xVal.Rows.Hidden = False Then
If xVal.Columns.Hidden = False Then
xSumproduct = xSumproduct + (xVal * weights(counter))
xSum = xSum + weights(counter)
End If
End If
Next
wgtavg = xSumproduct/xSum
End Function
Кажется работать, но я не знаю, как интегрировать проверку видимости весов.
слишком сложным, я имею в виду, что это слишком сложно развивать это самостоятельно. Если вы опубликуете что-то, я думаю, что смогу это понять. –
Что вы хотите, чтобы вычисление было, если 'values' содержит 10 ячеек, из которых 1 и 3 скрыты, а' weightights 'содержит 9 ячеек, из которых 7, 8 и 9 скрыты? (Или несколько более простой пример, когда оба диапазона содержат одинаковое количество ячеек, но разные скрыты. Или еще более простой случай, когда оба диапазона содержат одинаковое количество не скрытых ячеек, но все еще в разных местах.) – YowE3K
Оба аргументы, значения и веса должны содержать одинаковое количество ячеек. Если нет, то это ошибка. Как только один аргумент скрыт, продукт значения (this) weight * (this) не добавляется к функции. Мой опубликованный код работает только в том случае, если значения скрыты ... –