1

Я хотел бы выполнить функцию, которая выглядит следующим образом

Selection.FormulaArray = "=GEOMEAN(ABS((C646:E646)))"

Поскольку мой диапазон постоянно меняется, я хотел бы передать диапазон как переменную, которая выглядит следующим образом

Range1 = Range("C646", Range("C646").Offset(0, 2)).Address(False, False)
Selection.FormulaArray = "=GEOMEAN(ABS(Range1))"

Я получаю ошибку как #NAME?

Но если я пройду это так

x = Range("C646").Address(False, False)    
Y = Range("C646").Offset(0, 2).Address(False, False)    
Selection.FormulaArray = "=GEOMEAN(ABS((x:y)))"

Я получаю ошибку как # ЗНАЧЕНИЕ!

Может кто-нибудь помочь?

2 ответа2

1

Заменить строку Selection.FormulaArray = "=GEOMEAN(ABS(Range1))" в вашем коде со следующим:

Selection.FormulaArray = "=GEOMEAN(ABS(" & Range1 & "))"

Я не проверял это, но это кажется правильным. (Примечание: ваше соглашение об именах вводит в заблуждение, поскольку Range1 на самом деле является строкой, а не диапазоном.

0

ABS просто возвращает абсолютное значение для числа, а не диапазона. Возможно, вам нужна функция AVEDEV, которая возвращает среднее значение абсолютных отклонений точек данных от их среднего значения.

Для GEOMEAN вам нужно либо зациклить диапазон в коде, применяя ABS к каждому значению и создавая новый Range для передачи в функцию.

Или в соответствии с ответом StackOverflow используйте альтернативную формулу:

EXP(AVERAGE(LN(A1:A171)))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .