Explicación de funcionamiento de esta macro para copiar filas a otra hoja con condición

Para Dante Amor.

Buenos días. Te adjunto una macro que me creaste y que funciona a la perfección. Con el ánimo de seguir aprendiendo macros en Excel, me gustaría que me explicaras con detalle por líneas cómo funciona, especialmente las líneas en negrita, pues me pierdo un poco en la sintaxis.

Muchas gracias

Sub CopiarFilas()

'Por.Dante Amor

   Set h1 = Sheets("Datos")

   Set h2 = Sheets("Q1")

   Set h3 = Sheets("Territorio")

   '

   u3 = h3.Range("B" & Rows.Count).End(xlUp).Row + 1

   If u3 < 4 Then u3 = 4

   h3.Range("A4:N" & u3).ClearContents

   dato = h1.[C1]

   If dato = "" Then

       MsgBox "Falta la condición a buscar en la hoja " & h1.Name

       Exit Sub

   End If

   '

   Set r = h2.Range("B4:B" & h2.Range("B" & Rows.Count).End(xlUp).Row)

   Set b = r.Find(dato, lookat:=xlWhole)

   If Not b Is Nothing Then

       celda = b.Address

 

       Do

           'detalle

           u3 = h3.Range("B" & Rows.Count).End(xlUp).Row + 1

           If u3 < 4 Then u3 = 4

           h2.Range("A" & b.Row & ":N" & b.Row).Copy h3.Range("A" & u3)

           Set b = r.FindNext(b)

       Loop While Not b Is Nothing And b.Address <> celda

   End If

   MsgBox "Filas copiados"

End Sub

1 Respuesta

Respuesta
1

H o l a: Te regreso el código con comentarios

Sub CopiarFilas()
'Por.Dante Amor
    'Establecer en objetos las hojas
   Set h1 = Sheets("Datos")
   Set h2 = Sheets("Q1")
   Set h3 = Sheets("Territorio")
   '
    'obtener la última fila de la hoja territorio según la columna B
   u3 = h3.Range("B" & Rows.Count).End(xlUp).Row + 1
    'si la última fila es menor a 4 entonces u3 = 4
    'eso es para que al momento de limpiar no limpie abajo de la fila 4
   If u3 < 4 Then u3 = 4
    'se limpia el rango de celdas
   h3.Range("A4:N" & u3).ClearContents
    'variable dato igual al valor de la celda C1 de la hoja datos
   dato = h1.[C1]
   If dato = "" Then
       MsgBox "Falta la condición a buscar en la hoja " & h1.Name
       Exit Sub
   End If
   '
    'se establce un rango de busqueda en la hoja Q1, que va desde la celda b4
 'y hasta B - última celda con datos de la hoja Q1 columna B
   Set r = h2.Range("B4:B" & h2.Range("B" & Rows.Count).End(xlUp).Row)
    'se buscar el dato en el rango
   Set b = r.Find(dato, lookat:=xlWhole)
    'si existe el dato
   If Not b Is Nothing Then
        'se inicia la variable celda con la primera dirección de celda encontrada
       celda = b.Address
        'empieza el ciclo para buscar el dato todas las veces que exista en el rango
       Do
           'detalle
            'obtiene la última fila con datos de la hoja territorio y le suma uno
            'de esa forma se identifica la prifera fila vacía
           u3 = h3.Range("B" & Rows.Count).End(xlUp).Row + 1
            'si la última fila es menor 4 entonces la primera fila vacía será 4
           If u3 < 4 Then u3 = 4
            'se copia el rango de la hoja q1 a ala hoja territorio
           h2.Range("A" & b.Row & ":N" & b.Row).Copy h3.Range("A" & u3)
            'se busca otra vez
           Set b = r.FindNext(b)
            'si ya no encontró nada o encontró nuevamente la primer celda encontrada
            'entonces termina el ciclo de buscar
       Loop While Not b Is Nothing And b.Address <> celda
   End If
   MsgBox "Filas copiados"
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas