Generamos siete números aleatorios entre 1 y 10 en las celdas del rango B4:H4. En la celda amarilla (B6) generamos otro número en el mismo rango y deseamos conocer si este valor se encuentra entre los siete números generados de la fila 4.
Veamos varias formas de abordar el caso práctico con macros de VBA para Excel.
Caso 1
El primer caso imprime en la celda C6 la frase 'Se ha encontrado' cuando el valor de la celda B6 coincide con alguno de los siete números de la fila 4. En la fila 4 pueden darse valores repetidos como se puede ver en la imagen siguiente.
El inconveniente de este método reside en que cuando la celda amarilla no coincide con ninguno de los números de la fila 4, en la celda C6 no se imprime nada, ya que no se entra dentro del condicional
if
en ningún momento. Nos gustaría que si no encuentra coincidencia pusiera una frase indicando que así ha sido. Pero no podemos incluir en el condicional if
un else
ya que al analizar los siete números cada vez que uno de ellos no coincida con la celda amarilla escribiría la frase indicando que no coinciden. Esto supondría un funcionamiento incorrecto del código. Veamos el segundo caso donde esto se soluciona con la ayuda de una variable booleana.Sub rastrea()
For i = 1 To 7
Cells(4, i + 1) = Int(Rnd() * 10) + 1
Next i
n = WorksheetFunction.RandBetween(1, 10)
Range("B6") = n
Range("C6").ClearContents
For i = 1 To 7
If Cells(4, i + 1) = n Then
Range("C6") = "Se ha encontrado"
End If
Next i
End Sub
Caso 2
distintos
que se inicializa como True
. Esto supone que de entrada supondremos que los valores son distintos. Por tanto, supondremos inicialmente que no existe coincidencia de valor entre la celda amarilla y las siete previas de la fila cuatro. Nos metemos en un bucle for
que recorre las siete posiciones comprobando con un condicional if
si existe coincidencia. Si se detecta alguna coincidencia la variable lógica distintos se torna en False
. Finalmente, fuera del bucle, añadimos un nuevo condicional if
que analizará si la variable booleana distintos es verdadera y en caso afirmativo imprimirá en la celda B6 la frase 'NO se ha encontrado'.Observe que en el último condicional
if
no es necesario poner como condición distintos=True
, ya que la variable lógica ya es en si misma True
o False
.Sub analiza()
Dim distintos As Boolean
distintos = True
For i = 1 To 7
Cells(4, i + 1) = Int(Rnd() * 10) + 1
Next i
n = WorksheetFunction.RandBetween(1, 10)
Range("B6") = n
Range("C6").ClearContents
For i = 1 To 7
If Cells(4, i + 1) = n Then
distintos = False
Range("C6") = "Se ha encontrado"
End If
Next i
If distintos Then
Range("C6") = "NO se ha encontrado"
End If
End Sub
Caso 3
Sub noEncontradoPorDefecto()
For i = 1 To 7
Cells(4, i + 1) = Int(Rnd() * 10) + 1
Next i
n = WorksheetFunction.RandBetween(1, 10)
Range("B6") = n
Range("C6") = "NO se ha encontrado"
For i = 1 To 7
If Cells(4, i + 1) = n Then
Range("C6") = "Se ha encontrado"
End If
Next i
End Sub
No hay comentarios:
Publicar un comentario