Macro para acomodar datos

22/07/2008 - 17:45 por Manny_90 | Informe spam
Que tal.

Mil disculpas por hacer el mensaje tan largo.
Me gustaria que me ayudaran a desarrollar una macro para acomosar una serie
de datos.
En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des,
D1-Qty, E1-Item Description. En la columna de Ref des tiene la lista de las
locaciones existentes de un numero de parte (R1, R2, R3, etc), lo que me
gustaria hacer es separar esa informacion , es decir, que la macro cree otra
hoja y acomode la misma informacion (apartir del numero de parte de nivel 0)
pero con los "REF DES" listados en los renglones correspondientes, es decir,
si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los
ref des con la misma informacion del numero de parte, el resultado seria mas
o menos como una base de datos. abajo hice una tabla de ejemplo y otra tabla
como me gustaria tener el resultado. Pueden tomar estos datos y pegarlos en
una hoja de calculo para que tengan mejor vision de la tabla.

OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o
tres letras como LED1, LED2; Todos los datos estan separados por una coma. Y
notese tambien de que no tiene espacios.

Muchas gracias AMIGOS
Saludos desde Chihuahua Mexico


Level Item Number Ref Des Qty Item Description
0 SAA5966-07 1 SUB ASSY, SHADOWCAT MAIN BOARD
1 01-0000-C1 R126,R132,R143,R185,R186,R218,R258,R275,R276,R279 10 RES, 0.00,
0.1W, FILM, 0603
1 01-0000-D1 R28,R29,R31,R32,R33,R38,R40,R106,R108,R127,R150,R169,R239,R270,R272,R280 16 RES, 0.00, 0.0625W, FILM, 0402
1 01-0001-D1 R184 1 RES, 68.1K, 0.0625W, 1%, FILM, 0402
1 01-0004-A1 RP2,RP5,RP8,RP9,RP16 5 RES ARRAY, 33, 0.0625W, 5%, FILM, SM,
0402X4
1 01-0018-D1 R144 1 RES, 2.32K, 0.0625W, 1%, FILM, 0402
1 01-0024-D1 R213 1 RES, 40.2K, 0.0625W, 1%, FILM, 0402
1 01-0027-A1 RP11,RP12,RP13,RP14 4 RES ARRAY, 75, 0.0625W, 5%, FILM, SM,
0402X4, CONVEX
1 01-0034-F1 R68 1 RES, 0.035, 0.25W, 1%, FILM, 1206
1 01-0068-01 1 RES, 0.068, 1W, 1%, FILM, 2512
1 01-1000-01 R273 1 RES, 10, 0.25W, 5%, FILM, 1206
1 01-1000-B1 R161,R163,R167 3 RES, 10, 0.125W, 5%, FILM, 0805
1 01-1000-C1 R201 1 RES, 10, 0.1W, 5%, FILM, 0603



La informacion la quiero aarreglar para tener un resultado asi:

Level Item Number Ref Des Qty Item Description
0 SAA5966-07 1 SUB ASSY, SHADOWCAT MAIN BOARD
1 01-0000-C1 R126 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R132 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R143 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R185 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R186 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R218 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R258 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R275 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R276 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-C1 R279 1 RES, 0.00, 0.1W, FILM, 0603
1 01-0000-D1 R28 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R29 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R31 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R32 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R33 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R38 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R40 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R106 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R108 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R127 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R150 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R169 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R239 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R270 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R272 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0000-D1 R280 1 RES, 0.00, 0.0625W, FILM, 0402
1 01-0001-D1 R184 1 RES, 68.1K, 0.0625W, 1%, FILM, 0402
1 01-0004-A1 RP2 1 RES ARRAY, 33, 0.0625W, 5%, FILM, SM, 0402X4
1 01-0004-A1 RP5 1 RES ARRAY, 33, 0.0625W, 5%, FILM, SM, 0402X4
1 01-0004-A1 RP8 1 RES ARRAY, 33, 0.0625W, 5%, FILM, SM, 0402X4
1 01-0004-A1 RP9 1 RES ARRAY, 33, 0.0625W, 5%, FILM, SM, 0402X4
1 01-0004-A1 RP16 1 RES ARRAY, 33, 0.0625W, 5%, FILM, SM, 0402X4

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/07/2008 - 01:20 | Informe spam
hola, !

el siguiente ejemplo "asume" que ha existe una "Hoja2", OJO que siempre se eliminan sus datos y se reemplazan por la macro:

Sub Lista_partes()
Dim Fila As Integer, Level As Byte, iNumber As String, RefDes As String, Qty As Integer, iDesc As String
With Worksheets("hoja2")
.Cells.Clear: .Range("a1:e1") = Array("Level", "Item Number", "Ref Des", "Qty", "Item Description")
End With
With Worksheets("hoja1")
For Fila = 2 To .Range("a65536").End(xlUp).Row
Level = .Range("a" & Fila)
iNumber = .Range("b" & Fila)
RefDes = .Range("c" & Fila)
Qty = .Range("d" & Fila)
iDesc = .Range("e" & Fila)
With Worksheets("hoja2")
With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
.Offset() = Level
.Offset(, 1) = iNumber
.Offset(, 2) = Application.Transpose(Split(RefDes, ","))
.Offset(, 3) = 1
.Offset(, 4) = iDesc
End With
End With
Next
End With
Worksheets("hoja2").Range("a1:e1").EntireColumn.AutoFit
End Sub

OJO: la funcion de vba "Split" requiere de VBA6 (excel 2000 en adelante)
si piensas utilizarla en la version 97 de excel (VBA5) deberas proveerla, poniendo al inicio de tu modulo lo siguiente:

#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des, D1-Qty, E1-Item Description.
En la columna de Ref des tiene la lista de las locaciones existentes de un numero de parte (R1, R2, R3, etc)
lo que me gustaria hacer es separar esa informacion... que la macro cree otra hoja y acomode la misma informacion
(apartir del numero de parte de nivel 0) pero con los "REF DES" listados en los renglones correspondientes
... si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los ref des con la misma informacion del numero de parte
el resultado seria mas o menos como una base de datos.
abajo hice una tabla de ejemplo y otra tabla como me gustaria tener el resultado.
Pueden tomar estos datos y pegarlos en una hoja de calculo para que tengan mejor vision de la tabla.

OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o tres letras como LED1, LED2;
Todos los datos estan separados por una coma. Y notese tambien de que no tiene espacios (...)



<< ya sabes que las "tablas" usando espacios y tabulaciones NO "pasan" como quisieras en los lectores de noticias >> :-((
Respuesta Responder a este mensaje
#2 Manny_90
23/07/2008 - 16:16 | Informe spam
EXELENTEEEEEEEEEEEE!!!!!!

Solo un pequeno detalle, hay renglones que tienen 57 y 83 Ref des (267 & 404
caracteres respectivamente) y en el resultado de esos numeros de parte no
lista los REF DES, solo captura #VALUE!. Uso Excel 97.

Ahora, el problema es de que en ocaciones tengo archivos donde contienen mas
de 1000 ref des

Espero y haya solucion a eso
Mil gracias













"Héctor Miguel" wrote:

hola, !

el siguiente ejemplo "asume" que ha existe una "Hoja2", OJO que siempre se eliminan sus datos y se reemplazan por la macro:

Sub Lista_partes()
Dim Fila As Integer, Level As Byte, iNumber As String, RefDes As String, Qty As Integer, iDesc As String
With Worksheets("hoja2")
.Cells.Clear: .Range("a1:e1") = Array("Level", "Item Number", "Ref Des", "Qty", "Item Description")
End With
With Worksheets("hoja1")
For Fila = 2 To .Range("a65536").End(xlUp).Row
Level = .Range("a" & Fila)
iNumber = .Range("b" & Fila)
RefDes = .Range("c" & Fila)
Qty = .Range("d" & Fila)
iDesc = .Range("e" & Fila)
With Worksheets("hoja2")
With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
.Offset() = Level
.Offset(, 1) = iNumber
.Offset(, 2) = Application.Transpose(Split(RefDes, ","))
.Offset(, 3) = 1
.Offset(, 4) = iDesc
End With
End With
Next
End With
Worksheets("hoja2").Range("a1:e1").EntireColumn.AutoFit
End Sub

OJO: la funcion de vba "Split" requiere de VBA6 (excel 2000 en adelante)
si piensas utilizarla en la version 97 de excel (VBA5) deberas proveerla, poniendo al inicio de tu modulo lo siguiente:

#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

> En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des, D1-Qty, E1-Item Description.
> En la columna de Ref des tiene la lista de las locaciones existentes de un numero de parte (R1, R2, R3, etc)
> lo que me gustaria hacer es separar esa informacion... que la macro cree otra hoja y acomode la misma informacion
> (apartir del numero de parte de nivel 0) pero con los "REF DES" listados en los renglones correspondientes
> ... si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los ref des con la misma informacion del numero de parte
> el resultado seria mas o menos como una base de datos.
> abajo hice una tabla de ejemplo y otra tabla como me gustaria tener el resultado.
> Pueden tomar estos datos y pegarlos en una hoja de calculo para que tengan mejor vision de la tabla.
>
> OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o tres letras como LED1, LED2;
> Todos los datos estan separados por una coma. Y notese tambien de que no tiene espacios (...)

<< ya sabes que las "tablas" usando espacios y tabulaciones NO "pasan" como quisieras en los lectores de noticias >> :-((



Respuesta Responder a este mensaje
#3 Manny_90
07/08/2008 - 18:16 | Informe spam
qUE TAL.. MUCHAS GRACIAS,, sabes que tengo un problema, el macro se para en
la linea:


With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)


Ya no avanza y el error que genera es:
Run-time error '1004':
Aplication defined or object defined error

HELP...


"Manny_90" wrote:

EXELENTEEEEEEEEEEEE!!!!!!

Solo un pequeno detalle, hay renglones que tienen 57 y 83 Ref des (267 & 404
caracteres respectivamente) y en el resultado de esos numeros de parte no
lista los REF DES, solo captura #VALUE!. Uso Excel 97.

Ahora, el problema es de que en ocaciones tengo archivos donde contienen mas
de 1000 ref des

Espero y haya solucion a eso
Mil gracias













"Héctor Miguel" wrote:

> hola, !
>
> el siguiente ejemplo "asume" que ha existe una "Hoja2", OJO que siempre se eliminan sus datos y se reemplazan por la macro:
>
> Sub Lista_partes()
> Dim Fila As Integer, Level As Byte, iNumber As String, RefDes As String, Qty As Integer, iDesc As String
> With Worksheets("hoja2")
> .Cells.Clear: .Range("a1:e1") = Array("Level", "Item Number", "Ref Des", "Qty", "Item Description")
> End With
> With Worksheets("hoja1")
> For Fila = 2 To .Range("a65536").End(xlUp).Row
> Level = .Range("a" & Fila)
> iNumber = .Range("b" & Fila)
> RefDes = .Range("c" & Fila)
> Qty = .Range("d" & Fila)
> iDesc = .Range("e" & Fila)
> With Worksheets("hoja2")
> With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
> .Offset() = Level
> .Offset(, 1) = iNumber
> .Offset(, 2) = Application.Transpose(Split(RefDes, ","))
> .Offset(, 3) = 1
> .Offset(, 4) = iDesc
> End With
> End With
> Next
> End With
> Worksheets("hoja2").Range("a1:e1").EntireColumn.AutoFit
> End Sub
>
> OJO: la funcion de vba "Split" requiere de VBA6 (excel 2000 en adelante)
> si piensas utilizarla en la version 97 de excel (VBA5) deberas proveerla, poniendo al inicio de tu modulo lo siguiente:
>
> #If Not VBA6 Then
> Function Split(Cadena As String, Delimitador As String) As Variant
> Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
> End Function
> #End If
>
> si cualquier duda (o informacion adicional)... comentas ?
> saludos,
> hector.
>
> > En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des, D1-Qty, E1-Item Description.
> > En la columna de Ref des tiene la lista de las locaciones existentes de un numero de parte (R1, R2, R3, etc)
> > lo que me gustaria hacer es separar esa informacion... que la macro cree otra hoja y acomode la misma informacion
> > (apartir del numero de parte de nivel 0) pero con los "REF DES" listados en los renglones correspondientes
> > ... si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los ref des con la misma informacion del numero de parte
> > el resultado seria mas o menos como una base de datos.
> > abajo hice una tabla de ejemplo y otra tabla como me gustaria tener el resultado.
> > Pueden tomar estos datos y pegarlos en una hoja de calculo para que tengan mejor vision de la tabla.
> >
> > OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o tres letras como LED1, LED2;
> > Todos los datos estan separados por una coma. Y notese tambien de que no tiene espacios (...)
>
> << ya sabes que las "tablas" usando espacios y tabulaciones NO "pasan" como quisieras en los lectores de noticias >> :-((
>
>
>
Respuesta Responder a este mensaje
#4 Héctor Miguel
07/08/2008 - 19:04 | Informe spam
hola, !

... tengo un problema, el macro se para en la linea:
With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
Ya no avanza y el error que genera es: Run-time error '1004': Aplication defined or object defined error



la variable Qty es tomada por el codigo en esta linea:
> Qty = .Range("d" & Fila)




lo que supone/espera/asume/requiere/... que en la columna D de la fila "en turno" exista un valor numerico
que es el numero de "items" que seran trasladados -> previa "ampliacion" del rango por al instruccion .Resize(Qty)

comentas (si hubiera) algun detalle en el tintero ?
saludos,
hector.

__ OP __
el siguiente ejemplo "asume" que ha existe una "Hoja2", OJO que siempre se eliminan sus datos y se reemplazan por la macro:

Sub Lista_partes()
Dim Fila As Integer, Level As Byte, iNumber As String, RefDes As String, Qty As Integer, iDesc As String
With Worksheets("hoja2")
.Cells.Clear: .Range("a1:e1") = Array("Level", "Item Number", "Ref Des", "Qty", "Item Description")
End With
With Worksheets("hoja1")
For Fila = 2 To .Range("a65536").End(xlUp).Row
Level = .Range("a" & Fila)
iNumber = .Range("b" & Fila)
RefDes = .Range("c" & Fila)
Qty = .Range("d" & Fila)
iDesc = .Range("e" & Fila)
With Worksheets("hoja2")
With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
.Offset() = Level
.Offset(, 1) = iNumber
.Offset(, 2) = Application.Transpose(Split(RefDes, ","))
.Offset(, 3) = 1
.Offset(, 4) = iDesc
End With
End With
Next
End With
Worksheets("hoja2").Range("a1:e1").EntireColumn.AutoFit
End Sub

OJO: la funcion de vba "Split" requiere de VBA6 (excel 2000 en adelante)
si piensas utilizarla en la version 97 de excel (VBA5) deberas proveerla, poniendo al inicio de tu modulo lo siguiente:

#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des, D1-Qty, E1-Item Description.
En la columna de Ref des tiene la lista de las locaciones existentes de un numero de parte (R1, R2, R3, etc)
lo que me gustaria hacer es separar esa informacion... que la macro cree otra hoja y acomode la misma informacion
(apartir del numero de parte de nivel 0) pero con los "REF DES" listados en los renglones correspondientes
... si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los ref des con la misma informacion del numero de parte
el resultado seria mas o menos como una base de datos.
abajo hice una tabla de ejemplo y otra tabla como me gustaria tener el resultado.
Pueden tomar estos datos y pegarlos en una hoja de calculo para que tengan mejor vision de la tabla.

OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o tres letras como LED1, LED2;
Todos los datos estan separados por una coma. Y notese tambien de que no tiene espacios (...)



<< ya sabes que las "tablas" usando espacios y tabulaciones NO "pasan" como quisieras en los lectores de noticias >> :-((
Respuesta Responder a este mensaje
#5 Manny_90
08/08/2008 - 16:03 | Informe spam
OK. Entonces el macro se va a detener si el valor es nulo o es cero???


mmmmm..(estaria bien que corriera con ceros)...,


ultima pregunta..
Solo un pequeno detalle, hay renglones que tienen 57 y 83 Ref des (267 & 404
caracteres respectivamente) y en el resultado de esos numeros de parte no
lista los REF DES, solo captura #VALUE!. Uso Excel 97.

Ahora, el problema es de que en ocaciones tengo archivos donde contienen mas
de 1000 ref des

Espero y haya solucion a eso
Mil gracias










"Héctor Miguel" wrote:

hola, !

> ... tengo un problema, el macro se para en la linea:
> With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
> Ya no avanza y el error que genera es: Run-time error '1004': Aplication defined or object defined error

la variable Qty es tomada por el codigo en esta linea:
>> > Qty = .Range("d" & Fila)
lo que supone/espera/asume/requiere/... que en la columna D de la fila "en turno" exista un valor numerico
que es el numero de "items" que seran trasladados -> previa "ampliacion" del rango por al instruccion .Resize(Qty)

comentas (si hubiera) algun detalle en el tintero ?
saludos,
hector.

__ OP __
>>> el siguiente ejemplo "asume" que ha existe una "Hoja2", OJO que siempre se eliminan sus datos y se reemplazan por la macro:
>>>
>>> Sub Lista_partes()
>>> Dim Fila As Integer, Level As Byte, iNumber As String, RefDes As String, Qty As Integer, iDesc As String
>>> With Worksheets("hoja2")
>>> .Cells.Clear: .Range("a1:e1") = Array("Level", "Item Number", "Ref Des", "Qty", "Item Description")
>>> End With
>>> With Worksheets("hoja1")
>>> For Fila = 2 To .Range("a65536").End(xlUp).Row
>>> Level = .Range("a" & Fila)
>>> iNumber = .Range("b" & Fila)
>>> RefDes = .Range("c" & Fila)
>>> Qty = .Range("d" & Fila)
>>> iDesc = .Range("e" & Fila)
>>> With Worksheets("hoja2")
>>> With .Range("a65536").End(xlUp).Offset(1).Resize(Qty)
>>> .Offset() = Level
>>> .Offset(, 1) = iNumber
>>> .Offset(, 2) = Application.Transpose(Split(RefDes, ","))
>>> .Offset(, 3) = 1
>>> .Offset(, 4) = iDesc
>>> End With
>>> End With
>>> Next
>>> End With
>>> Worksheets("hoja2").Range("a1:e1").EntireColumn.AutoFit
>>> End Sub
>>>
>>> OJO: la funcion de vba "Split" requiere de VBA6 (excel 2000 en adelante)
>>> si piensas utilizarla en la version 97 de excel (VBA5) deberas proveerla, poniendo al inicio de tu modulo lo siguiente:
>>>
>>> #If Not VBA6 Then
>>> Function Split(Cadena As String, Delimitador As String) As Variant
>>> Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
>>> End Function
>>> #End If
>>>
>>> si cualquier duda (o informacion adicional)... comentas ?
>>> saludos,
>>> hector.
>>>
>>>> En la hoja 1 tengo esta informacion A1-LEVEL, B1-Item Number, C1-Ref Des, D1-Qty, E1-Item Description.
>>>> En la columna de Ref des tiene la lista de las locaciones existentes de un numero de parte (R1, R2, R3, etc)
>>>> lo que me gustaria hacer es separar esa informacion... que la macro cree otra hoja y acomode la misma informacion
>>>> (apartir del numero de parte de nivel 0) pero con los "REF DES" listados en los renglones correspondientes
>>>> ... si son 10 ref des, que en la otra tabla agregue 10 renglones y acomode los ref des con la misma informacion del numero de parte
>>>> el resultado seria mas o menos como una base de datos.
>>>> abajo hice una tabla de ejemplo y otra tabla como me gustaria tener el resultado.
>>>> Pueden tomar estos datos y pegarlos en una hoja de calculo para que tengan mejor vision de la tabla.
>>>>
>>>> OJO. Los Ref des pueden ser de diferentes letras como C, Q, L, incluso dos o tres letras como LED1, LED2;
>>>> Todos los datos estan separados por una coma. Y notese tambien de que no tiene espacios (...)
>>>
>>> << ya sabes que las "tablas" usando espacios y tabulaciones NO "pasan" como quisieras en los lectores de noticias >> :-((



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida