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.

Preguntas similare

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

Respuesta Responder a este mensaje
#2 MarianoB
14/09/2006 - 16:04 | Informe spam
Finalmente he conseguido (gracias al ejemplo que expuso Héctor Miguel)
lograr lo que quería por el tradicional metodo de "prueba/error". Lo
que ocurre es que no entiendo bien el código y si cambian el número
de filas de títulos o de filas de datos en otro fichero que quiera
reorganizar casi empezaría de nuevo desde 0.
El código final, por si le sirve a alguien, es:

Sub HM_modificada()
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) Mod 2) Range("b" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 1 + (Sig) Mod 2) Range("c" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 2 + (Sig) Mod 2) Range("d" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 3 + (Sig) Mod 2) Range("e" & Fila + Sig - 1)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 4 + Sig Mod 2) Range("a" & Fila + Sig)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 5 + Sig Mod 2) Range("b" & Fila + Sig)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 6 + Sig Mod 2) Range("c" & Fila + Sig)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 7 + Sig Mod 2) Range("d" & Fila + Sig)
.Offset(Fila - 6 + (Sig + 1) / 2 - Salto, 8 + Sig Mod 2) Range("e" & Fila + Sig)
Next
Next
End With
Columns("a:e").Delete
End Sub

Muchas gracias Héctor Miguel.
Respuesta Responder a este mensaje
#3 Gabriel Raigosa
30/09/2006 - 18:43 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA



Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"MarianoB" escribió en el mensaje
news:
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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida