Necesito seleccionar solo celdas con datos válidos

NOMBRE              CANTIDAD

AAA                              11

BBB                                10

AAA                               12

CCC                                12

#N/D                         #N/D

#N/D                         #N/D

Como puedo crear una macro que solo seleccione los datos válidos y después los copie en otro lugar

Respuesta
2

También es posible realizar la tarea manualmente, ya que es muy sencilla.

Selecciona la col A (o la que necesites), menú Datos, Filtro.

Quitas el tilde a todas las opciones que no quieras mostrar (en ese caso N/D)

Estando la primera celda seleccionada, presiona la tecla Shift y selecciona la última de la última columna, para seleccionar todo el rango resultante.

CTRL C para copiar. Seleccionar celda de destino y CTRL V para Pegar.

Si esta tarea será repetitiva, y necesitas una macro, podrías encender la Grabadora de macros para que te grabe todos los pasos. Luego solo queda ajustar las referencias.

Te invito a mirar el video Nº 62 de mi canal: La Grabadora de Macros.....

2 respuestas más de otros expertos

Respuesta
2
Sub SeleccionarDatosValidos()
    Dim ws As Worksheet
    Dim sourceRange As Range
    Dim destRange As Range
    Dim lastRow As Long
    Dim i As Long
    ' Cambia "Sheet1" al nombre de la hoja donde están tus datos
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ' Define el rango de la columna "NOMBRE" desde la fila 2 hasta la última fila con datos
    lastRow = ws.Cells(ws.Rows.Count, "NOMBRE").End(xlUp).Row
    Set sourceRange = ws.Range("NOMBRE2:NOMBRE" & lastRow)
    ' Filtra y copia solo los datos válidos en la columna "NOMBRE" y "CANTIDAD"
    For i = 1 To sourceRange.Cells.Count
        If Not IsError(sourceRange.Cells(i)) And Not IsEmpty(sourceRange.Cells(i)) Then
            If Not sourceRange.Cells(i).Text = "#N/D" Then ' Filtra "#N/D" en la columna "NOMBRE"
                If Not IsError(sourceRange.Cells(i).Offset(0, 1)) Then
                    If Not IsEmpty(sourceRange.Cells(i).Offset(0, 1)) Then
                        If Not sourceRange.Cells(i).Offset(0, 1).Text = "#N/D" Then ' Filtra "#N/D" en la columna "CANTIDAD"
                            If destRange Is Nothing Then
                                Set destRange = sourceRange.Cells(i).Resize(1, 2)
                            Else
                                Set destRange = Union(destRange, sourceRange.Cells(i).Resize(1, 2))
                            End If
                        End If
                    End If
                End If
            End If
        End If
    Next i
    ' Copia los datos válidos en otra hoja (cambia "Hoja2" al nombre de la hoja destino)
    If Not destRange Is Nothing Then
        destRange.Copy Destination:=ThisWorkbook.Worksheets("Hoja2").Range("A1")
    End If
    ' Limpia el Portapapeles después de copiar los datos
    Application.CutCopyMode = False
End Sub

La macro seleccionará solo las celdas con datos válidos en la columna "NOMBRE" y "CANTIDAD" de la hoja especificada (en este caso, "Sheet1"). Luego, copiará esos datos válidos en otra hoja del mismo libro (en este caso, "Hoja2"). Puedes cambiar el nombre de las hojas según tus necesidades.

Recuerda que esta macro filtrará las celdas que no contienen errores y no están vacías en ambas columnas. También filtrará las celdas que no contienen el texto "#N/D" en la columna "NOMBRE" y "CANTIDAD".

Respuesta
1

Revisa los siguientes

https://youtu.be/Bn-xtarwrsk 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas