Marcel: Como escribir una cadena de IF or Else

Necesito una macro que me filtre una columna solo si al escribir en una celda cumple con la condición.

Pero tengo Diez posibles condiciones para filtrar. No encuentro como condicionar y reconocer las posibles diez condiciones.

Esto es lo que tengo, pero si escribo 123X me sale el msjbox:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("b2") = "123X" Then
Call filtro
If Range("b2") = "456X" Then
Call filtro
Else
MsgBox "Intente nuevamente"
End If
End Sub

Respuesta
1

Es más fácil así:

Private Sub Worksheet_Change(ByVal Target As Range)
'Solo se ejecuta si se ha cambiado la celda B2'
If Not Intersect(Target, Range("B2")) Is Nothing Then
    'Mediante un Select Case controlamos el valor de B2
    Select Case Range("B2").Value
        'Pon todos los valores que quieres controlar, separados por coma'
        Case "123X", "456X": Call filtro
        'Esto se ejcuta cuando no es ninguno de los valores anteriores
        Case Else: MsgBox "Intente nuevamente"
    End Select
End If
End Sub

Si te ha valido la respuesta.

Había entendido que lo que controlabas eran diferentes valores, pero siempre se ejecutaba la misma macro.

Si quieres que se ejecuten diferentes macros, según el valor de A2, entonces pon esto:

Private Sub Worksheet_Change(ByVal Target As Range)
'Solo se ejecuta si se ha cambiado la celda B2'
If Not Intersect(Target, Range("B2")) Is Nothing Then
    'Mediante un Select Case controlamos el valor de B2
    Select Case Range("B2").Value
        'Pon un Case por cada macro que quieras que se ejecute (según valor de B2)'
        Case "123X": Call filtro
        Case "456X": Call filtro2
        'Esto se ejcuta cuando no es ninguno de los valores anteriores
        Case Else: MsgBox "Intente nuevamente"
    End Select
End If
End Sub

2 respuestas más de otros expertos

Respuesta
1

Encontré una solución, que fue crear otras macros hasta el total de condiciones que requiero:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("b2") = "123X" Then
Call filtro
ElseIf Range("b2") = "456X" Then
Call filtro2
Else
MsgBox "Intente nuevamente"
End If
End Sub

Respuesta
1

una solución más óptima en lugar de usar los If anidados usa la opción select case.  Seria así 

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myrstring as string

Myrstring = range("b2")

Select case myrstring 

Case  "123X" 
      Call filtro
Case "456X"
      Call filtro

Case "789...n"

      Call filtro 

Case else

      MsgBox "Intente nuevamente"

End select 

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas