VBA вложенный IF в Excel - PullRequest
       2

VBA вложенный IF в Excel

0 голосов
/ 24 января 2019

Я относительно новичок в VBA. Я пытаюсь написать код для вложенных IF в VBA. У меня есть следующий код, но вывод неправильный. Как заставить вложенную функцию работать?

    Private Sub CommandButton1_Click()


  If Range("H2") = 1 Then
     Range("X3") = "$CT$10:$CT$150"

       If Range("H2") = 2 Then
     Range("X3") = "$CZ$10:$CZ$150"

      If Range("H2") = 3 Then
     Range("X3") = "$DF$10:$DF$150"

     If Range("H2") = 4 Then
     Range("X3") = "$DL$10:$DL$150"

     If Range("H2") = 5 Then
     Range("X3") = "$DR$10:$DR$150"

     If Range("H2") = 6 Then
     Range("X3") = "$DX$10:$DX$150"

     If Range("H2") = 7 Then
     Range("X3") = "$ED$10:$ED$150"

     If Range("H2") = 8 Then
     Range("X3") = "$EJ$10:$EJ$150"

     If Range("H2") = 9 Then
     Range("X3") = "$EP$10:$EP$150"

     If Range("H2") = 10 Then
     Range("X3") = "$EV$10:$EV$150"

     If Range("H2") = 11 Then
     Range("X3") = "$FB$10:$FH$150"

     If Range("H2") = 12 Then
     Range("X3") = "$FH$10:$FH$150"



  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If



End Sub

Код как-то работает, только если H2 = 1. В противном случае он не работает.

Ответы [ 5 ]

0 голосов
/ 24 января 2019

Ваши дела - целые числа подряд.Просто поместите его в массив:

Private Sub CommandButton1_Click()

    Dim addresses As Variant

    addresses = Array("$CT$10:$CT$150", "$CZ$10:$CZ$150", "$DF$10:$DF$150", "$DL$10:$DL$150", _
                    "$DR$10:$DR$150", "$DX$10:$DX$150", "$ED$10:$ED$150", "$ED$10:$ED$150", _
                    "$EJ$10:$EJ$150", "$EP$10:$EP$150", "$EV$10:$EV$150", "$FB$10:$FH$150", "$FH$10:$FH$150")

    Range("X3").Value = addresses(Range("H2").Value - 1)

End Sub
0 голосов
/ 24 января 2019

Сделайте шаг назад - у вас есть заданное расстояние между каждым столбцом, в зависимости от значения H2.

Вам не нужно IF или Select Case, только небольшая арифметика:

Sub t()
Dim startCol As Long, tmpCol As Long

startCol = 98 ' This is the `CT` Column

With Worksheets("Sheet1") ' Change as needed
    tmpCol = startCol + 6 * (.Range("H2").Value - 1)

    Dim rng As Range
    Set rng = .Range(.Cells(10, tmpCol), .Cells(150, tmpCol))
    .Range("X3").Value = rng.Address
End With

End Sub
0 голосов
/ 24 января 2019

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

If Range("H2") = 1 Then
    Range("X3") = "$CT$10:$CT$150"
ElseIf Range("H2") = 2 Then
    Range("X3") = "$CZ$10:$CZ$150"
ElseIf Range("H2") = 3 Then
    Range("X3") = "$DF$10:$DF$150"

...

End If

Однако в вашей ситуации я бы посоветовал использовать select case, чтобы код выглядел чище и легче для чтения.

0 голосов
/ 24 января 2019

Для чего-то подобного мне нравится использовать Select Case:

Private Sub CommandButton1_Click()
    With Worksheets("Sheet1") ' change to your sheet
        Select Case .Range("H2")
            Case 1
                .Range("X3") = "$CT$10:$CT$150"
            Case 2
                .Range("X3") = "$CZ$10:$CZ$150"

            '... The rest

            Case Else
                .Range("X3") = ""
        End Select
    End With
End Sub
0 голосов
/ 24 января 2019

Синтаксис оператора IF-THEN-ELSE в Microsoft Excel:

If condition_1 Then
   result_1

ElseIf condition_2 Then
  result_2

...

ElseIf condition_n Then
   result_n

Else
   result_else

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