es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminar la fila i y la siguiente fila en VBA

Estoy buscando ejecutar un bucle for que detecte un valor cero y elimine las filas específicas. El problema que tengo es que la columna objetivo tiene celdas fusionadas (2 filas fusionadas).

El código de abajo funciona, pero solo elimina la primera de las dos filas, dejando la otra atrás. ¿Cómo puedo expandir i para incluir la siguiente fila hacia abajo?

Gracias de antemano.

Dim i As Long, Lr As Long
Lr = Range("A" & Rows.Count).End(xlUp).Row

For i = Lr To 1 Step -1
    If Range("O" & i).Value = "" Then GoTo NextI
    If Range("O" & i).Value = 0 And IsNumeric(Range("O" & i).Value) Then Rows(i).Delete

NextI:
Next i
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para expandir “i” e incluir la siguiente fila hacia abajo (cuando la columna objetivo son celdas fusionadas), puedes agregar una verificación adicional para verificar si la fila actual forma parte de un rango de celdas fusionadas y, si lo es, eliminar todo el rango. Aquí tienes un fragmento de código actualizado que incluye esta verificación:

        Dim i As Long, Lr As Long, MergeArea As Range
        Lr = Range("A" & Rows.Count).End(xlUp).Row
    
        For i = Lr To 1 Step -1
            If Range("O" & i).Value = "" Then GoTo NextI
    
            ' Verificar si la celda actual es parte de un rango de celdas fusionadas
            If Range("O" & i).MergeCells Then
                Set MergeArea = Range("O" & i).MergeArea
                ' Eliminar todo el rango de celdas fusionadas
                If WorksheetFunction.CountBlank(MergeArea) = MergeArea.Cells.Count Then
                    MergeArea.EntireRow.Delete
                End If
            Else
                ' Eliminar la celda individual
                If Range("O" & i).Value = 0 And IsNumeric(Range("O" & i).Value) Then
                    Rows(i).Delete
                End If
            End If
    
        NextI:
        Next i
    

    Este código verifica si la celda actual es parte de un rango de celdas fusionadas utilizando la propiedad MergeCells. Si lo es, verifica si todo el rango de celdas fusionadas está en blanco utilizando la función CountBlank. Si lo está, se elimina todo el rango de celdas fusionadas (es decir, toda la fila). Si la celda actual no es parte de un rango de celdas fusionadas, se elimina la celda individual si su valor es 0 y es numérico, como antes.

Comments are closed.