Excel - Next for para loop

 
Vista:
sin imagen de perfil
Val: 34
Ha aumentado su posición en 8 puestos en Excel (en relación al último mes)
Gráfica de Excel

Next for para loop

Publicado por Guillermo (22 intervenciones) el 19/12/2021 16:36:35
Buenas tardes. Estoy intentando que una macro elimine las filas que tengan la celda vacía en cierta columna, usando el siguiente código:

Dim UltimaFila2 As String
UltimaFila2 = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row

For i = 1 To UltimaFila2
If Cells(i, 12).Value = "" Then
ActiveSheet.Cells(i, 12).EntireRow.Delete
End If
Next i


El problema está en que solo elimina la fila de la primera celda que encuentra vacía pero luego no sigue buscando las demás. Hay algo que deba corregir?

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Next for para loop

Publicado por Antoni Masana (2481 intervenciones) el 20/12/2021 15:56:31
Debes hacer el bucle al reves, de abajo a arriba.

1
2
3
4
5
6
7
8
9
Sub ....
    Dim UltimaFila2 As String
    UltimaFila2 = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
 
    For i = UltimaFila2 to 1 Step -1
        If Cells(i, 12).Value = "" Then
            ActiveSheet.Cells(i, 12).EntireRow.Delete
        End If
    Next i

Te funciona y te preguntas ¿Por qué funciona? Te voy a poner un ejemplo donde el número es la fila y la letra el contenido de la celda:

1
2
3
4
5
6
7
1  A
2
3
4  B
5
6
7  C

El tu código la variable del for i analiza la fila 1, esta llena, analiza la fila 2 esta vacía y la borra.
Este es el resultado

1
2
3
4
5
6
7
1  A
2
3  B
4
5
6  C
7

Y l siguiente que hace es saltar a la tres, pero fijate que la B antes de borrar estaba en la fila 4 ahora esta en la fila 3 y la fila 3 que antes estaba vacía ahora esta en la fila 2.

Otra solución al mismo problema:

1
2
3
4
5
6
7
8
9
Sub ....
    Dim UltimaFila2 As String
    UltimaFila2 = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
 
    For i = 1 To UltimaFila2
        While Cells(i, 12).Value = ""
            ActiveSheet.Cells(i, 12).EntireRow.Delete
        Wend
    Next i

Esta solución tiene un inconveniente y es que si la fila UltimaFila2 esta vacía el While entra en un bucle infinito.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar