Veremos un caso interesante propuesto por un lector, y es que se plantea la posibilidad de eliminar fácilmente una serie de columnas concretas dentro de un rango especificado.
Por ejemplo, partamos del siguiente modelo de 11 columnas (A:F), donde únicamente queremos eliminar las columnas: A, D y F.
Sabemos lo complejo que suele ser trabajar e identificar columnas, ya que éstas aparecen nombradas con letras, y normalmente los bucles se realizan con valores numéricos.
En la explicación siguiente aprovecharemos las ventajas de las matrices (Array) para salvar esta dificultad, y homgeneizar los valores a comparar.
Insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:
El proceso es simple, identificamos qué columnas deseamos eliminar con la matriz de constantes:
matriz = Array("A", "D", "F")
y luego realizamos un proceso de loop de izquierda a derecha entre las columnas del rango a tratar, para evitar errores en la eliminación. en ese recorrido comparamos si la columna coincide con alguna de las indicadas a eliminar.
El proceso acaba con el resultado esperado, con las columnas A, D y F eliminadas:
Por ejemplo, partamos del siguiente modelo de 11 columnas (A:F), donde únicamente queremos eliminar las columnas: A, D y F.
Sabemos lo complejo que suele ser trabajar e identificar columnas, ya que éstas aparecen nombradas con letras, y normalmente los bucles se realizan con valores numéricos.
En la explicación siguiente aprovecharemos las ventajas de las matrices (Array) para salvar esta dificultad, y homgeneizar los valores a comparar.
Insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:
Sub ElimnarColumnas() 'Columnas a eliminar matriz = Array("A", "D", "F") nUltCol = Range("A1:K1").Columns.Count 'recorremos de izquierda a derecha las columnas del rango For i = (nUltCol - 1) To 0 Step -1 'comparamos cada columna del rango 'con la matrriz de columnas a eliminar For x = 0 To UBound(matriz) 'identificamos el número de columna a eliminar NumCol = Cells(1, matriz(x)).Column 'y comparamos con la posición de columna en que estamos.. If i = NumCol Then 'si coincide, estamos posicionados en una columna a eliminar ActiveSheet.Columns(i).Delete Shift:=xlShiftToLeft End If Next x Next i End Sub
El proceso es simple, identificamos qué columnas deseamos eliminar con la matriz de constantes:
matriz = Array("A", "D", "F")
y luego realizamos un proceso de loop de izquierda a derecha entre las columnas del rango a tratar, para evitar errores en la eliminación. en ese recorrido comparamos si la columna coincide con alguna de las indicadas a eliminar.
El proceso acaba con el resultado esperado, con las columnas A, D y F eliminadas:
Muy bien explicado. Puede modicar el codigo para que pregunte las columnas que se desean borrar y también tenga la opción de salir,saludos,johnmor41
ResponderEliminarHola,
Eliminaren realidad habría que preguntar dos cosas, el rango sobre el que trabajar:
nUltCol = Range("A1:K1").Columns.Count
para determinar la última columna y el listado de columnas..
La idea es algo larga, pero habría que generar un UserForm con las diferentes opciones, para luego recuperar los valores seleccionados como variables y emplearlos en el código de arriba...
También se podría intentar con algún INPUTBOX.
Creo lo más sencillo sería modificar la línea de código ;-)
Saludos
Hola, buen dia, excelente foro. No soy muy experto en programacion de VB y he tratado de basarme en esta rutina para eliminar columnas de una hoja de excel donde hay 7 columnas ocultas que no requiero y el archivo es bastante extenso en numero de columnas.
ResponderEliminarEs decir que la rutina debe eliminar 7 colunnas y luego se salta una y elimina otras 7 teniendo como limite e inicio una ubicacion especifica.
En la rutina anterior esta la base pero no logro decifrar como puedo organizar lo que necesito.
Agradezco toda ayuda que me puedan dar.
Saludos
Gonzalo
Hola Gonzalo,
Eliminarel asunto no es sencillo, ya que primero habría que cargar en alguna Array cuáles son las columnas a eliminar, mediante un bucle por las columnas de tu rango de datos...
una vez identificadas, habría que realizar un recorrido inverso (como el del ejemplo) para ir eliminando dichas columnas.
Una forma de identificar las columnas a eliminar para la primera carga podría ser comparar el resultado de la función múltiplo con el número de columna...
Escribiré y subiré al post una posible solución en cuanto me sea posible.
Slds
Muy bueno.
ResponderEliminaruna pregunta, me da error al poner un rango de columnas juntas. No sería así?: "CD: FF" EJEMPLO
Hola Alfredo,
Eliminarpara eliminar columnas seguidas no hace falta la macro anterior (está pensada para columnas discontinuas), en tu caso basta:
Columns("CD:FF").Delete Shift:=xlToLeft
saludos
Gracias Ismael, pero en el mismo excel tengo que eliminar muchas que están continuas aparte de las discontinuas. ¿no se puede mezclar en la misma línea.
Eliminarvarias columnas continuas y discontinuas
EliminarRange("B:D,G:G,J:J,M:M").Delete Shift:=xlToLeft
saludos
Una consulta, necesitaría el paso inverso, el paso serçia seleccionar las columnas que me interesan por nombre; ya que lo extraigo de una base de datos que va cambiando el orden, pero no el nombre de las columnas.
ResponderEliminarsupongo tendrás una Tabla en una hoja...
EliminarEn ese caso tendrás que borrar una por una:
Range("Tabla1").ListObject.ListColumns("campo3").Delete
así solo borrarás el campo completo de esa tabla
Saludos