Excel - crear macro de excel

 
Vista:

crear macro de excel

Publicado por rimera (2 intervenciones) el 27/01/2009 18:36:14
Buenas
Necesito modifcar un excel de la siguietne forma

nom dni domicilio cuarto baño
-------------------------------------------------------------------------------------------
leo 1 piso 8 3
leo 1 casa 5 2
juan 2 piso 9 2
juan 2 casa 5 1
juan 2 caravana 12 3

Y conseguir que tenga la forma:
nome dni piso/cuarto piso/baño casa/cuarto casa/baño caravana/cuarto caravana/baño

-------------------------------------------------------------------------------------------------------------------------
leo 1 8 3 5 2
juan 2 9 2 5 1 12 3

no se si se entiende, necesitaria ir recorriendo por dni y para cada valor de domicilio crear una columna si no existe y poñer el valor de cuarto.
Esto lo necesitaria crear en una nueva hoja de excell.

Para esto necisitaria unha macro? muchas gracias
pido un empujón para saber por donde empezar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:crear macro de excel

Publicado por Zeus (17 intervenciones) el 27/01/2009 19:25:17
Me gustaria saber como tienes ordenados tus datos:

Por ejemplo
A B C D
1 Leo 1 Piso 83
2 Leo 1 Casa 52
3 Juan 2 Piso 92
3 Juan 2 Piso 51
3 Juan 2 Caravana 123

Supongamos este orden
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear macro de excel

Publicado por Zeus (17 intervenciones) el 27/01/2009 20:54:41
Por ejemplo
...........A..................B................. C ...................D..................E
________________________________________________
1|....Nombre ....|...No......|.......Tipo.........|......No2.......Resultados
2|..... Leo...........|... 1........|..... Piso......... |..... 83 ..........
3|..... Leo...........|... 1........|.... Casa.........|......52 ..........
4|.... Juan..........|... 2........|..... Piso..........|......92 .........
5|.... Juan..........|... 2........|..... Piso..........|..... 51..........
6|.... Juan..........|... 2........|.. Caravana....|... 123 ........

Los puntos ( ..... ) y las ( | ) son para simular la hoja de excel porque los datos se mueven, crea una hoja nueva de excel y agregale el codigo de la presente macro
presionas ALT+F11 e Insertas un nuevo modulo y le pegas el presente codigo en el caso de "Sheet1" es el nombre de la hoja de datos si quieres los datos en Sheet2 pues cambiale el nombre.

Supuse que los datos estan ordenados como muestra el ejemplo y trate de nombrar las variables de manera que expliquen por si mismas su funcion, el codigo puede reducirce pero si vas empezando o no manejas mucho VBA quiza no lo entiendas este codigo te pondra el resultado de todos los nombres que encuentre en la colunma A, no puede haber renglones vacios.

Sale espero te sirva de hecho funciona bien ya lo probe
Si tienes duda enviame un mail
[email protected]

Public Sub Ordenar()
Dim Renglon As Integer
Dim RowControl As Integer
Dim Row As Integer
Dim Columna As Integer
Dim Nombre As String
Dim ArrayDatos() As Variant
Renglon = 2
Columna = 1
Row = 2
DimensiondeArray = 2
Do While Not IsEmpty(ThisWorkbook.Sheets("Sheet1").Cells(Renglon, Columna))
Do While Not IsEmpty(ThisWorkbook.Sheets("Sheet1").Cells(Row, 5))
Row = Row + 1
Loop
If InStrRev(ThisWorkbook.Sheets("Sheet1").Cells(Row - 1, 5), ThisWorkbook.Sheets("Sheet1").Cells(Renglon, Columna)) Then
GoTo OtroRenglon
Else
ReDim ArrayDatos(0 To 2)
ArrayDatos(0) = Trim(ThisWorkbook.Sheets("Sheet1").Cells(Renglon, Columna))
ArrayDatos(1) = Trim(ThisWorkbook.Sheets("Sheet1").Cells(Renglon, Columna + 1))
ArrayDatos(2) = Trim(ThisWorkbook.Sheets("Sheet1").Cells(Renglon, Columna + 3))
RowControl = Renglon + 1
Do While Not IsEmpty(ThisWorkbook.Sheets("Sheet1").Cells(RowControl, Columna))
If ArrayDatos(0) = Trim(ThisWorkbook.Sheets("Sheet1").Cells(RowControl, Columna)) Then
DimensiondeArray = DimensiondeArray + 1
ReDim Preserve ArrayDatos(0 To DimensiondeArray)
ArrayDatos(DimensiondeArray) = Trim(ThisWorkbook.Sheets("Sheet1").Cells(RowControl, Columna + 3))
End If
RowControl = RowControl + 1
Loop
For i = 0 To UBound(ArrayDatos)
ThisWorkbook.Sheets("Sheet1").Cells(Row, 5) = ThisWorkbook.Sheets("Sheet1").Cells(Row, 5) & ArrayDatos(i)
Next
End If
OtroRenglon:
DimensiondeArray = 2
Renglon = Renglon + 1
Loop
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear macro de excel

Publicado por Santiago (193 intervenciones) el 28/01/2009 04:23:40
Hola Rimera,
Te adjunto el archivo en esta direccion http://scuestam.tripod.com/domicilio_cuartos_banos.xls
Este archivo es mas facil con Tabla Dinamica y SIN macros ;-)

Un saludo desde Ambato, Ecuador
SCM
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear macro de excel

Publicado por rimera (2 intervenciones) el 28/01/2009 10:24:48
muchas gracias por vuestras respuestas.
Las estoy estudiando,pero creo q lo que necesito es hacer una macro.

Los datos que tengo son:
1 |nom |dni |domicilio |cuarto |baño|
2 | leo |1 |piso |8 |3 |
3 | leo | 1 |casa |5 |2 |
4 | juan | 2 |piso |9 |2 |
5 | juan | 2 |casa |5 |1 |
6 | juan | 2 |caravana |12 |3 |

Lo que necesito es que para la misma persona, identificada por dni, no repita filas, sino que cree nuevas colulmnas con los datos.
Siendo el resultado:
1 |nom |dni | piso/c | piso/b | casa/c | casa/b | car/c | car/b |
2 | leo | 1 |8 |3 |5 |2 | | |
3 | juan | 2 |9 |2 |5 |1 | 12 |3 |

Nota, debido a que no me coge en esta página pongo en las cabecera estos nombres
piso/c=piso/cuarto
piso/b=piso/baño
casa/c=casa/cuarto
casa/b=casa/baño
car/c=caravana/cuarto
car/b=caravana/baño

La información la tengo en una hoja llamada hoja1, y el resultado lo necesitaría en una hoja2.
La primera duda q tengo es como coger la información de la hoja1 para la hoja2?
muchas gracias.
si encuentro la solución la publicaré por si es solución para más personas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar