WorksheetFunction.AverageIf диапазона для включения условия на основе cell.interior.color - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь найти среднее значение для столбца с неопределенным числом (i) значений (диапазон может быть от 3 до 20 ячеек в столбце I, строка 24 до неопределенного числа - j = 23 + i). Код ранее включал только стандартную функцию усреднения.

Теперь я бы хотел усреднить те ячейки в заданном диапазоне, включая только те ячейки в предлагаемом диапазоне. Следовательно, игнорируя идентифицированные выбросы, которые выше и / или ниже LFe, UFe. Расположение этого усредненного значения составляет Range("E" & m).

Возможно ли это даже в данной функции рабочего листа? И если да, что мне нужно изменить, чтобы это работало?

Я пытался использовать существующие решения, основанные на таких условиях, как «в среднем только положительные ячейки» или «только те, которые не включают N / A», но, похоже, он не работает.

example of data

'Identifying outliers based on interquartile range
qe1 = Application.Quartile(Range("E24:E" & j), 1)
qe3 = Application.Quartile(Range("E24:E" & j), 3)
IQRe = qe3 - qe1
UFe = qe3 + (IQRe * 1.5)
LFe = qe3 - (IQRe * 1.5)

'[EDIT] Currently I have it as follows:
Range("E" & m).Value = Application.WorksheetFunction.AverageIfs(Range("E24:E" & j), "<" & UFe, Range("E24:E" & j), ">" & LFe, Range("E24:E" & j))

Что возвращает: # ЗНАЧЕНИЕ! без функции .WorksheetFunction и «error run» 424 «Требуется объект», как написано выше.

Единственная опция, которая работала, НО без моих диапазонов переменных, это форматировать ее следующим образом: (Как это иначе можно адаптировать для работы с диапазонами моих переменных, включая 'j' и т. Д .?)

Range("E" & m).Select
ActiveCell.FormulaR1C1 = "=AVERAGEIF(R[-6]C[4]:R[-3]C[4],"">""& 4.3,R[-6]C[4]:R[-3]C[4])"

1 Ответ

0 голосов
/ 12 апреля 2019

Недостаточно повторений, чтобы комментировать (извините!), Но вот несколько идей, которые у меня были:

1) Как уже упоминал SJR, если есть числовое значение, вы основываете цветовую кодировку из, вы можете использовать это в своем коде вместо цвета.Я думаю, что UFe & LFe - это верхний и нижний пороги.Таким образом, вы могли бы просто иметь ячейки с формулами, чтобы автоматизировать UFe & LFe с помощью формул, а затем использовать «AVERAGEIFS».

2) В качестве альтернативы вы можете вместо этого интегрировать свои переменные в «.formula», например:

Sheet1.Range("E" & m).Formula = "=AVERAGEIFS($E$24:$E$" & j & ",$E$24:$E$" & j & ","">" & LFe & """,$E$24:$E$" & j & ",""<" & UFe & """)"

Просто измените «Sheet1» на любой лист, на который вы ссылаетесь

...