Saltar al contenido

ELIMINAR VARIAS COLUMNAS EN RANGO DETERMINADO


Recommended Posts

publicado

Buenas, en la siguiente base de datos, la cual es bajada de un software contable, quisiera realizar un recorrido por las columnas E, hasta la ultima Columna Activa, en este caso es la columna M. ("como les dije es bajado de un software contable y para cada empresa puede ser diferente el numero de columnas"), la idea es realizar ese recorrido por el rango de columnas (E: hasta la ultima columna activa) y eliminar aquellas columnas que no tengas valores positivos, ya que en algunos casos en una columna sin valores me puede colocar la fecha o cualquier otro dato informativo que no se requiere.

 

BASE PRUEBA.xlsx

  • 2 weeks later...
publicado
Private Sub CommandButton1_Click(): Application.ScreenUpdating = False
    With Hoja2
        For x = .Cells(2, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If Cells(2, x) = "" Then Columns(x).Delete
        Next x
    End With
End Sub

Mira a ver si es esto lo que quieres hacer

image.gif

BASE PRUEBA.xlsm

publicado

muchas gracias por tu ayuda, pero en la hoja de prueba me funciona muy bien, pero copio el código  a la macro que estoy desarrollando para que a partir de donde me queda esta base me borre las columnas vacías o que cuya sumatoria no arroje valor numérico, ya que en algunas bases me introduce la fecha de generación del informe en columnas que también se deben eliminar, pero no corre, aun si solo son columnas vacías

Application.ScreenUpdating = False
    With Hoja2
        For x = .Cells(2, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If Cells(2, x) = "" Then Columns(x).Delete
        Next x
    End With
publicado

El archivo que subo tiene tres hojas, la primera es como lo saca el software, en la segunda elimino todos los formatos y le doy un autofiltro a las columnas y filas y en la tercera es como debe quedar, con el siguiente código me elimina las columnas que suman cero incluso la "D" de la hoja 2 que debería quedar como columna "B" que aparece en la hoja 3

  'definimos la ultima celda con datos de la columna A
    Range("A1").Select
    
    u = Range("A1048576").End(xlUp).Row
    
    'definimos la ultima columna activa
    ult = Range("XFD1").End(xlToLeft).Column
    
   Dim lastCol%, i%
    Application.ScreenUpdating = False: With Range(Cells(2, 2), Cells(u, ult)).Columns
    lastCol = .Count
    For i = lastCol To 1 Step -1
    If Application.Sum(.Item(i)) = 0 Then .Item(i).Delete xlShiftToLeft
    'Delete xlShiftToLeft
    Next
    End With: Application.ScreenUpdating = True

BASE PRUEBA 2.xlsx

publicado

Posible solución

Private Sub CommandButton1_Click(): Application.ScreenUpdating = False
    With Hoja1
        .Range("A1:S1").UnMerge
        .Range("G1:I1").Merge: .Range("D1:E1").Merge: .Range("M1:P1").Merge: .Range("R1:W1").Merge
        .Range("A1:R31").UnMerge
        For x = .Cells(2, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If Cells(2, x) = "" Then Columns(x).Delete
        Next x
        .Cells.EntireColumn.AutoFit
    End With
End Sub

 

image.gif

publicado

mucha gracias por el aporte, ahora debo probarlo en diferentes software que me distribuyen las columnas en forma diferente, por esta razon considere la macro para eliminar esas columnas y no lo hice de forma estatica.

nuevamente gracias

publicado

Si son diferentes software con diferentes columnas tendrías que subirlas para adaptar la a macro a todas ellas

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.