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 SubPodemos 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.