Seleccionar rangos discontinuos...

Expertos", al menos más que yo seguro, me considero que siempre estoy aprendiendo, je je... Llevo tiempo viendo el foro y por fin me he decidido a registrarme, con una gran duda, a ver si alguien me la saber resolver, al menos un poco...
Tengo una hoja excel con datos diversos, tengo macros para realizar distintas tareas con esos datos... Pero hay una que se me resiste... Estoy intentando seleccionar un rango de datos discontinuo, es decir, por ejemplo, en la columna A sólo pueden existir valores del tipo "SI", "NO", o la celda estar vacía, y lo que quiero es que mediante una macro me seleccione todas las filas donde en la columna A el valor sea por ejemplo "SI", sin que la macro se pare en las celdas vacías.
Esta selección la quiero guardar en una variable del tipo "Dim rangodiscont As Range", pues con ese "rangodiscont" voy a seguir haciendo otras operaciones...
¿Alguien sabe?

1 respuesta

Respuesta
1
Sub prueba()
    Dim RangoDiscont As Range
    Dim lngFila As Long
    With Worksheets("Hoja1") 'Poner el nombre real de la hoja
        For lngFila = 1 To .[A65536].End(xlUp).Row
            If .Cells(lngFila, 1).Value = "SI" Then
                If RangoDiscont Is Nothing Then
                    Set RangoDiscont = .Cells(lngFila, 1)
                Else
                    Set RangoDiscont = Union(RangoDiscont, .Cells(lngFila, 1))
                End If
            End If
        Next lngFila
    End With
    'Ahora el rango RangoDiscont tiene todas las celdas de la columna A cuyo valor es SI.
    'Demostración:
                   MsgBox "Celdas cuyo valor es SI en la columna A:" & vbNewLine & vbNewLine & RangoDiscont.Address(0, 0), vbInformation
    Set RangoDiscont = Nothing
End Sub
Agradezco mucho tu rápida respuesta, lo acabo de probar, pero me devuelve el error siguiente:
Se ha producido el error '91' en tiempo de ejecución: Variable de objeto o bloque With no establecido.
¿A qué se debe?
Muchas gracias.
Perdón, que me despisté y no lo puse, el error lo da sobre la línea del MsgBox.
El código estaba escrito pensando que SIEMPRE habría al menos una celda cuyo valor fuera SI en la columna A de la hoja. Si esto puede no ser así, habría que cambiarlo:
Sub prueba()
    Dim RangoDiscont As Range
    Dim lngFila As Long
    With Worksheets("Hoja1") 'Poner el nombre real de la hoja
        For lngFila = 1 To .[A65536].End(xlUp).Row
            If .Cells(lngFila, 1).Value = "SI" Then
                If RangoDiscont Is Nothing Then
                    Set RangoDiscont = .Cells(lngFila, 1)
                Else
                    Set RangoDiscont = Union(RangoDiscont, .Cells(lngFila, 1))
                End If
            End If
        Next lngFila
    End With
    'Ahora el rango RangoDiscont tiene todas las celdas de la columna A cuyo valor es SI.
    'Demostración:
                   Dim strCeldas As String
                   If RangoDiscont Is Nothing Then strCeldas = "Ninguna celda cumple el criterio." Else strCeldas = RangoDiscont.Address
                   MsgBox "Celdas cuyo valor es SI en la columna A:" & vbNewLine & vbNewLine & strCeldas, Buttons:=vbInformation
    Set RangoDiscont = Nothing
End Sub
Muchíiiiiiiisimas gracias!
Y si en lugar de un valor de "texto" (en la columna A), lo que tengo son valores numéricos, ¿o "verdadero/falso" procedentes de casillas de verificación? ¿Qué tengo que variar en el código, porque lo intento pero no me sale... grrrrrrr... por que´no podremos haber nacido aprendidos... je je...
Uy, perdón mi torpeza, lo del "verdadero/falso" es porque se comprueba con el ... valus=true/false.
Y con los números no problem
Muchísimas gracias, me ha solucionado muchísimos quebraderos de cabeza, je je.
Hace poco que conozco esta página, y la verdad que he aprendido bastante, me surgió este problema y resuelto, je je, muchísimas gracias, más que por resolverme el problema, porque he aprendido un poquito más desglosando y jugando con el código que me enviaste.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas