Davanced filter

15/12/2008 - 22:01 por Manny_90 | Informe spam
Que tal.

Me gustaria hacer una macro que tome ciertos datos de una base de datos.
creo que la mejor opcion es el metodo advancefilter. Necesito saber de cada
ensamble los cortos de los numeros de parte que se utilizan para construir un
modelo.
por ejemplo.


Si en la hoja1 tengo listados todos los modelos que se producen col A:
Nivel, Col B: Numero de parte, Col C: Descripcion, todos los datos no tienen
celdas en blanco y tengo un registro de 40.

En la otra hoja 2 Existen Col A: Paquete (puede llegar a tener celdas en
blanco), Col B: Orden, Col C: Ensamble, Col D Fecha de inicio, Col DFecha de
terminacion, Col E: Numero de parte de corto. Col F, G, H, I, J, K , L, M, N
,O , P , Q son celdas que puede que esten en blanco o esten llenas.

Lo que necesito es que en la hoja 1 valla ensamble por ensamble y copiar la
informacion de la hoja 2 (creo que con advance filter) de la col E hasta la
Q. y lo pegue hacia abajo en la hoja 1 sin borrar el listado que tengo
originalmente de los ensambles.


Muchas gracias..
espero y me puedan ayudar.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/12/2008 - 06:57 | Informe spam
hola, !

necesitas exponer algunos detalles que permitan (re)construir de un modelo de trabajo "igual al tuyo" -?-

saludos,
hector.

__ OP __
Me gustaria hacer una macro que tome ciertos datos de una base de datos.
creo que la mejor opcion es el metodo advancefilter. Necesito saber de cada ensamble
los cortos de los numeros de parte que se utilizan para construir un modelo.
por ejemplo.
Si en la hoja1 tengo listados todos los modelos que se producen col A: Nivel, Col B: Numero de parte
Col C: Descripcion, todos los datos no tienen celdas en blanco y tengo un registro de 40.
En la otra hoja 2 Existen Col A: Paquete (puede llegar a tener celdas en blanco), Col B: Orden
Col C: Ensamble, Col D Fecha de inicio, Col DFecha de terminacion, Col E: Numero de parte de corto.
Col F, G, H, I, J, K , L, M, N ,O , P , Q son celdas que puede que esten en blanco o esten llenas.
Lo que necesito es que en la hoja 1 valla ensamble por ensamble y copiar la informacion de la hoja 2
(creo que con advance filter) de la col E hasta la Q. y lo pegue hacia abajo en la hoja 1
sin borrar el listado que tengo originalmente de los ensambles.
Respuesta Responder a este mensaje
#2 Manny_90
16/12/2008 - 22:31 | Informe spam
OK.

En lo hoja 1 tengo: (Columnas A, B, C)
Level Item Number Description
0 0301-0948-03-587 PCB A,SPDM ULTRA V,CPU BRD
0 0301-1548-03-587 PCB/A,CPU BOARD,ULTRA 7E
0 0312-0108-01-587 BOM, COMM INTFC, MDULRJBOX
0 0312-0109-01 BOM,MOTHER,MDLR JBOX,60HZ
0 0312-0109-01-587 BOM,MOTHER,MDLR JBOX,60HZ
0 0312-0111-01-587 PCB ASSY,XFMR INT,MDLRJBX,60HZ
0 0312-0111-02-587 PCB ASSY,XFMR INT,MDLRJBX,50HZ
0 0312-0163-02-587 PCB ASSY,1 POS JBOX 422
0 0312-0512-01-587 PCB ASSY,SENSORNET JBOX,6 POSI
0 0312-0512-02-587 BOM,SENSORNET JBOX,1 POSI
0 0312-1004-01-587 PCA, FRONT PANEL
0 0312-4001-01-587 PCA, 4 CHN IP ENCODER
1 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02
0 ADSDU822N-587 SPEEDDOME ULTRA8 22 NTSC 116 B
1 0101-0150-01-587 FINAL ASSY,
2 0404-0079-01-587 SDU VII EYEB
3 0312-0953-01-587 BOM, SPEEDDOME ULTRAIII, CM/LN

En la hoja 2 tengo:

BKT ORDR MO# Stat Assembly Kit Bal. Can Bld. Start Date Due Date Shortage
P/N Description WC Can Kit QtyPer PREV_BAL Rqd. Qty Cum. Spy. Short
Qty. LT PO # PO Qty. Cmt

1 1 870644 O 0312-2104-01-587 2 0 2008/10/01 2008/10/01 4788-2212-500-587 RES 22.1K TF 1/10W 1% 060 5.0 0 1 0 2 0 2 7 0

1 2 878357 O 0312-4001-01-587 11 0 2008/10/10 2008/10/10 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02 5.0 0 1 0 11 0 11 1 0

1 3 897354 O 0312-0163-02-587 1 1 2008/10/29 2008/11/06 NO SHORTS!

1 4 902433 O 0312-0111-01-587 3 13 2008/11/05 2008/11/13 NO
SHORTS!

1 5 902596 O 0301-1548-03-587 14 14 2008/11/05 2008/11/13 NO
SHORTS!

1 6 905569 O RHOSW-587 13 0 2008/11/06 2008/11/06 0500-9597-01-587 SHORT ARM
MT 5.0 0 1 0 11 0 11 5 1189079OP 486 *


Se ve un poco mal :), lo que pasa es que mi base de datos es muy grande... y
no o no me gustaria agregar muchos datos,,,,...
,, necesito que en la hoja 1, (donde estan listados todos mis ensambles),
agregar cada numero de parte que contenga cortos, dependiendo del ensamble en
donde se encuentre. por ejemplo:


Modelo 1: 0301-0948-03-587. necesita hacer un filtro avanzado para filtrar
todas las celdas que tengan ese modelo (Estan en la columna: E) de la hoja2
y copiar todos las celdas desde la columna A hasta V. ir a la hoja 1 y pegar
todas esas celdas abajo del modelo que se filtro. asi susesivamente hasta que
termine de pasar todos los datos de cada modelo.

Hice un macro para hacer que BUSQUE el modelo y tome algunos datos, pero mis
necesidades cambiaron y ahora tengo que pasar todos los datos que esten bajo
el modelo.


mira mi codigo,,,

Sub MOQ()

Sheets("hoja1").Activate
Range("B1").Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
Do Until uno = ""
If Sheets("hoja2").[E:E].Find(what:=uno, LookAt:=xlWhole) Is Nothing Then
ActiveCell.Offset(1, 0).Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
Else
Sheets("hoja2").Select
Range("a1").Select
matriz = ActiveCell.CurrentRegion.Address

ActiveSheet.[E:E].Find(what:=uno).Select

''' aqui estaria bien el filtro avanzado

ActiveCell.Offset(0, 5).Select
If ActiveCell = "" Then GoTo nada
conjunto = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
If ActiveCell.Offset(1, 0) = "" Then
Range(conjunto).Select
Selection.Copy
Sheets("hoja1").Select
Range(uno1).Offset(1, 0).EntireRow.Select
Selection.Insert shift:=xlDown
Range(ActiveCell, ActiveCell.Offset(0, 12)).Select
Selection.Cut
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
Else
Range(conjunto, ActiveCell.End(xlDown)).Select
filas = ActiveCell.End(xlDown).Row - ActiveCell.Row
Selection.Copy
Sheets("hoja1").Select
Range(uno1).Offset(1, 0).EntireRow.Select
Selection.Insert shift:=xlDown
rango = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
Range(rango, ActiveCell.Offset(filas, 0)).Select
Selection.Cut
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
ActiveCell.Offset(filas, 0).Select
End If
nada:
Sheets("hoja1").Activate
ActiveCell.Offset(1, 0).Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
End If
Loop
End Sub



Mil gracias



"Héctor Miguel" wrote:

hola, !

necesitas exponer algunos detalles que permitan (re)construir de un modelo de trabajo "igual al tuyo" -?-

saludos,
hector.

__ OP __
> Me gustaria hacer una macro que tome ciertos datos de una base de datos.
> creo que la mejor opcion es el metodo advancefilter. Necesito saber de cada ensamble
> los cortos de los numeros de parte que se utilizan para construir un modelo.
> por ejemplo.
> Si en la hoja1 tengo listados todos los modelos que se producen col A: Nivel, Col B: Numero de parte
> Col C: Descripcion, todos los datos no tienen celdas en blanco y tengo un registro de 40.
> En la otra hoja 2 Existen Col A: Paquete (puede llegar a tener celdas en blanco), Col B: Orden
> Col C: Ensamble, Col D Fecha de inicio, Col DFecha de terminacion, Col E: Numero de parte de corto.
> Col F, G, H, I, J, K , L, M, N ,O , P , Q son celdas que puede que esten en blanco o esten llenas.
> Lo que necesito es que en la hoja 1 valla ensamble por ensamble y copiar la informacion de la hoja 2
> (creo que con advance filter) de la col E hasta la Q. y lo pegue hacia abajo en la hoja 1
> sin borrar el listado que tengo originalmente de los ensambles.



Respuesta Responder a este mensaje
#3 Héctor Miguel
16/12/2008 - 23:34 | Informe spam
hola, !

ok,... a partir de donde (que columnas) copiarias los datos de la hoja2...
y exactamente donde (a partir de cual columna) los pegarias en la hoja1 ???

saludos,
hector.

__ OP __
OK.

En lo hoja 1 tengo: (Columnas A, B, C)
Level Item Number Description
0 0301-0948-03-587 PCB A,SPDM ULTRA V,CPU BRD
0 0301-1548-03-587 PCB/A,CPU BOARD,ULTRA 7E
0 0312-0108-01-587 BOM, COMM INTFC, MDULRJBOX
0 0312-0109-01 BOM,MOTHER,MDLR JBOX,60HZ
0 0312-0109-01-587 BOM,MOTHER,MDLR JBOX,60HZ
0 0312-0111-01-587 PCB ASSY,XFMR INT,MDLRJBX,60HZ
0 0312-0111-02-587 PCB ASSY,XFMR INT,MDLRJBX,50HZ
0 0312-0163-02-587 PCB ASSY,1 POS JBOX 422
0 0312-0512-01-587 PCB ASSY,SENSORNET JBOX,6 POSI
0 0312-0512-02-587 BOM,SENSORNET JBOX,1 POSI
0 0312-1004-01-587 PCA, FRONT PANEL
0 0312-4001-01-587 PCA, 4 CHN IP ENCODER
1 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02
0 ADSDU822N-587 SPEEDDOME ULTRA8 22 NTSC 116 B
1 0101-0150-01-587 FINAL ASSY,
2 0404-0079-01-587 SDU VII EYEB
3 0312-0953-01-587 BOM, SPEEDDOME ULTRAIII, CM/LN

En la hoja 2 tengo:

BKT ORDR MO# Stat Assembly Kit Bal. Can Bld. Start Date Due Date Shortage
P/N Description WC Can Kit QtyPer PREV_BAL Rqd. Qty Cum. Spy. Short
Qty. LT PO # PO Qty. Cmt

1 1 870644 O 0312-2104-01-587 2 0 2008/10/01 2008/10/01 4788-2212-500-587 RES 22.1K TF 1/10W 1% 060 5.0 0 1 0 2 0 2 7 0

1 2 878357 O 0312-4001-01-587 11 0 2008/10/10 2008/10/10 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02 5.0 0 1 0 11 0 11 1 0

1 3 897354 O 0312-0163-02-587 1 1 2008/10/29 2008/11/06 NO SHORTS!

1 4 902433 O 0312-0111-01-587 3 13 2008/11/05 2008/11/13 NO
SHORTS!

1 5 902596 O 0301-1548-03-587 14 14 2008/11/05 2008/11/13 NO
SHORTS!

1 6 905569 O RHOSW-587 13 0 2008/11/06 2008/11/06 0500-9597-01-587 SHORT ARM
MT 5.0 0 1 0 11 0 11 5 1189079OP 486 *


Se ve un poco mal :), lo que pasa es que mi base de datos es muy grande... y
no o no me gustaria agregar muchos datos,,,,...
,, necesito que en la hoja 1, (donde estan listados todos mis ensambles),
agregar cada numero de parte que contenga cortos, dependiendo del ensamble en
donde se encuentre. por ejemplo:


Modelo 1: 0301-0948-03-587. necesita hacer un filtro avanzado para filtrar
todas las celdas que tengan ese modelo (Estan en la columna: E) de la hoja2
y copiar todos las celdas desde la columna A hasta V. ir a la hoja 1 y pegar
todas esas celdas abajo del modelo que se filtro. asi susesivamente hasta que
termine de pasar todos los datos de cada modelo.

Hice un macro para hacer que BUSQUE el modelo y tome algunos datos, pero mis
necesidades cambiaron y ahora tengo que pasar todos los datos que esten bajo
el modelo.


mira mi codigo,,,

Sub MOQ()

Sheets("hoja1").Activate
Range("B1").Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
Do Until uno = ""
If Sheets("hoja2").[E:E].Find(what:=uno, LookAt:=xlWhole) Is Nothing Then
ActiveCell.Offset(1, 0).Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
Else
Sheets("hoja2").Select
Range("a1").Select
matriz = ActiveCell.CurrentRegion.Address

ActiveSheet.[E:E].Find(what:=uno).Select

''' aqui estaria bien el filtro avanzado

ActiveCell.Offset(0, 5).Select
If ActiveCell = "" Then GoTo nada
conjunto = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
If ActiveCell.Offset(1, 0) = "" Then
Range(conjunto).Select
Selection.Copy
Sheets("hoja1").Select
Range(uno1).Offset(1, 0).EntireRow.Select
Selection.Insert shift:=xlDown
Range(ActiveCell, ActiveCell.Offset(0, 12)).Select
Selection.Cut
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
Else
Range(conjunto, ActiveCell.End(xlDown)).Select
filas = ActiveCell.End(xlDown).Row - ActiveCell.Row
Selection.Copy
Sheets("hoja1").Select
Range(uno1).Offset(1, 0).EntireRow.Select
Selection.Insert shift:=xlDown
rango = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
Range(rango, ActiveCell.Offset(filas, 0)).Select
Selection.Cut
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
ActiveCell.Offset(filas, 0).Select
End If
nada:
Sheets("hoja1").Activate
ActiveCell.Offset(1, 0).Select
uno = ActiveCell.Value
uno1 = ActiveCell.Address
End If
Loop
End Sub
Respuesta Responder a este mensaje
#4 Manny_90
17/12/2008 - 00:00 | Informe spam
Tomaria los datos (DEL A HOJA 2) de la Columna A hasta la V. los pegaria en
la hoja 1, tambien en columna A en adelante (hasta la V)

Thanks...


____________________________________








"Héctor Miguel" wrote:

hola, !

ok,... a partir de donde (que columnas) copiarias los datos de la hoja2...
y exactamente donde (a partir de cual columna) los pegarias en la hoja1 ???

saludos,
hector.

__ OP __
> OK.
>
> En lo hoja 1 tengo: (Columnas A, B, C)
> Level Item Number Description
> 0 0301-0948-03-587 PCB A,SPDM ULTRA V,CPU BRD
> 0 0301-1548-03-587 PCB/A,CPU BOARD,ULTRA 7E
> 0 0312-0108-01-587 BOM, COMM INTFC, MDULRJBOX
> 0 0312-0109-01 BOM,MOTHER,MDLR JBOX,60HZ
> 0 0312-0109-01-587 BOM,MOTHER,MDLR JBOX,60HZ
> 0 0312-0111-01-587 PCB ASSY,XFMR INT,MDLRJBX,60HZ
> 0 0312-0111-02-587 PCB ASSY,XFMR INT,MDLRJBX,50HZ
> 0 0312-0163-02-587 PCB ASSY,1 POS JBOX 422
> 0 0312-0512-01-587 PCB ASSY,SENSORNET JBOX,6 POSI
> 0 0312-0512-02-587 BOM,SENSORNET JBOX,1 POSI
> 0 0312-1004-01-587 PCA, FRONT PANEL
> 0 0312-4001-01-587 PCA, 4 CHN IP ENCODER
> 1 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02
> 0 ADSDU822N-587 SPEEDDOME ULTRA8 22 NTSC 116 B
> 1 0101-0150-01-587 FINAL ASSY,
> 2 0404-0079-01-587 SDU VII EYEB
> 3 0312-0953-01-587 BOM, SPEEDDOME ULTRAIII, CM/LN
>
> En la hoja 2 tengo:
>
> BKT ORDR MO# Stat Assembly Kit Bal. Can Bld. Start Date Due Date Shortage
> P/N Description WC Can Kit QtyPer PREV_BAL Rqd. Qty Cum. Spy. Short
> Qty. LT PO # PO Qty. Cmt
>
> 1 1 870644 O 0312-2104-01-587 2 0 2008/10/01 2008/10/01 4788-2212-500-587 RES 22.1K TF 1/10W 1% 060 5.0 0 1 0 2 0 2 7 0
>
> 1 2 878357 O 0312-4001-01-587 11 0 2008/10/10 2008/10/10 0710-0960-0101-587 F/W,4CHN BOOTLOADER V1.02 5.0 0 1 0 11 0 11 1 0
>
> 1 3 897354 O 0312-0163-02-587 1 1 2008/10/29 2008/11/06 NO SHORTS!
>
> 1 4 902433 O 0312-0111-01-587 3 13 2008/11/05 2008/11/13 NO
> SHORTS!
>
> 1 5 902596 O 0301-1548-03-587 14 14 2008/11/05 2008/11/13 NO
> SHORTS!
>
> 1 6 905569 O RHOSW-587 13 0 2008/11/06 2008/11/06 0500-9597-01-587 SHORT ARM
> MT 5.0 0 1 0 11 0 11 5 1189079OP 486 *
>
>
> Se ve un poco mal :), lo que pasa es que mi base de datos es muy grande... y
> no o no me gustaria agregar muchos datos,,,,...
> ,, necesito que en la hoja 1, (donde estan listados todos mis ensambles),
> agregar cada numero de parte que contenga cortos, dependiendo del ensamble en
> donde se encuentre. por ejemplo:
>
>
> Modelo 1: 0301-0948-03-587. necesita hacer un filtro avanzado para filtrar
> todas las celdas que tengan ese modelo (Estan en la columna: E) de la hoja2
> y copiar todos las celdas desde la columna A hasta V. ir a la hoja 1 y pegar
> todas esas celdas abajo del modelo que se filtro. asi susesivamente hasta que
> termine de pasar todos los datos de cada modelo.
>
> Hice un macro para hacer que BUSQUE el modelo y tome algunos datos, pero mis
> necesidades cambiaron y ahora tengo que pasar todos los datos que esten bajo
> el modelo.
>
>
> mira mi codigo,,,
>
> Sub MOQ()
>
> Sheets("hoja1").Activate
> Range("B1").Select
> uno = ActiveCell.Value
> uno1 = ActiveCell.Address
> Do Until uno = ""
> If Sheets("hoja2").[E:E].Find(what:=uno, LookAt:=xlWhole) Is Nothing Then
> ActiveCell.Offset(1, 0).Select
> uno = ActiveCell.Value
> uno1 = ActiveCell.Address
> Else
> Sheets("hoja2").Select
> Range("a1").Select
> matriz = ActiveCell.CurrentRegion.Address
>
> ActiveSheet.[E:E].Find(what:=uno).Select
>
> ''' aqui estaria bien el filtro avanzado
>
> ActiveCell.Offset(0, 5).Select
> If ActiveCell = "" Then GoTo nada
> conjunto = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
> If ActiveCell.Offset(1, 0) = "" Then
> Range(conjunto).Select
> Selection.Copy
> Sheets("hoja1").Select
> Range(uno1).Offset(1, 0).EntireRow.Select
> Selection.Insert shift:=xlDown
> Range(ActiveCell, ActiveCell.Offset(0, 12)).Select
> Selection.Cut
> ActiveCell.Offset(0, 1).Select
> ActiveSheet.Paste
> Else
> Range(conjunto, ActiveCell.End(xlDown)).Select
> filas = ActiveCell.End(xlDown).Row - ActiveCell.Row
> Selection.Copy
> Sheets("hoja1").Select
> Range(uno1).Offset(1, 0).EntireRow.Select
> Selection.Insert shift:=xlDown
> rango = Range(ActiveCell, ActiveCell.Offset(0, 12)).Address
> Range(rango, ActiveCell.Offset(filas, 0)).Select
> Selection.Cut
> ActiveCell.Offset(0, 1).Select
> ActiveSheet.Paste
> ActiveCell.Offset(filas, 0).Select
> End If
> nada:
> Sheets("hoja1").Activate
> ActiveCell.Offset(1, 0).Select
> uno = ActiveCell.Value
> uno1 = ActiveCell.Address
> End If
> Loop
> End Sub



Respuesta Responder a este mensaje
#5 Héctor Miguel
17/12/2008 - 06:05 | Informe spam
hola, !

Tomaria los datos (DEL A HOJA 2) de la Columna A hasta la V.
los pegaria en la hoja 1, tambien en columna A en adelante (hasta la V)



nunca he sido bueno para "adivinar" el arreglo de una tabla que exponen usando espacios y tabulaciones
(en lugar de comentar los rangos, el tipo de datos, los titulos, las celdas "claves", etc. etc. etc.)

haz una prueba con una macro +/- como la siguiente y...
si cualquier duda (o informacion adicional, mas... "digerible" en terminos de excel)... comentas ?
saludos,
hector.

Sub Filtra_y_copia()
Application.ScreenUpdating = False
Dim Dato, Fila As Integer, FilaX As Integer, nDatos As Integer
FilaX = Worksheets("hoja2").Range("a1").CurrentRegion.Rows.Count + 3
For Fila = Worksheets("hoja1").Range("a65536").End(xlUp).Row To 2 Step -1
Dato = Worksheets("hoja1").Range("b" & Fila)
With Worksheets("hoja2").Range("a1").CurrentRegion
If Application.CountIf(.Columns(5), Dato) Then
.Offset(, .Columns.Count + 2).Resize(1, 1) = .Columns(5).Resize(1, 1)
.Offset(, .Columns.Count + 2).Resize(1, 1).Offset(1) = Dato
.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Offset(, .Columns.Count + 2).Resize(2, 1), _
CopytoRange:=.Parent.Range("a" & FilaX)
With .Parent.Range("a" & FilaX).CurrentRegion
nDatos = .Rows.Count - 1
Worksheets("hoja1").Range("a" & Fila).Offset(1).Resize(nDatos).EntireRow.Insert
Worksheets("hoja1").Range("a" & Fila).Offset(1).Resize(nDatos, .Columns.Count).Value = _
.Offset(1).Resize(nDatos).Value
.Clear
End With
End If
.Offset(, .Columns.Count + 2).Resize(2, 1).Clear
Debug.Print .Parent.UsedRange.Address
End With
Next
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida