#ЗНАЧЕНИЕ! ошибка, возвращенная пользовательской средневзвешенной функцией - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь написать функцию в VBA, которая вычисляет средневзвешенное по времени значение, но появляется ошибка #VALUE!, когда я пытаюсь использовать эту функцию в своем рабочем листе.

При попытке отладки мне удалось проверить мой подход к изменению CurRPM путем итерации CurOffset и использования CurRng = rng.Offset(CurOffset, 0). Эффект изменения CurRng состоит в том, чтобы выполнить итерацию по столбцу RPM, проверяя, является ли ячейка под CurRng пустой, такой же, как CurRPM, или непустой и отличается от CurRPM.

Public Function TIMEAVERAGE(rng As Range) As Long

'Initializing Variables
Dim CurTime As Integer
Dim CurRPM As Integer
Dim CurSum As Integer
Dim CurOffset As Integer
CurOffset = 0
CurSum = 0

'The input cell is the first RPM
'The cell to the left of the input cell is the second RPM
CurTime = rng.Offset(0, -1)
CurRPM = rng

'Keep calculating as long as the cell below CurRng isn't empty
While IsEmpty(CurRng.Offset(1, 0)) = False
    'If the cell below has the same RPM, look at next cell
    If CurRng.Offset(1, 0) = CurRPM Then
        CurOffset = CurOffset + 1
        CurRng = rng.Offset(CurOffset, 0)
    Else:
        'Otherwise, add the previous RPM's contribution to the average
        'CurTime, as shown, is the start of the previous RPM
        CurSum = CurSum + CurRPM * (CurRng.Offset(0, -1) - CurTime)
        'Change CurRPM and CurTime for the new RPM
        CurRPM = CurRng.Offset(1, 0)
        CurTime = CurRng.Offset(0, -1)
        CurOffset = CurOffset + 1
        CurRng = rng.Offset(CurOffset, 0)
    End If

Wend

'Add the contributions of the final RPM
CurSum = CurSum + CurRPM * (CurRng.Offset(0, -1) - CurTime)

'Return the final TIMEAVERAGE
TIMEAVERAGE = CurSum / CurRng.Offset(0, -1)

End Function

Требуемый результат от этой программы возвращает 150, если пользователь вводит =TIMEAVERAGE(B2) для ячеек ниже. Вместо этого возвращается ошибка #VALUE!.

       A       B        
 ________________    
1|    Time | RPM
2|    0    | 100
3|    1    | 100
4|    2    | 100
5|    3    | 200
6|    4    | 200
7|    5    | 200
8|    6    | 200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...