COMPARAR LISTAS ENTRE RANGOS

02/05/2007 - 20:54 por fernanda.peruana | Informe spam
Hola a Todos, espero que se encuentren bien. Una vez más recurro a
ustedes, para resolver la siguiente situación:

Necesito una macro que haga lo siguiente:

Tengo una lista con 8 conceptos en la columna "A":

"Columna A"
Comisiones
Descuentos
Ventas
Compras
Viaticos
Impuestos
Sueldos
Honorarios

En la columna B aparece una lista con aproximadamente 150 diferentes
conceptos que se repiten desde la celda B2 hasta B10000. Lo que
necesito es una macro que value los conceptos de cada una de las
celdas en la columna B y compare con la lista de 8 conceptos de la
columna A, si el concepto en la columna B se encuentra dentro de la
lista de "A", que en la celda correspondiente en "C" ponga "PARA
PAGAR", de lo contrario, que deje la celda correspondiente en "C" en
blanco.

Sin más por el momento, espero que me puedan ayudar. Les deseo un buen
día y Gracias anticipadas.

Preguntas similare

Leer las respuestas

#6 Arcano
02/05/2007 - 21:53 | Informe spam
On 2 mayo, 15:19, "KL" wrote:
Hola Arcano,

Me parece que no has probado tu formula ;-)

Saludos,
KL

"Arcano" wrote in messagenews:

On 2 mayo, 15:03, "KL" wrote:





> Suponiendo que...
> - la lista de la columna A esta en el rango [A2:A9]
> - la lista de la columna B empieza desde la celda [B2]

> Prueba poner la siguiente formula en la celda [C2] y copiarla hacia abajo:

> =SI(ESNUMERO(COINCIDIR(B2;$A$2:$A$9;0));"PARA PAGAR";"")

> Saludos,
> KL

> wrote in messagenews:

> Hola a Todos, espero que se encuentren bien. Una vez más recurro a
> ustedes, para resolver la siguiente situación:

> Necesito una macro que haga lo siguiente:

> Tengo una lista con 8 conceptos en la columna "A":

> "Columna A"
> Comisiones
> Descuentos
> Ventas
> Compras
> Viaticos
> Impuestos
> Sueldos
> Honorarios

> En la columna B aparece una lista con aproximadamente 150 diferentes
> conceptos que se repiten desde la celda B2 hasta B10000. Lo que
> necesito es una macro que value los conceptos de cada una de las
> celdas en la columna B y compare con la lista de 8 conceptos de la
> columna A, si el concepto en la columna B se encuentra dentro de la
> lista de "A", que en la celda correspondiente en "C" ponga "PARA
> PAGAR", de lo contrario, que deje la celda correspondiente en "C" en
> blanco.

> Sin más por el momento, espero que me puedan ayudar. Les deseo un buen
> día y Gracias anticipadas.

Fernanda,

Lo que debieras poner en la celda C2 sería:
=SI(Buscarv(B2;$A$2:$A$9;1;0)²;"PARA PAGAR";"")

Luego copia la formula hasta la C10000.

Saludos- Ocultar texto de la cita -

- Mostrar texto de la cita -




Perdón, ahora si
=SI(ESERROR(BUSCARV(B3;$A$2:$A$9;1;0));"";"PARA PAGAR")

Saludos..
Respuesta Responder a este mensaje
#7 Héctor Miguel
03/05/2007 - 03:28 | Informe spam
hola, chicos ! [y... solo por no 'dejarlo en el tintero'] :D

si el valor numerico de cero [0] puede ser evaluado como 'falso'...
y cualquier valor numerico diferente de cero [0] se evalua como 'verdadero'...
podria utilizarse solo una funcion contar.si(...) / countif(..)
en lugar de 'descartar' errores y/o incluir solo evaluaciones numericas
-> ESNUMERO(COINCIDIR(... / ISNUMBER(MATCH(...
-> EsError(Buscarv(...

saludos,
hector.

KL escribio en el mensaje ...
Si es absolutamente necesario hacerlo mediante macros, aqui van dos opciones mias:

Op1: Rapida

Sub test1()
Dim rngDatos As Range
With ActiveSheet
Set rngDatos = .Range(.Cells(2, "B"), .Cells(.Rows.Count, "B").End(xlUp))
End With
rngDatos.Offset(, 1) = Evaluate("IF(ISNUMBER(MATCH(" & _
rngDatos.Address(, , , True) & ",$A$2:$A$9,0)),""PARA PAGAR"","""")")
End Sub

Op2: Mas lenta

Sub test2()
Dim rngConceptos As Range
Dim rngDatos As Range
Dim Celda As Range
With ActiveSheet
Set rngConceptos = .[A2:A9]
Set rngDatos = .Range(.Cells(2, "B"), .Cells(.Rows.Count, "B").End(xlUp))
End With
Application.ScreenUpdating = False
For Each Celda In rngDatos
If Not IsError(Application.Match(Celda, rngConceptos, 0)) _
Then Celda.Offset(, 1) = "PARA PAGAR"
Next Celda
Application.ScreenUpdating = True
End Sub

Saludos,
KL


"KL" wrote in message news:
Hola Arcano,

Me parece que no has probado tu formula ;-)

Saludos,
KL

"Arcano" wrote in message news:
On 2 mayo, 15:03, "KL" wrote:
Suponiendo que...
- la lista de la columna A esta en el rango [A2:A9]
- la lista de la columna B empieza desde la celda [B2]

Prueba poner la siguiente formula en la celda [C2] y copiarla hacia abajo:

=SI(ESNUMERO(COINCIDIR(B2;$A$2:$A$9;0));"PARA PAGAR";"")

Saludos,
KL

wrote in messagenews:

Hola a Todos, espero que se encuentren bien. Una vez más recurro a ustedes, para resolver la siguiente situación:

Necesito una macro que haga lo siguiente:

Tengo una lista con 8 conceptos en la columna "A":

"Columna A"
Comisiones
Descuentos
Ventas
Compras
Viaticos
Impuestos
Sueldos
Honorarios

En la columna B aparece una lista con aproximadamente 150 diferentes conceptos que se repiten desde la celda B2 hasta B10000.
Lo que necesito es una macro que value los conceptos de cada una de las celdas en la columna B
y compare con la lista de 8 conceptos de la columna A, si el concepto en la columna B se encuentra dentro de la lista de "A"
que en la celda correspondiente en "C" ponga "PARA PAGAR", de lo contrario, que deje la celda correspondiente en "C" en blanco.



Lo que debieras poner en la celda C2 sería:
=SI(Buscarv(B2;$A$2:$A$9;1;0)²;"PARA PAGAR";"")

Luego copia la formula hasta la C10000.

Saludos
Respuesta Responder a este mensaje
#8 KL
03/05/2007 - 08:46 | Informe spam
Hola chicos,

"Héctor Miguel" wrote
podria utilizarse solo una funcion contar.si(...) / countif(..)
en lugar de 'descartar' errores y/o incluir solo evaluaciones numericas



En principio de acuerdo, solo que, si no me equivoco, con grandes cantidades de datos CONTAR.SI resulta mas lento que
ESNUMERO(COINCIDIR(...))

Saludos,
KL
Respuesta Responder a este mensaje
#9 Héctor Miguel
03/05/2007 - 09:16 | Informe spam
hola, KL !

"Hector Miguel" wrote
podria utilizarse solo una funcion contar.si(...) / countif(..)
en lugar de 'descartar' errores y/o incluir solo evaluaciones numericas



En principio de acuerdo, solo que, si no me equivoco, con grandes cantidades de datos
CONTAR.SI resulta mas lento que ESNUMERO(COINCIDIR(...))



[segun entiendo]... al formula ESNUMERO(COINCIDIR(...)) 'trabaja matricialmente'
-> aunque NO es una formula 'matricial' que deba introducirse/ediarse terminandola con {ctrl}+{shift}+{enter}
mas bien, del 'estilo' de un =sumar(si(...)) o de un =sumaproducto(...) -?-

-> en la siguiente pagina hay una 'significativa reduccion' de tiempo/recursos/... al cambiar a =sumar.si(...) o =contar.si(...)
SUM with Multiple Conditions: http://www.decisionmodels.com/optspeedk.htm
[incluso combinando con un desref/offset]
-> en esta pagina: http://www.decisionmodels.com/optsp...ed_Lookups comenta lo siguiente:
"If you cannot use two cells then use COUNTIF, on average it is faster than an exact match lookup:"
"IF (COUNTIF(lookuparray,lookupvalue)=0, 0, VLOOKUP(lookupval, table, 2 FALSE))"

[igual y soy yo quien interpreta no muy bien los terminos de ventajas/rapidez/elementos/...] -?-

saludos,
hector.
Respuesta Responder a este mensaje
#10 KL
03/05/2007 - 10:11 | Informe spam
Hola HM,

[segun entiendo]... al formula ESNUMERO(COINCIDIR(...)) 'trabaja matricialmente'
-> aunque NO es una formula 'matricial' que deba introducirse/ediarse terminandola con {ctrl}+{shift}+{enter}
mas bien, del 'estilo' de un =sumar(si(...)) o de un =sumaproducto(...) -?-

-> en la siguiente pagina hay una 'significativa reduccion' de tiempo/recursos/... al cambiar a =sumar.si(...) o =contar.si(...)
SUM with Multiple Conditions: http://www.decisionmodels.com/optspeedk.htm
[incluso combinando con un desref/offset]
-> en esta pagina: http://www.decisionmodels.com/optsp...ed_Lookups comenta lo siguiente:
"If you cannot use two cells then use COUNTIF, on average it is faster than an exact match lookup:"
"IF (COUNTIF(lookuparray,lookupvalue)=0, 0, VLOOKUP(lookupval, table, 2 FALSE))"



HW: Dell Precision M90, Intel Core Duo 2.16Ghz, RAM 3.326Mb (4.000Mb), nVidia FX 2500 (512Mb)
OS: Vista Ultimate Eng
MSO: XL2007 Ultimate Eng

[A2:A9] - la lista de los 9 conceptos
[B2:B10000] - todas las celdas llenas
[C2:C10000] - =SI(ESNUMERO(COINCIDIR(B2;$A$2:$A$9;0));"PARA PAGAR";"")
[D2:D10000] - =SI(CONTAR.SI($A$2:$A$9;B2);"PARA PAGAR";"")

Tiempo medio de 5 recalculos:
[C2:C10000] - 78,931 ms
[D2:D10000] - 107,886 ms

Medido por: RangeCalc (del mismo C.Williams)

Y sera que XL2007 ha cambiado algo en el motor de recalculo ya que me esperaba una diferencia mayor :-)

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