Оператор IF, встроенный внутри массива

Я хочу, чтобы мой код прошел через лист, ища точку, в которой есть положительное значение d, за которым следует отрицательное значение d, затем выполните следующее уравнение, которое является CCT.

Он не будет признавать, что оператор IF фактически становится истинным при i=22, и вместо этого будет проходить весь цикл и дать мне деление на нулевую ошибку.

Любая помощь приветствуется.

Sub CCT()

'Variable Declarations

Dim us As ****** 'u coordinate of source
Dim vs As ****** 'v coordinate of source
Dim u(100) As ****** 'u coordinate of the isotemperature line
Dim v(100) As ****** 'v coordinate of the isotemperature line
Dim d(100) As ****** 'Distance between the source line and the isotemperature line
Dim t(100) As ****** 'Slope of the isotemperature line
Dim tt(100) As ****** 'Temperature
Dim i As Integer 'Counter
Dim d1 As ****** 'dj
Dim d2 As ****** 'dj+1
Dim tt1 As ****** 'tj
Dim tt2 As ****** 'tj+1
Dim CCT As ****** 'CCT

'Reading in the Variables

us = Worksheets("CCTIsotemp").Cells(10, 12).Value
vs = Worksheets("CCTIsotemp").Cells(10, 13).Value

'Doing the Math

 For i = 1 To 31
 u(i) = Worksheets("CCTIsotemp").Cells(9 + i, 4).Value
 v(i) = Worksheets("CCTIsotemp").Cells(9 + i, 5).Value
 t(i) = Worksheets("CCTIsotemp").Cells(9 + i, 6).Value
 tt(i) = Worksheets("CCTIsotemp").Cells(9 + i, 3).Value

 d(i) = ((vs - v(i)) - t(i) * (us - u(i))) / (1 + t(i) ^ 2) ^ 1 / 2



 If d(i) < 0 And d(i - 1) > 0 Then

 d1 = d(i - 1)
 d2 = d(i)
 tt1 = t(i - 1)
 tt2 = t(i)


 End If
 Next i

 CCT = ((1 / tt1) + (d1 / (d1 - d2)) * ((1 / tt2) - (1 / tt1))) ^ (-1)



 'write back

 Worksheets("CCTIsotemp").Cells(10, 15) = CCT
 Worksheets("CCTIsotemp").Cells(10, 16) = d1
 Worksheets("CCTIsotemp").Cells(10, 17) = d2
 Worksheets("CCTIsotemp").Cells(10, 18) = d(i)
 Worksheets("CCTIsotemp").Cells(10, 19) = i


End Sub
1 ответ

Поместите Exit For права перед вашим End If если вы хотите выйти из цикла For

If d(i) < 0 And d(i - 1) > 0 Then

 d1 = d(i - 1)
 d2 = d(i)
 tt1 = t(i - 1)
 tt2 = t(i)

Exit For
End If

licensed under cc by-sa 3.0 with attribution.