VBA: как мне сослаться на предыдущее значение переменной, которую я сгенерировал? - PullRequest
0 голосов
/ 15 октября 2019

Я только начал использовать VBA и столкнулся с этой проблемой: я сгенерировал значения для новой переменной, используя цикл for, и мне было интересно, можно ли вычесть предыдущее значение этой переменной из текущего значения этой переменной? Я попытался использовать смещение, но оно не работает (вероятно, потому что смещение можно использовать только для правильных диапазонов). Любая помощь и совет будут оценены! Я также приложил свой код для справки каждого.

Function test(Price As Range)
    Dim Pos, Neg, Count, MF_ratio, MF_index, Tar_price, Flow As Long

    Dim day As Range

    For Each day In Price

        Tar_price = (day.Value + day.Offset(0, -1).Value + day.Offset(0, -2).Value) / 3

        Flow = Tar_price * day.Offset(0, 2).Value

'This is where the problem starts, I want to compare the previous value stored in the variable 'Flow' with the current value stored in 'Flow'

        If Flow.Value > Flow.Offset(-1, 0).Value Then

            Pos = Pos + Flow

    Next day

    test = Pos
End Function

Обновление: введите описание изображения здесь Я пытаюсь подвести итог денежного потока (столбец K) для последних 14 записей, если денежный поток в текущей строке больше, чем в предыдущей строке. Я действительно понятия не имею, что пошло не так с кодом!

Function test(Price As Range)
Dim Pos, Count, Tar_price, Flow, Old_flow As Long
Dim day As Range
Count = 1
For Each day In Price
Tar_price = (day.Value + day.Offset(0, -1).Value + day.Offset(0, -2).Value) / 3
Old_flow = Flow
Flow = Tar_price * day.Offset(0, 2).Value
If Count > 1 Then
If Flow > Old_flow Then
Pos = Pos + Flow
End If
End If
Count = Count + 1
Next day
test = Pos

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Не напрямую. Вам нужна вторая переменная, в которую вы передаете старое значение перед его заменой:

Dim Flow As Long, OldFlow AS Long

' Some of your code here...

OldFlow = Flow 'Save the old value
Flow = Tar_price * day.Offset(0, 2).Value

' More of your code here...

If Flow > OldFlow Then 'Compare old with new

    Pos = Pos + Flow

End If 'This line is VERY important!  Do not forget it!
0 голосов
/ 15 октября 2019

вы можете превратить Tar_price в функцию, принимающую диапазон day в качестве параметра, к которому вы можете добавить Offset(-1) при необходимости:

Function test(Price As Range)
    Dim Pos As Long, Neg As Long, Count As Long, MF_ratio As Long, MF_index As Long, Flow As Long
    Dim day As Range

    For Each day In Price
        Flow = Tar_price(day) * day.Offset(0, 2).Value
        If Flow > Tar_price(day.Offset(-1, 0)) * day.Offset(-1, 2).Value Then Pos = Pos + Flow
    Next

    test = Pos
End Function


Function Tar_price(day As Range) As Long
    Tar_price = (day.Value + day.Offset(0, -1).Value + day.Offset(0, -2).Value) / 3
End Function

КСТАТИ 1: вы должны явно объявить все типы переменныхили предполагается, что они Variant типа

Кстати 2: похоже, вам не нужны переменные Neg, Count, MF_ratio и MF_index

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