У меня есть функция, которая возвращает цену акции за данный день. Если возвращаемое значение является пустым, то цикл «До» уменьшает дату на 1 и вызывает функцию снова с новой датой. Один раз До тех пор, пока не будет выполнено условие и цена не найдена, устанавливается значение 0.
Фрагмент кода ниже иллюстрирует, как работает рабочая версия этого кода:
Dim Date1 As Date
Dim r As Variant
Dim Price1 As Variant
Dim arg1 As Variant
Dim arg2 As Variant
Dim counter As Integer
r = Function1(arg1, arg2, Date1, Date1)
Price1 = r(0, 0)
Do Until IsEmpty(Price1) = False And counter <= 10
Date1 = Date1 - 1
counter = counter + 1
r = Function1(arg1, arg2, Date1, Date1)
Price1 = r(0, 0)
If counter = 10 Then
Price1 = 0
End If
Loop
Теперь я пытаюсь воссоздать этот код, чтобы я мог передать ему две даты и получить две разные цены для их соответствующих дней (также выполнив процедуру «До» в случае пустых результатов).
До сих пор я пытался использовать цикл «For» вместе с различными операторами «If» для правильной передачи аргументов, но ни один из них не сработал.
Моя последняя попытка вместе с логикой может быть замечена ниже:
На итерации 1 передайте Date1 в функцию, извлеките Price 1 и присвойте ее переменной PriceT.
На итерации 2 передайте Date2 в функцию, извлеките Price 2 и присвойте ее переменной PriceTX, затем цикл выхода.
Dim Dates(0 To 1) As Date
Dim Count As Integer
Dim counter, PriceT, PriceTX, arg1, arg2, x, y, j As Variant
For Count = 1 To 2
If Count = 1 Then j = Date1 Else j = Date2
x = Function1(arg1, arg2, j, j)
y = x(0,0)
Do Until IsEmpty(y) = False And counter <= 10
j = j - 1
counter = counter + 1
x = Function1(arg1, arg2, j, j)
y = x(0, 0)
If counter = 10 Then
y = 0
End If
Loop
If Count = 1 Then y = PriceT Else y = PriceTX
Next
Я хотел бы отметить, что я ищу аккуратное и высоко оптимизированное решение, я пытаюсь избежать дублирования рабочего кода и удвоения количества строк (хотя я знаю, что это будет работать, как я уже пытался она.)
Я не очень понимаю, как еще подойти к этому. Любые советы будут с благодарностью.