Eliminar filas en excel entre dos rangos

Tengo una hoja excel donde la macro busca la ultima celda sin ninguna fórmula desde O13

(Sub UltimaCelda_Columna()
'ULTIMA CELDA VACIA Y SIN FORMULA'
ActiveSheet.Range("O13").End(xlDown).Offset(0, 0).Select
End Sub

Quisiera continuarla para que elimine todas las filas vacías hacia arriba hasta encontrar la próxima celda con datos en la columna O

¿Alguna sugerencia?

1 respuesta

Respuesta
2

Prueba esto:

Sub UltimaCelda_Columna()
  Dim i As Long
  Application.ScreenUpdating = False
  For i = ActiveSheet.Range("O13").End(xlDown).Row To 13 Step -1
    If Range("O" & i).Value = "" Then
      Rows(i).Delete
    Else
      Exit For
    End If
  Next
  Application.ScreenUpdating = True
End Sub

Observaciones: Tienes pendiente valorar esta respuesta: Sumar archivos de una carpeta 

Hola Dante, no hace nada 

Ni siquiera se posiciona en la ultima celda 

Esta macro no necesita posicionarse en la última fila.

Lo que hace es empezar en la última fila y de ahí recorre hacia arriba, si la celda de esa fila, en la columna O está vacía, entonces elimina la fila, si tiene datos, entonces termina la macro.


Ahora, ¿dime hasta cuál fila tienes fórmulas?

El resultado de la fórmula es vacío o el resultado tiene espacios en blanco : " "

Me comentas.

Prueba esta macro y dime los resultados

Sub test()
  Dim u1 As Long, u2 As Long
  u1 = Range("O:O").Find("*", , xlValues, , xlByRows, xlPrevious).Row
  u2 = Range("O:O").Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
  MsgBox "última fila con valores : " & u1 & vbCr & _
         "última fila con fórmulas: " & u2
End Sub

Es una plantilla de factura, en la parte inferior te calcula base imponible

En la foto ves vacío las filas de la 15 a la 26, pero este espacio llega hasta la fila 100, ya que hay muchos conceptos

Con la macro que tenia colocada se posicionaba en la fila 100 y quisiera que eliminase todas las filas, (las cuales tienen fórmulas ) hasta que encuentre una celda con datos, en el caso que te muestro seria la fila 15

Te envié una macro de prueba.

Realiza una prueba y dime el resultado

Prueba esta macro y dime los resultados

Sub test()
  Dim u1 As Long, u2 As Long
  u1 = Range("O:O").Find("*", , xlValues, , xlByRows, xlPrevious).Row
  u2 = Range("O:O").Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
  MsgBox "última fila con valores : " & u1 & vbCr & _
         "última fila con fórmulas: " & u2
End Sub

Prueba esta otra macro

Sub borrar_datos()
  Dim r As Range
  Dim i As Long
  For i = 13 To Range("O" & Rows.Count).End(3).Row
    If Range("O" & i).Value = "" Then
      If r Is Nothing Then
        Set r = Range("A" & i)
      Else
        Set r = Union(r, Range("A" & i))
      End If
    End If
  Next
  If Not r Is Nothing Then
    r.EntireRow.Delete
  End If
End Sub

este es e error que da con la macro de test

He probado posteriormente la siguiente macro que me dices y no hace nada

Entonces no entiendo cómo tienes tus datos o tus fórmulas en la hoja

Puedes compartir tu archivo en dropbox o googledrive para revisarlo.

O pon aquí la fórmula que tienes en la celda O13

Necesito revisar tu fórmula para ver qué resultado regrea.

Me dice que está vacía.

No pude descargar el archivo, puedes compartir nuevamente el archivo y pegar aquí el enlace.

O envíame tu archivo a mi correo

[email protected]

Ya tengo tu correo. Ya vi tus fórmulas.

En un post anterior te pregunté esto:

El resultado de la fórmula es vacío o el resultado tiene espacios en blanco : " "

Debes responder mis dudas, para que esto funcione. Ayúdame a ayudarte, debes leer con atención lo que te pido.


Tu fórmula tiene un espacio en blanco:


De hecho todas tus fórmulas tienen espacio

=SI.ERROR(BUSCARV(A13,'DATOS MAESTROS'!A:E,2,0), " ")

=SI.ERROR(BUSCARV(A13,'DATOS MAESTROS'!A:E,5,0), " ")

=SI.ERROR(K13*M13," ")


Eso te va a ocasionar problemas en todas tus fórmulas. Lo recomendable es que pongas como resultado un vacío, es decir las comillas juntas:

Por ejemplo:

=SI.ERROR(BUSCARV(A13,'DATOS MAESTROS'!A:E,2,0), "")

=SI.ERROR(BUSCARV(A13,'DATOS MAESTROS'!A:E,5,0), "")

=SI(K13<>"",K13*M13,"")


Pero si no quieres cambiar tus fórmulas, entonces prueba esto:

Sub borrar_filas()
  Dim r As Range
  Dim i As Long
  For i = 13 To Range("M" & Rows.Count).End(3).Row
    If Range("M" & i).Value = " " Or Range("M" & i).Value = "" Then
      If r Is Nothing Then
        Set r = Range("A" & i)
      Else
        Set r = Union(r, Range("A" & i))
      End If
    End If
  Next
  If Not r Is Nothing Then
    r.EntireRow.Delete
  End If
End Sub

Ya hice la prueba en tu archivo y borra bien las filas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas