CODIGO Arreglo

05/08/2008 - 00:31 por Manny_90 | Informe spam
Que tal.

Me gustaria hacer un codigo donde me identifique cantidades que cambien de
una lista de datos de otra. En la hoja1 tengo Numero de parte, cantidad,
descripcion. En la hoja2 tengo Numero de parte, catidad, descripcion.
Necesito hacer un codigo donde inserte una hoja nueva y el la hoja nueva
liste los numeros de parte que cambian de cantidad, es decir, si en la hoja1
tengo: "Numero de parte" h123 "cantidad" 3, y en la hoja2 tengo "Numero de
parte" h123 "cantidad" 5, quiero que me liste en la hoja nueva una serie de
tabla donde diga, "Numero de parte", "de", "a" y liste los datos "h123" de
"3" a "5" (abajo del encabezado, oviamente).

La lista podria ser muy grande, por ejemplo:
SAA1402-60 1
01-0000-C1 1
01-1010-C1 20
01-4545-45 1
01-1030-C1 16
01-2200-C1 19
01-3310-C1 8
01-4750-C1 16
02-0022-B1 23
o mas. podria ser hasta 200..


Muchas gracias

Preguntas similare

Leer las respuestas

#6 Manny_90
07/08/2008 - 00:46 | Informe spam
Muy bien...
Mil gracias nuevamente...

solo para concluir, abusando de tu ayuda...

quize copear el mismo codigo para buscar un valor de una celda.. pero no
logro que funcione la formula

Range("D65536").End(xlUp).Select
uno = ActiveCell.Address
Selection.End(xlUp).Offset(0, -1).Select
dos = ActiveCell.Address

Range(uno, dos).Select

grupo = Range(uno, dos).Address



Sheets("RESULTADO").Select
With Worksheets("Arreglo-BOM")

Range("k2:m2").Value = Array(.[C1].Value, .[D1].Value, .[e1].Value)
With .Range("a1").CurrentRegion
.Offset(1, 4).Resize(.Rows.Count - 1, 1).Formula = _
"=VLOOKUP(C2,'Arreglo-BOM PROPUESTO'!grupo,2,0)"
.Parent.Range("f2").Formula = "Ò<>e2"
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"),
''''quiero que liste los valores verdaderos'''''
CopyToRange:=Range("k2:m2")
End With
End With


El resultado de la formula es #NAME? en las celdas de la columna E y F...
cuando llega ala linea::

.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"),
CopyToRange:=Range("k2:m2")

No avanza el macro y manda el error

Run-time error '1004':
The extract range has a missing or ilegal field name

pero pienso que es por el resultado de la formula del VLOOKUP


MIL GRACIAS



"Héctor Miguel" wrote:

hola, !

> ... que hace la funcion With> end with y la linea:
>> .Offset(1, 3).Resize(.Rows.Count - 1, 1).Formula = _
> estoy hablando del codigo "Sub Filtra_cambios()"

1) una instruccion With ... End With establece una referencia hacia un objeto con tratamiento de "prefijo"
(es decir) en las lineas siguientes solo tienes que iniciar con un punto para llamar a sus propiades, metodos, etc.
lo que te "ahorra" una repeticion de referencias a dicho objeto (p.e.)

-> SIN un bloque de instrucciones With ... End With, tendrias que establecer la referencia al objeto para cada propiedad
y de tener procedimiento +/- "ligero" (en escritura y lineas de codigo) pasarias a tener el (mismo) procedimiento +/- asi:
("cuenta" las veces que se repite "Worksheets("hoja1")" y "Worksheets("hoja1").Range("a1").CurrentRegion")

Private Sub Filtra_cambios()
Worksheets.Add(After:=Worksheets(Worksheets.Count))
ActiveSheet.Name = "Cambios"
Range("a1") = "Cambios en hoja2 con respecto de hoja1"
Worksheets("hoja1").Range("d1") = "Cambio"
Range("a2:c2").Value = Array(Worksheets("hoja1").[a1].Value, Worksheets("hoja1").[b1].Value, Worksheets("hoja1").[d1].Value)
Worksheets("hoja1").Range("a1").CurrentRegion.Offset(1, 3).Resize(Worksheets("hoja1").Range("a1").CurrentRegion.Rows.Count - 1, 1) _
.Formula = "=sumproduct(--(countif(a$1:a2,a2)=1),--(countif(hoja2!a:a,a2)>0),--(" & _
"index(hoja2!b:b,match(a2,hoja2!a:a,0))<>b2),index(hoja2!b:b,match(a2,hoja2!a:a,0)))"
Worksheets("hoja1").Range("f2").Formula = "Ò>0"
Worksheets("hoja1").Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"), CopyToRange:=Range("a2:c2")
Worksheets("hoja1").Columns("d:f").ClearContents
Debug.Print Worksheets("hoja1").UsedRange.Address
End With
End Sub

2) en cuanto a que hace "la formula"... (simplemente) determina si para cada fila correspondiente a cada "numero de parte"...
a) es la primera vez que aparece
b) existe al menos una vez en la hoja2
c) la cantidad registrada en hoja2 es diferente de la registrada en hoja1
d) cual es la cantidad registrada en hoja2 (en caso de cumplirse las 3 condiciones anteriores)

-> el codigo utiliza de nuevo filtros avanzados para copiar cuales partes tienen cantidad diferente en hoja2 respecto de hoja1

saludos,
hector.



Respuesta Responder a este mensaje
#7 Héctor Miguel
07/08/2008 - 01:47 | Informe spam
hola, ! (dejo solo las partes clave de esta consulta)...

quize copear el mismo codigo para buscar un valor de una celda.. pero no logro que funcione la formula



1) no todo es (tan simple como simplemente) copiar algo que funciona SIN analizar "el contexto"

Range("D65536").End(xlUp).Select
uno = ActiveCell.Address
Selection.End(xlUp).Offset(0, -1).Select
dos = ActiveCell.Address
Range(uno, dos).Select
grupo = Range(uno, dos).Address



2) "grupo" se refiere a una <variable> de tipo "String" que contiene la direccion del rango indicado
(aparentemente) las filas no vacias en las columnas C y D de la hoja activa ("arreglo-bom propuesto" ?)

Sheets("RESULTADO").Select
With Worksheets("Arreglo-BOM")
Range("k2:m2").Value = Array(.[C1].Value, .[D1].Value, .[e1].Value)
With .Range("a1").CurrentRegion
.Offset(1, 4).Resize(.Rows.Count - 1, 1).Formula = _
"=VLOOKUP(C2,'Arreglo-BOM PROPUESTO'!grupo,2,0)"
.Parent.Range("f2").Formula = "Ò<>e2"
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"),
''''quiero que liste los valores verdaderos'''''
CopyToRange:=Range("k2:m2")
End With
End With
El resultado de la formula es #NAME? en las celdas de la columna E y F...



3) OJO: el nombre de una <variable> cuando esta dentro de una caden de texto (delimitada por comillas dobles)
NO esta siendo "llamada" (ni su contenido es al valor asignado en lineas previas de tu codigo)
-> cambia "la formula" +/- asi: -> "=vlookup(c2,'arreglo-bom propuesto'!" & grupo & ",2,0)"

cuando llega ala linea:
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"), CopyToRange:=Range("k2:m2")
No avanza el macro y manda el error: Run-time error '1004': The extract range has a missing or ilegal field name
pero pienso que es por el resultado de la formula del VLOOKUP



4) aqui lo que te esta avisando es que el rango [K2:M2] de la hoja activa ("resultado" ?)
NO ES IGUAL (exactamente) al contenido "correspondiente" del "CurrentRegion" (desde A1 de la hoja "arreglo-bom")
-> (probablemente) si tu CurrentRegion es ya hasta la columna E... debas "mover" el rango para el filtro de F1:F2 a: -> G1:G2
procurando que NO QUEDE "dentro" de cualquier (auto)agrupacion del "CurrentRegion" -?-

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida