Instrucción If...Then...ElseIf...Then...Else statement

Ejecuta condicionalmente un grupo de instrucciones, según el valor de una expresión.Conditionally executes a group of statements, depending on the value of an expression.

SintaxisSyntax

**If **_condition _Then [statements] [**Else **elsestatements]If condition Then [ statements ] [ Else elsestatements ]


O bien, puede usar la sintaxis del formulario de bloque:Or, you can use the block form syntax:

If condition ThenIf condition Then
[ instrucciones ][ statements ]
[ ElseIf condition-n Then[ ElseIf condition-n Then
[ elseifstatements ]][ elseifstatements ]]
[ Else[ Else
[ elsestatements ]][ elsestatements ]]
End IfEnd If


La sintaxis de la instrucción If...Then...Else consta de estas partes:The If...Then...Else statement syntax has these parts.

PartPart DescripciónDescription
conditioncondition Obligatorio.Required. Uno o más de los siguientes tipos de expresiones:One or more of the following two types of expressions:

Una expresión numérica o expresión de cadena que se evalúa True o False.A numeric expression or string expression that evaluates to True or False. Si condición es Null, la condición se considera False.If condition is Null, condition is treated as False.

Una expresión del tipo de TypeOf objectname es objecttype.An expression of the form TypeOf objectname Is objecttype. El objectname es cualquier objeto de referencia y objecttype, cualquier tipo de objeto válido.The objectname is any object reference, and objecttype is any valid object type. La expresión es true si objectname es del tipo de objeto especificado por objecttype; de lo contrario, es false.The expression is True if objectname is of the object type specified by objecttype; otherwise, it is False.
instruccionesstatements Opcional en el formulario de bloque; obligatorio en el de una línea que no tiene cláusula Else.Optional in block form; required in single-line form that has no Else clause. Una o más instrucciones separadas por dos puntos; se ejecutan si condición es True.One or more statements separated by colons; executed if condition is True.
condition-ncondition-n Opcional.Optional. Igual que condición.Same as condition.
elseifstatementselseifstatements Opcional.Optional. Una o más instrucciones se ejecutan si la condition-n asociada es True.One or more statements executed if associated condition-n is True.
elsestatementselsestatements Opcional.Optional. Una o más instrucciones se ejecutan si ninguna condición o condition-n previa es True.One or more statements executed if no previous condition or condition-n expression is True.

ObservacionesRemarks

Puede usar el formulario de una línea (primera sintaxis) para pruebas cortas y sencillas.You can use the single-line form (first syntax) for short, simple tests. Sin embargo, el formulario de bloque (segunda sintaxis) proporciona más estructura y flexibilidad que el de una línea y, normalmente, es más fácil de leer, mantener y depurar.However, the block form (second syntax) provides more structure and flexibility than the single-line form and is usually easier to read, maintain, and debug.

Note

Con el formulario de una línea, es posible ejecutar varias instrucciones como resultado de una decisión If...Then.With the single-line form, it is possible to have multiple statements executed as the result of an If...Then decision. Todas las instrucciones deben estar en la misma línea y separadas por dos puntos, como se muestra en la siguiente instrucción:All statements must be on the same line and separated by colons, as in the following statement:

If A > 10 Then A = A + 1 : B = B + A : C = C + B 

Una instrucción If de formulario de bloque debe ser la primera instrucción en una línea.A block form If statement must be the first statement on a line. Las partes de la instrucción Else, ElseIf y End If pueden tener solo un número o una etiqueta de línea delante.The Else, ElseIf, and End If parts of the statement can have only a line number or line label preceding them. El bloque If debe terminar con una instrucción End If.The block If must end with an End If statement.

Para determinar si una instrucción es un bloque If o no, mire qué sigue a la palabra clave Then.To determine whether or not a statement is a block If, examine what follows the Then keyword. Si algo que no sea un comentario aparece después de Then en la misma línea, la instrucción se trata como una instrucción If de una línea.If anything other than a comment appears after Then on the same line, the statement is treated as a single-line If statement.

Lac cláusulas Else y ElseIf son opcionales.The Else and ElseIf clauses are both optional. Puede tener tantas cláusula ElseIf como desee en un bloque If, pero ninguna puede aparecer después de una cláusula Else.You can have as many ElseIf clauses as you want in a block If, but none can appear after an Else clause. Las instrucciones If en bloque se pueden anidar, es decir, que unas pueden contener a las otras.Block If statements can be nested; that is, contained within one another.

Al ejecutar un bloque If (segunda sintaxis), se pone a prueba condición.When executing a block If (second syntax), condition is tested. Si condición es True, entonces se ejecutan las instrucciones posteriores a Then.If condition is True, the statements following Then are executed. Si condición es False, se evalúan todas las condiciones ElseIf (si corresponde) por separado.If condition is False, each ElseIf condition (if any) is evaluated in turn. Cuando se encuentra una condición True, se ejecutan las instrucciones que vienen inmediatamente después del Then al que se asocian.When a True condition is found, the statements immediately following the associated Then are executed. Si ninguna de las condiciones ElseIf son True (o si no hay ninguna cláusula ElseIf), se ejecutan las instrucciones posteriores a Else.If none of the ElseIf conditions are True (or if there are no ElseIf clauses), the statements following Else are executed. Después de ejecutar las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción posterior a End If.After executing the statements following Then or Else, execution continues with the statement following End If.

Tip

Select Case puede resultar más útil al evaluar una única expresión que tiene varias acciones posibles.Select Case may be more useful when evaluating a single expression that has several possible actions. Sin embargo, la cláusula TypeOf objectname Is objecttype no puede usarse con la instrucción Select Case.However, the TypeOf objectname Is objecttype clause can't be used with the Select Case statement.

Note

TypeOf no se puede usar con tipos de datos duros como Long, Integer, etc., distintos de Object.TypeOf cannot be used with hard data types such as Long, Integer, and so forth other than Object.

EjemploExample

En este ejemplo, se muestran los formularios de bloque y de una línea de la instrucción If...Then...Else.This example shows both the block and single-line forms of the If...Then...Else statement. También se muestra el uso de If TypeOf... Then... Else.It also illustrates the use of If TypeOf...Then...Else.

Dim Number, Digits, MyString 
Number = 53 ' Initialize variable. 
If Number < 10 Then 
 Digits = 1 
ElseIf Number < 100 Then 
' Condition evaluates to True so the next statement is executed. 
 Digits = 2 
Else 
 Digits = 3 
End If 
 
' Assign a value using the single-line form of syntax. 
If Digits = 1 Then MyString = "One" Else MyString = "More than one" 


Use la construcción If TypeOf para determinar si el control que se ha pasado a un procedimiento es un cuadro de texto.Use the If TypeOf construct to determine whether the Control passed into a procedure is a text box.

Sub ControlProcessor(MyControl As Control) 
 If TypeOf MyControl Is CommandButton Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is CheckBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is TextBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 End If 
End Sub

Vea tambiénSee also

Soporte técnico y comentariosSupport and feedback

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación?Have questions or feedback about Office VBA or this documentation? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.