Saltar al contenido

Macro Selección Rango desde/hasta celda que contenga cierto valor


Recommended Posts

publicado

Estimad@s, buenos días.

Debo seleccionar un rango de celdas que contienen formulas desde la celda B2 hasta la I800 (B2:I800). Este rango varía de acuerdo a la información necesaria. Es decir que trae datos desde B2 hasta I3 y/o hasta I800. El tema es que las fórmulas siempre van hasta la I800 y no hasta el dato que quiero que seleccione. En este caso, el dato es un texto que es resultado de una fórmula. Cuando la fórmula no cumple cierta condición se muestra en blanco (" "). Pero para la Macro es una celda con datos. Entonces, cómo seleccionar hasta la última celda que contenga "x" dato que es el resultado de una fórmula. Debo seleccionar B2 hasta la última celda que contenga "Fin de Reporte" en la columna I.

Muchas gracias!

publicado

Hola.

Te propongo dos opciones:

Primera: Que seleccione solo las X omitiendo la celdas en blanco.

Sub SelectX()
    Dim cell As Range
    Dim firstAddress As String
    Dim rng As Range
    
    For Each cell In Range("B2:I1800")
        If cell.Value = "X" Then
            If rng Is Nothing Then
                Set rng = cell
            Else
                Set rng = Union(rng, cell)
            End If
        End If
    Next cell
    
    If Not rng Is Nothing Then rng.Select
End Sub

Segunda: Que seleccione todo el rango continuo abarcando todas las X y las celdas en blanco.

Sub SelectXContinuousAllColumns()
    Dim cell As Range
    Dim firstRow As Long
    Dim lastRow As Long
    Dim firstCol As Long
    Dim lastCol As Long
    
    firstRow = Range("B2:I1800").Rows.Count + 1
    lastRow = 0
    firstCol = Range("B2:I1800").Columns.Count + 1
    lastCol = 0
    
    For Each cell In Range("B2:I1800")
        If cell.Value = "X" Then
            If cell.Row < firstRow Then firstRow = cell.Row
            If cell.Row > lastRow Then lastRow = cell.Row
            If cell.Column < firstCol Then firstCol = cell.Column
            If cell.Column > lastCol Then lastCol = cell.Column
        End If
    Next cell
    
    If lastRow > 0 Then
        Range(Cells(firstRow, firstCol), Cells(lastRow, lastCol)).Select
    End If
End Sub

Por favor inserta un módulo y usa la que consideres que mejor se adapte a la ayuda solicitada.

Saludines

publicado

Lamento si parece que me voy a desquitar contigo, pero da la impresión que no intestaste aplicar la propuesta. Me gusta ayudar y lo que uno sugiere es susceptible de tener cambios, aunque parece que hoy en día más que ayuda necesitan la solución hecha.

Como hacía notar:

hace 55 minutos , Israel Cassales dijo:

Archivo de ejemplo.

Usé la X como ejemplo de "X dato", sería cuestión de que personalices.

Era cambiar esto:

If cell.Value = "X" Then

Por esto:

If cell.Value <> "" Then

Y de acuerdo a la prueba de la sentencia, ésta cumple con las condiciones que solicitas. Puedes observar que solo selecciona las celdas con "datos"

recording-2023-03-22-13-53-45.gif

 

Sería buena idea, para próximas solicitudes agregar el archivo de ejemplo, bien detallado desde el principio y así evitar ambigüedades para los posibles participantes.

Saludines_3

 

publicado

Israel, Muchísimas gracias por la ayuda! Me ha sido de mucha utilidad! Que estés bien

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.