добавочный вложенный цикл if - PullRequest
0 голосов
/ 04 мая 2019

У меня есть фрагмент кода для выполнения вложенного оператора If. Легко вкладывать в Excel, но сложно в VBA.

Я хочу автоматизировать вложенное If в код, который может увеличиваться до последней строки и изменять диапазон при каждом проходе.
Я просмотрел ответы здесь, но в тупике.

Excel If - =IF(C2 > 1.42, A2, IF(D2 > 1.42, B2, "FAIL")).

Моя попытка VBA до сих пор:

Sub ResultData()
    If Range("C2").Value > 1.42 Then
       Range("E2") = Range("A2")

    ElseIf Range("D2").Value > 1.42 Then
        Range("E2") = Range("B2")

    Else: Range("E2") = "FAIL"

    End If
End Sub

Просто хочу, чтобы код выполнялся по строкам до последней строки, в данном случае по строке 53.

Current data

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Что-то вроде этого должно работать для вас:

Sub ResultData()
  For i = 2 to 53
    If Cells(i, 3).Value > 1.42 Then
      Cells(i, 5).Value = Cells(i, 1).Value
    ElseIf Range("D2").Value > 1.42 Then
      Cells(i, 5).Value = Cells(i, 2).Value
    Else
      Cells(i, 5).Value = "FAIL"
    End If
  Next
End Sub
0 голосов
/ 04 мая 2019

Поскольку на ваш вопрос уже дан ответ, я подумал, что мне следует сосредоточиться на передовой практике, которую вы должны принять.

Кроме того, поскольку был показан метод cells, я подумал, что было бы полезно также показать, как вместо этого работать с диапазонами.

Комментарии должны вести вас через основную логику.

Option Explicit 'Always add this line. It prevents you from using a variable without having declared it.
Sub ResultData()
Dim wb As Workbook 'declare a workbook variable which can hold a workbook object
Dim sht As Worksheet 'declare a worksheet variable which can hold a worksheet object
Dim i As Long 'declare a variable that will hold the row index. This should always be of type Long
Set wb = ThisWorkbook 'assign the workbook where your code is, to your workbook variable.
Set sht = wb.Worksheets("The name of your Worksheet") 'assign the worksheet where your data is, to your worksheet variable.

For i = 2 To 53 Step 1 'loop through rows 2 to 53
                                                    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If sht.Range("C" & i).Value > 1.42 Then         'Refer to ranges and cells by using explicit references to the                  '
        sht.Range("E" & i) = sht.Range("A" & i)     'worksheets to which they belong. So, sht.range("A1") refers to cell A1 of sht. '
    ElseIf sht.Range("D" & i).Value > 1.42 Then     'You can dynamically refer to a range by concatenating the column's index letter'
        sht.Range("E" & i) = sht.Range("B" & i)     'with a dynamically changing variable which represents the row's index.         '
    Else                                            'So sht.Range("D" & "3") for example refrs to sht.Range("D3").                  '
        sht.Range("E" & i) = "FAIL"                 '                                                                               '
    End If                                          '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Next i

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