RSS

If Then betingelser i Excel VBA

Jeg kan se, at en del søger information om If-Then betingelser og konstruktioner i VBA, og da der åbenbart er et behov, har jeg skrevet denne begynderside om, hvordan man tester betingelser eller "prøver" med If-Then. En lignende måde at teste på er at bruge Select Case, som nok er at foretrække, hvis et udtryk skal testes for mange betingelser.

If Then

Stort set al programmering går ud på at teste et udsagn og så gøre et eller andet, hvis udsagnet er sandt eller falsk. En af de mest almindelige metoder er Hvis..Så eller If-Then prøven. Det kan helt enkelt være:

Sub TestUdsagn()

If Range("A1").Value > 0 Then
   'Aktion - gør noget
End If

End Sub

Her tester vi værdien i celle A1. Hvis den er større end nul, gør vi et eller andet.

Else

I eksemplet ovenfor sker der intet, hvis værdien er lig nul eller mindre. Det kan vi tage højde for med et lille "ellers", nemlig "Else":

Sub TestUdsagn()

If Range("A1").Value > 0 Then
   'Aktion - gør noget
Else
   'Gør noget andet
End If

End Sub

Nu er vi helgarderet - uanset værdien i celle A1, sker der noget. Men det kan jo sagtens tænkes, at det ikke er nok at teste, om værdien er større eller mindre end/lig med nul. I så fald kan vi udbygge med "Hvis ellers" - ElseIf:

Sub TestUdsagn()

Dim vMyVal

vMyVal = Range("A1").Value

If vMyVal > 0 Then
   'Aktion - gør noget hvis større end nul
ElseIf vMyVal = 0 Then
   'Aktion - gør noget andet hvis lig med nul
Else
   'Aktion - gør noget tredje hvis mindre end nul
End If

End Sub

Man kan have lige så mange ElseIf i rækkefølge, som man ønsker, men har man mange, bør man overveje at bruge en Select Case konstruktion i stedet.

Indlejrede tests

Man kan flette flere If-Then konstruktioner ind i hinanden. For eksempel:

Sub TestUdsagn()

Dim vMyVal

vMyVal = Range("A1").Value

'Hvis der står noget i cellen
If Len(vMyVal) > 0 Then
   'Er det en talværdi (numerisk)?
   If IsNumeric(vMyVal) Then
      If vMyVal > 0 Then
         'Aktion hvis større end nul
      Else
         'Aktion hvis =< 0
      End If
   Else
      'Aktion hvis det ikke er en talværdi
   End If
End If

End Sub

Her tester vi først, om celle A1 har et indhold (om længden er større end nul), og hvis den har det, afgøres vores aktion af, om det er en numerisk værdi eller ej. Hvis det er en numerisk værdi, afhænger handlingen af, om den er større end nul eller ej. Sådan kan man indflette masser af If-Then konstruktioner i hinanden, men det bliver nemt uoverskueligt.

Logiske operatorer "And" og "Or"

En styrke ved If-Then konstruktioner er, at man kan bruge logiske operatorer. "Logiske operatorer" dækker såmænd bare over "Og" eller "Eller". Tag følgende eksempel:

If Range("A1").Value > 0 And Range("A2").Value > 10 Then
   'Aktion
End If

Her er vores handling betinget af, at celle A1 har en værdi, der er større end nul, og at celle A2 er større end 10. Hvis ikke begge betingelser er opfyldt, sker der ikke noget. Hvis du erstatter det lille ord "And" med "Or", sker der noget, hvis A1 er større end nul, ELLER hvis celle A2 er større end 10.

Relateret: