Другая альтернативная комбинация операторов выбора и if:
Также не проверено. Если вы публикуете некоторые образцы данных, их будет легче отлаживать.
В любом случае, вы можете нажать F8 и пройтись по коду, чтобы узнать, работает ли logi c.
РЕДАКТИРОВАТЬ: Скорректированы случаи, когда места = 3 (места = 4, пожалуйста, проверьте, как я кодирую предыдущие случаи)
Public Sub MonthCalc()
' Define objects
Dim sourceSheet As Worksheet
Dim chartSheet As Worksheet
Dim evalCell As Range
' Define other variables
Dim lastRow As Long
Dim chartColumn As Long
Dim chartRow As Long
Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
Set chartSheet = ThisWorkbook.Sheets("FAR117Chart")
lastRow = sourceSheet.Range("E2").End(xlDown).Row
For Each evalCell In Range("E2:E" & lastRow).Cells
If evalCell.Value = 2 Then
' Get the offset column in column F
chartColumn = evalCell.Offset(0, 1).Value - 1
Select Case evalCell.Offset(0, -2).Value
' Column e = 2, c >= 0, c <= 359
Case 0 To 359
chartRow = 5
' Column e = 2, c >= 400, c <=459
Case 400 To 459
chartRow = 6
' Column e = 2, c >= 500, c <=559
Case 500 To 559
chartRow = 7
' Column e = 2, c >= 600, c <=659
Case 600 To 659
chartRow = 8
' Column e = 2, c >= 700, c <=1159
Case 700 To 1159
chartRow = 9
' Column e = 2, c >= 1200, c <=1259
Case 1200 To 1259
chartRow = 10
' Column e = 2, c >= 1300, c <=1659
Case 1300 To 1659
chartRow = 11
' Column e = 2, c >= 1700, c <=2159
Case 1700 To 2159
chartRow = 12
' Column e = 2, c >= 2200, c <=2259
Case 2200 To 2259
chartRow = 13
' Column e = 2, c >= 2300, c <=2359
Case 2300 To 2359
chartRow = 14
End Select
ElseIf evalCell.Value = 3 Then
' Column e = 3, b >= 330, b <=767
If evalCell.Offset(0, -3).Value = 330 Or evalCell.Offset(0, -3).Value = 767 Then
' Get the offset column in column D
chartColumn = 2
Select Case evalCell.Offset(0, -2).Value
Case 0 To 559
chartRow = 18
Case 600 To 659
chartRow = 19
Case 700 To 1259
chartRow = 20
Case 1300 To 1659
chartRow = 21
Case 1700 To 2359
chartRow = 22
End Select
' Column e = 3, b >= 777, b <=787
ElseIf evalCell.Offset(0, -3).Value = 777 Or evalCell.Offset(0, -3).Value = 787 Then
' Get the offset column in column D
chartColumn = 0
Select Case evalCell.Offset(0, -2).Value
Case 0 To 559
chartRow = 18
Case 600 To 659
chartRow = 19
Case 700 To 1259
chartRow = 20
Case 1300 To 1659
chartRow = 21
Case 1700 To 2359
chartRow = 22
End Select
End If
ElseIf evalCell.Value = 4 Then
' Add conditionals
End If
'Cell G in the same line
evalCell.Offset(0, 2).Value = chartSheet.Range("B5").Offset(chartRow, chartColumn).Value
Next evalCell
End Sub
Дайте мне знать, если это поможет.