Cómo pasar datos de una lista con 138 filas a una ficha, tienen que salir 138 fichas una por fila, cada fila contiene 17 columns

He estado leyendo varias cosillas por esta web y otras para ver si encuentro la manera de hacer lo que necesito hacer y no encuentro nada y me estoy volviendo un poco loco.

Tengo una hoja de excel en la cual tengo 138 filas sin contar encabezados, 139 en total, con 17 columnas cada una.

Las 17 columnas son:

Localización (A2) ZV/AU (B2) ID (C2) Especie (D2) Perímetro (m) (E2) Altura (m) (F2) TIPO SUPERFICIE (G2) EDAD (H2) Defectos en copa (I2) Defectos en tronco (J2) Defectos en raíz (K2) Estructura (L2) Vitalidad (M2) Diana (N2) Riesgo (O2) Evolución esperada (P2) DESCRIPCIÓN (Q2)

Estos datos los tengo que pasar a una ficha en la cual no se sigue el mismo orden y para cada una de las 138 entradas es necesaria una ficha, la ficha lleva estos datos de esta manera:

Localización (B5)                    Defectos en copa (E5)

ZV/AU (B6)                                Defectos en tronco (E6)

ID (B7)                                       Defectos en raíz (E7)

Tipo superficie (B8)                Estructura (E8)

Especie (B9)                              Vitalidad (E9)

Perímetro (m)   (B10)              Diana (E10)

Altura (m) (B11)                       Riesgo (E11)

Edad relativa (B12)                  Evolución esperada (E12)

                            Descripción (A14)

Entre paréntesis os he puesto las celdas que debería ocupar el valor de cada campo.

A ver si me podéis echar un cable porque me veo el fin de semana haciendolo a mano... He creado un macro que me crea las 138 Fichas, me faltaría conseguir uno que me rellenara cada una con los valores correspondientes...

1 Respuesta

Respuesta
1

Entra al Editor, inserta un módulo y allí copia esta macro:

Sub creaFichas()
'x Elsamatilde
Dim ho1
Dim filx as long
'se recorren las filas de la hoja activa a partir de fila 2
Set ho1 = Sheets("Hoja1")      'AJUSTAR NOMBRE DE HOJA
[A2].Select
While ActiveCell <> ""      'ver *
'guardo la fila activa para tomar los datos
filx = ActiveCell.Row
'se crea la ficha
Sheets.Add                 'ver **
'aquí se colocan los datos de cada celda
[B5] = ho1.Cells(filx, 1)     'dato de col A    'ver ***
[B6] = ho1.Cells(filx, 2)     'dato de col B
[B7] = ho1.Cells(filx, 3)     'dato de col C
'completar el resto de las col
'vuelve a la hoja principal
ho1.Select
'pasa a la fila siguiente
Cells(filx + 1, 1).Select
'repite el bucle
Wend
End Sub

Dejé comentarios para guiarte. Solo completé los 3 primeros campos y debes continuar incrementando en 1 el argumento columna: 

Ho1. Cells(filx, 3) la próxima sería 4, 5 ... hasta la 17

Notas:

* Si la col A tendrá celdas vacías avisame para cambiar la instrucción de fin de rango.

** No le estoy dando nombre a la hoja creada... luego del ADD debieras agregar la instrucción, por ej :

ActiveSheet.Name =  "nombre"  

Sino las hojas se llamarán Hoja2, Hoja3, etc

***  Otro modo de escribir la celda destino:

Range("B2")     en lugar de [B2]      

Con esta macro debes eliminar las hojas que hayas creado con tu macro, lo lamento ;)

Sdos.

Elsa

* Todos los bucles en sección GuíasTemáticas

¡Gracias! me pongo con ello! =)

Gracias por la ayuda Matilde, 

He conseguido completar el código y me pasa todos los datos pero necesito que me los pase a un modelo concreto de ficha y lo que hace el macro es pasarlo a una hoja nueva uno tras de otro en filas, es posible que meta los datos en una hoja ya predefinida en las celdas correctas?

Yo creo que lo que hay que hacer de algún modo es que en el código copie como referencia en todo el bucle la hoja en la que esta la ficha vacía y la rellene con los datos, podría ser así? y si es así, como se haría?¿


Muchas gracias!

'... He creado un macro que me crea las 138 Fichas' Lamentablemente ya habías creado las fichas (por eso te comenté que quizás debias partir de un libro sin las fichas) ... la macro 'incorpora' esa tarea en la sección indicada con **

Sheets. Add

Esa instrucción se puede reemplazar por otra donde se indique en el bucle cual es la hoja que le corresponde... Comentame como se llaman las hojas ... si el nombre coincide con algún campo... o si debe ir llenando siguiendo el orden de las pestañas.

Sdos!

Gracias por responder tan rápido, la hoja que tiene que tomar de referencia para llenar esos valores se llama FichaAp Y tiene que meter en esa de referencia los valores que habíamos dicho y si cada pestaña debería ser una ficha nueva con sus datos correspondientes.

El Macro crea las 138 hojas con los datos correspondientes en la celda que les corresponde pero claro no dentro de la ficha que sería el caso...

¿Y si mejor me envias parte de la hoja de datos con 1 o 2 fichas? Porque aún no me aclaras cómo indicarle a la macro a qué ficha debe enviar los datos.

Tenemos estas situaciones:

1- Si utilizamos en la misma macro la creación de hojas allí mismo los envía... solo resta colocarle 1 línea para asignarle un nombre a la hoja creada.

2- ¿Ya están las fichas creadas? En ese caso ¿cómo se llaman? En lugar de Sheets. Add debes utilizar:

Set hox =Sheets(xxx)     y luego siguen las instrucciones de la macro enviada, anteponiendo la hoja:

hox.[B5] = ho1.Cells(filx, 1)     'dato de col A    'ver ***

Pero insisto: ¿cómo identificar las hojas?.... no me lo estás aclarando.

Mi correo: cibersoft.arg de gmail.com

Sdos!

Perfecto, pues te he enviado un excel con lo que creo que necesitas si necesitas algo más avísame, mil gracias de verdad!

Con el comando de seleccionar hoja hace lo que necesito pero como selecciono las hojas de la 1 a la 138 (se llaman así) 

Set hox=Sheets(xxx) que pongo en el xxx? si lo dejo en blanco no hace nada, si pongo 1 lo hace bien pero solo en la hoja 1, como haría para poner el intervalo de hojas 1 a 138 :)?

Te dejo el código del bucle completo. A continuación de [A2].Select va todo lo demás. Recuerda que mi código solo tiene el pase de un par de campos... debes agregar el resto que creo ya lo tienes.

nrox = 1
While ActiveCell <> ""      'ver *
'guardo la fila activa para tomar los datos
filx = ActiveCell.Row
'se selecciona la ficha
Sheets(nrox).select               'ver **
'aquí se colocan los datos de cada celda
[B5] = ho1.Cells(filx, 1)     'dato de col A    'ver ***
[B6] = ho1.Cells(filx, 2)     'dato de col B
[B7] = ho1.Cells(filx, 3)     'dato de col C
'completar el resto de las col
'vuelve a la hoja principal
ho1.Select
'pasa a la fila siguiente
Cells(filx + 1, 1).Select
'incrementa el nro de hoja
nrox = nrox + 1
'repite el bucle
Wend
End Sub

No recibí tu correo pero no creo que tengas inconvenientes en modificar el código.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas