Un lector preguntaba por una forma de eliminar columnas por grupos en Excel de manera masiva:
La solución la obtendremos con una sencilla macro de Excel, que nos permitirá eliminar esos grupos de 7 en 7 columnas indicadas por el usuario empezando por la derecha o por la izquierda.
En la ventana de código de nuestra hoja de trabajo incluimos el siguiente evento:
Podemos comprobar como para los datos del ejemplo, seleccionando las columnas E:Y, según la selección de Izda-Dcha o bien Dcha-Izda, el resultado de las columnas eliminadas (o que permanecen) es diferente.
Si elegimos Izda-Dcha deberán permanecer las columnas L y T (con valores 8 y 16):
Si elegimos de Dcha-Izda deberían permanecer las columnas J y R (con valores 6 y 14):
[...]No soy muy experto en programación 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. Es decir que la rutina debe eliminar 7 columnas 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 descifrar como puedo organizar lo que necesito. Agradezco toda ayuda que me puedan dar[...] |
La solución la obtendremos con una sencilla macro de Excel, que nos permitirá eliminar esos grupos de 7 en 7 columnas indicadas por el usuario empezando por la derecha o por la izquierda.
En la ventana de código de nuestra hoja de trabajo incluimos el siguiente evento:
Sub ElimnarColumnas() Dim ColEliminar() As Integer 'definimos la Matriz/Array Dim Start As Integer, Final As Integer Dim col As Integer 'Preguntamos por el rango de columnas... Set Rango = Application.InputBox("Selecciona el rango (fila) de análisis", "Selecciona rango", Selection.Address, , , , Type:=8) 'identificamos el número de columna de Inicio y Final Start = Rango.Item(1).Column Final = Rango.Columns.Count + Start - 1 'redimensionamos el tamaño de la Array ReDim ColEliminar(1 To Final - Start + 1) As Integer 'comprobamos se ha seleccionado un rango continuo y único. If Rango.Areas.Count > 1 Then MsgBox "No es posible seleccionar un rango discontinuo!!." Exit Sub End If inicio: 'preguntamos por el sentido del barrido Sentido = InputBox("Indica el sentido o inicio del rango (Izda-Dcha o Dcha-Izda)", "Inicio del borrado", "Izda-Dcha") If Sentido = "Izda-Dcha" Then 'en primer lugar identificamos los números de columna a eliminar x = 0 For i = Start To Final Step 1 x = x + 1 If (x Mod 8) <> 0 Then ColEliminar(x) = i End If Next i 'recorremos los valores de la matriz de derecha a izquierda For col = (Final - Start + 1) To 1 Step -1 On Error Resume Next ActiveSheet.Columns(ColEliminar(col)).Delete Shift:=xlShiftToLeft On Error GoTo 0 Next col ElseIf Sentido = "Dcha-Izda" Then x = 1 For i = Final To Start Step -1 If (x Mod 8) <> 0 Then ActiveSheet.Columns(i).Delete Shift:=xlShiftToLeft End If x = x + 1 Next i Else 'en caso de no coincidir la respuesta con nada 'volvemos a preguntar GoTo inicio End If End Sub
Podemos comprobar como para los datos del ejemplo, seleccionando las columnas E:Y, según la selección de Izda-Dcha o bien Dcha-Izda, el resultado de las columnas eliminadas (o que permanecen) es diferente.
Si elegimos Izda-Dcha deberán permanecer las columnas L y T (con valores 8 y 16):
Si elegimos de Dcha-Izda deberían permanecer las columnas J y R (con valores 6 y 14):
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.