Создать функцию для среднего заданного диапазона в VBA - PullRequest
0 голосов
/ 21 февраля 2019

Пожалуйста, помогите!

Мне нужно создать функцию в VBA, которая позволяет мне возвращать среднее значение на основе указанного диапазона ячеек.

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

enter image description here

Вот функция VBA, которая у меня есть до сих пор, но я не могу ее получитьработа на всех:

VBA:

Function SpecialAVERAGE(rng As Range, LowerBound As Integer, UpperBound As Integer) As Double

Dim Origin As Range
Dim Total As Double
Dim Count As Integer
Dim Lower As Long
Dim Upper As Long
Dim A As Long
Dim B As Long

Set Origin = ActiveCell

For Each Cell In rng
    Lower = Range(Cell.Offset(-LowerBound, 0), Cells(Origin.Row, 1))
    A = wf.Sum(Lower)
    Upper = Range(Cell.Offset(UpperBound, 0), Cells(Origin.Row, 1))
    B = wf.Sum(Upper)
    Total = Total + Cell.Value + A + B
    Count = Count + 1

Next Cell

SpecialAVERAGE = Total / Count

End Function

Любое направление с благодарностью!Я понимаю, что = AVERAGE (OFFSET (....))) может помочь с этим, но я также не нашел решения там.

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Не нужно слишком усложнять - просто используйте нижнюю и верхнюю границу, чтобы расширить значения строк для WorksheetFunction.Average, и используйте одну ячейку (вместо целого столбца) для контрольного диапазона:

Function SPECIALAVERAGE(rng As Range, LowerBound As Integer, UpperBound As Integer) As Double

    SPECIALAVERAGE = WorksheetFunction.Average(Range(Cells(rng.Row - LowerBound, rng.Column), Cells(rng.Row + UpperBound, rng.Column)))

End Function

img1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...