Reorganizar fichero XLS importado desde fichero TXT con Macro

12/09/2006 - 13:21 por MarianoB | Informe spam
Hola grupo,

Tengo un fichero de Excel importado a partir de un fichero de texto que
quiero reorganizar de la siguiente manera:
La estructura del fichero es la siguiente:
Todos los datos, incluidas las cabeceras están en 5 columnas y hay
5 filas de titulo
30 filas de datos
5 filas de titulo
30 filas de datos
5 filas de titulo
30 filas de datos

El largo del fichero (en filas) es variable aunque siempre se termina
en una fila de datos

La estructura que pretendo conseguir es:
Primera, segunda y tercera fila de títulos desaparecen.
Cuarta fila permanece (titulo)
Datos de la quinta fila (titulo) permanece pero a la derecha de la
cuarta
Con los datos pasaría igual que con las 2 anteriores:
La primera fila de datos permanece y la segunda a su derecha
La tercera fila de datos permanece y la cuarta a su derecha
Así con todos los datos.
Al llegar a los siguientes títulos deben desaparecer las 5 filas y
repetir con los datos lo hecho anteriormente, es decir, que cada rango
de dos filas las deje en una fila (me refiero a que si hay 5 celdas en
2 filas deje una fila de 10 celdas)..
Y así hasta el final.

Podríais echarme una mano

Muchas gracias.
 

Leer las respuestas

#1 MarianoB
14/09/2006 - 10:54 | Informe spam
Hola Héctor,
He probado tu código y no hace lo que esperaba. :-((
He cambiado las primeras líneas para adaptarlo a lo que necesitaba
(porque en cierto modo lo que necesito es algo similar) pero luego
reconozco que me he "perdido".
Las líneas que he cambiado (por supuesto que algunas permanecen igual)
son:

Sub Reclasificando()
Application.ScreenUpdating = False
Dim Fila As Long, Grpo As Byte, Salto As Integer, Sig As Byte
[f1:j1] = Array([a4], [b4], [c4], [d4], [e4])
[k1:o1] = Array([a5], [b5], [c5], [d5], [e5])
With [f1]
For Fila = 6 To [a65536].End(xlUp).Row Step 35
Grupo = (Fila - 5) \ 35: Salto = Grupo * 20
For Sig = 1 To 30 Step 2
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, (Sig + 1) Mod 2) Range("a" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, (Sig + 2) Mod 2) Range("b" & Fila + Sig - 1)
y desde aquí es desde donde me he perdido.

Los datos originales serían así:

tit--A1 tit--A2 tit--A3 tit--A4 tit--A5
tit--B1 tit--B2 tit--B3 tit--B4 tit--B5
tit--C1 tit--C2 tit--C3 tit--C4 tit--C5
tit--D1 tit--D2 tit--D3 tit--D4 tit--D5
tit--E1 tit--E2 tit--E3 tit--E4 tit--E5
dat-11 dat-12 dat-13 dat-14 dat-15
dat-21 dat-22 dat-23 dat-24 dat-25
dat-31 dat-32 dat-33 dat-34 dat-35
dat-41 dat-42 dat-43 dat-44 dat-45
dat-51 dat-52 dat-53 dat-54 dat-55
dat-61 dat-62 dat-63 dat-64 dat-65
dat-71 dat-72 dat-73 dat-74 dat-75

y lo que pretendo sería:

tit--D1 tit--D2 tit--D3 tit--D4 tit--D5 tit--E1 tit--E2 tit--E3 tit--E4 tit--E5
dat-11 dat-12 dat-13 dat-14 dat-15 dat-21 dat-22 dat-23 dat-24 dat-25
dat-31 dat-32 dat-33 dat-34 dat-35 dat-41 dat-42 dat-43 dat-44 dat-45
... y a partir de aquí ya todo datos (eso en tu macro si lo hacía
bien).

De todas formas muchas gracias por la ayuda prestada hasta ahora






Héctor Miguel wrote:
hola, Mariano !

prueba la siguiente macro -> con una COPIA de tu archivo excel 'importado'... y...
si cualquier duda... informacion adicional... o algo se me ha escapado :-(( ... comentas ?
saludos,
hector.

Sub Reclasificando()
Application.ScreenUpdating = False
Dim Fila As Long, Grpo As Byte, Salto As Integer, Sig As Byte
[b1:c1] = Array([a4], [a5])
With [b1]
For Fila = 6 To [a65536].End(xlUp).Row Step 35
Grupo = (Fila - 5) \ 35: Salto = Grupo * 20
For Sig = 1 To 30 Step 2
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, (Sig + 1) Mod 2) = Range("a" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, Sig Mod 2) = Range("a" & Fila + Sig)
Next
Next
End With
Columns("a").Delete
End Sub

Preguntas similares