Comparación de dos listados con VBA

06/02/2007 - 01:18 por Insumos | Informe spam
Hola gente del Foro:

Tengo dos listados y necesito que el excell me los compare y luego elabore
un reporte con las coincidencias que encontró. Supongamos que un listado
esta en las celdas de una hoja de la A1 hasta la A10, mientras que el otro
se encuentra desde la C1 hasta la C10 y que en la columna E quisiera que me
pusiera las coincidencias que encontro y que deje en blanco donde no hubo
coincidencia.
Elaboré el siguiente código con mis conocimientos limitados, funciona, pero
ovbiamente solo funciona para el primer item del listado, y seguir el mismo
procedimiento para todos los item seria muy engorroso:

Sub Listado()

Dim Nombre As String
Range("A1").Select
Nombre = ActiveCell

Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
, SearchFormat:=False).Activate
Selection.Copy
ActiveCell.Offset(0, 2).Select
ActiveSheet.Paste
End Sub

Hay manera de hacer algo con un codigo más ingenioso, simple y que funcione
mejor? Estoy seguro de que si, pero no se la manera.
Desde ya muchas gracias!!
CONTADURIA

Preguntas similare

Leer las respuestas

#1 victorbcn1952
06/02/2007 - 08:50 | Informe spam
Si no te es imprescindible hacerlo en código, prueba esta fórmula en
E1:

=SI(A1Á;A1;"")

y cópiala hasta E10

:-)

Hola gente del Foro:

Tengo dos listados y necesito que el excell me los compare y luego elabore
un reporte con las coincidencias que encontró. Supongamos que un listado
esta en las celdas de una hoja de la A1 hasta la A10, mientras que el otro
se encuentra desde la C1 hasta la C10 y que en la columna E quisiera que me
pusiera las coincidencias que encontro y que deje en blanco donde no hubo
coincidencia.
Elaboré el siguiente código con mis conocimientos limitados, funciona, pero
ovbiamente solo funciona para el primer item del listado, y seguir el mismo
procedimiento para todos los item seria muy engorroso:

Sub Listado()

Dim Nombre As String
Range("A1").Select
Nombre = ActiveCell

Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
, SearchFormat:=False).Activate
Selection.Copy
ActiveCell.Offset(0, 2).Select
ActiveSheet.Paste
End Sub

Hay manera de hacer algo con un codigo más ingenioso, simple y que funcione
mejor? Estoy seguro de que si, pero no se la manera.
Desde ya muchas gracias!!
CONTADURIA
Respuesta Responder a este mensaje
#2 L. Garcia
06/02/2007 - 09:59 | Informe spam
Hola:

Yo usaria la funcion BUSCARV en la columna E:

=SI(ESNOD(BUSCARV(A1;$C$1:$C$10;1;FALSO));"";BUSCARV(A1;$C$1:$C$10;1;FALSO))

Espero que te sirva.

Saludos

PD: ¿ Alguien sabe como 'sugerir' a Microsoft que añadan un parametro extra
opcional a todas las funciones para indicar el valor de retorno cuando el
valor sea #NA ?

La funcion anterior podria quedar tal como asi:

=BUSCARV(A1;$C$1:$C$10;1;FALSO;"cuando sea #na quiero que devuelva este
texto")

Mucho mas claro, explicito y evitas posibles errores si 'te olvidas' de
cambiar la funcion, puesto que la tienes que poner 2 veces.

PD2: Ya se que se puede crear una funcion NZ() o similar en VBA, pero ya
dependes de macros, seguridad, etc.


"Insumos" escribió en el mensaje
news:
Hola gente del Foro:

Tengo dos listados y necesito que el excell me los compare y luego elabore
un reporte con las coincidencias que encontró. Supongamos que un listado
esta en las celdas de una hoja de la A1 hasta la A10, mientras que el otro
se encuentra desde la C1 hasta la C10 y que en la columna E quisiera que


me
pusiera las coincidencias que encontro y que deje en blanco donde no hubo
coincidencia.
Elaboré el siguiente código con mis conocimientos limitados, funciona,


pero
ovbiamente solo funciona para el primer item del listado, y seguir el


mismo
procedimiento para todos los item seria muy engorroso:

Sub Listado()

Dim Nombre As String
Range("A1").Select
Nombre = ActiveCell

Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues, LookAt:_
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
, SearchFormat:=False).Activate
Selection.Copy
ActiveCell.Offset(0, 2).Select
ActiveSheet.Paste
End Sub

Hay manera de hacer algo con un codigo más ingenioso, simple y que


funcione
mejor? Estoy seguro de que si, pero no se la manera.
Desde ya muchas gracias!!
CONTADURIA


Respuesta Responder a este mensaje
#3 Insumos
06/02/2007 - 14:49 | Informe spam
Muchas gracias por sus amables respuestas. Las dos fórmulas que me proponen
funcionan a la perfección. Igualmente mi idea era hacerlo por código, ya que
ese código formaria parte de un programita algo más complejo que además de
eso haría algunas otras cosillas combinadas. Si saben la manera de hacerlo
por código por favor avisen! Muchas gracias por su atención!!


"L. Garcia" escribió en el mensaje
news:
Hola:

Yo usaria la funcion BUSCARV en la columna E:




=SI(ESNOD(BUSCARV(A1;$C$1:$C$10;1;FALSO));"";BUSCARV(A1;$C$1:$C$10;1;FALSO))

Espero que te sirva.

Saludos

PD: ¿ Alguien sabe como 'sugerir' a Microsoft que añadan un parametro


extra
opcional a todas las funciones para indicar el valor de retorno cuando el
valor sea #NA ?

La funcion anterior podria quedar tal como asi:

=BUSCARV(A1;$C$1:$C$10;1;FALSO;"cuando sea #na quiero que devuelva este
texto")

Mucho mas claro, explicito y evitas posibles errores si 'te olvidas' de
cambiar la funcion, puesto que la tienes que poner 2 veces.

PD2: Ya se que se puede crear una funcion NZ() o similar en VBA, pero ya
dependes de macros, seguridad, etc.


"Insumos" escribió en el mensaje
news:
> Hola gente del Foro:
>
> Tengo dos listados y necesito que el excell me los compare y luego


elabore
> un reporte con las coincidencias que encontró. Supongamos que un listado
> esta en las celdas de una hoja de la A1 hasta la A10, mientras que el


otro
> se encuentra desde la C1 hasta la C10 y que en la columna E quisiera que
me
> pusiera las coincidencias que encontro y que deje en blanco donde no


hubo
> coincidencia.
> Elaboré el siguiente código con mis conocimientos limitados, funciona,
pero
> ovbiamente solo funciona para el primer item del listado, y seguir el
mismo
> procedimiento para todos los item seria muy engorroso:
>
> Sub Listado()
>
> Dim Nombre As String
> Range("A1").Select
> Nombre = ActiveCell
>
> Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues,


LookAt:> _
> xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
> MatchCase:=False _
> , SearchFormat:=False).Activate
> Selection.Copy
> ActiveCell.Offset(0, 2).Select
> ActiveSheet.Paste
> End Sub
>
> Hay manera de hacer algo con un codigo más ingenioso, simple y que
funcione
> mejor? Estoy seguro de que si, pero no se la manera.
> Desde ya muchas gracias!!
> CONTADURIA
>
>


Respuesta Responder a este mensaje
#4 J.P.
06/02/2007 - 16:48 | Informe spam
Buenos Días

Intenta con este codigo

Sub Listado()
Dim Nombre As String
Dim i As Integer
Dim c As Range
Dim firstAddress As String
Range("A1").Select
'Borra lo que se tiene y coloca encabezado
Range("D1:E10").ClearContents
Cells(1, 4) = "Valores Encontrados"
Cells(1, 5) = "Número de Repeticiones"
For i = 1 To 10
Nombre = Cells(i, 1)
With Range("C1:C10")
Set c = .Find(Nombre)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c = Nombre Then
con = con + 1
If con = 1 Then
Cells(Range("D65536").End(xlUp).Offset(1,
0).Row, 4) = c
End If
Cells(Range("D65536").End(xlUp).Offset(0, 1).Row, 5) con
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
con = 0
Next
End Sub

Con este codigo te da en la columna D los valores repetido y en la E
el numero de veces que se repite dicho valor.

Mirala y me cuentas.

On 6 feb, 08:49, "Insumos" wrote:
Muchas gracias por sus amables respuestas. Las dos fórmulas que me proponen
funcionan a la perfección. Igualmente mi idea era hacerlo por código, ya que
ese código formaria parte de un programita algo más complejo que además de
eso haría algunas otras cosillas combinadas. Si saben la manera de hacerlo
por código por favor avisen! Muchas gracias por su atención!!

"L. Garcia" escribió en el mensajenews: Hola:

> Yo usaria la funcion BUSCARV en la columna E:

=SI(ESNOD(BUSCARV(A1;$C$1:$C$10;1;FALSO));"";BUSCARV(A1;$C$1:$C$10;1;FALSO)­)





> Espero que te sirva.

> Saludos

> PD: ¿ Alguien sabe como 'sugerir' a Microsoft que añadan un parametro
extra
> opcional a todas las funciones para indicar el valor de retorno cuando el
> valor sea #NA ?

> La funcion anterior podria quedar tal como asi:

> =BUSCARV(A1;$C$1:$C$10;1;FALSO;"cuando sea #na quiero que devuelva este
> texto")

> Mucho mas claro, explicito y evitas posibles errores si 'te olvidas' de
> cambiar la funcion, puesto que la tienes que poner 2 veces.

> PD2: Ya se que se puede crear una funcion NZ() o similar en VBA, pero ya
> dependes de macros, seguridad, etc.

> "Insumos" escribió en el mensaje
>news:
> > Hola gente del Foro:

> > Tengo dos listados y necesito que el excell me los compare y luego
elabore
> > un reporte con las coincidencias que encontró. Supongamos que un listado
> > esta en las celdas de una hoja de la A1 hasta la A10, mientras que el
otro
> > se encuentra desde la C1 hasta la C10 y que en la columna E quisiera que
> me
> > pusiera las coincidencias que encontro y que deje en blanco donde no
hubo
> > coincidencia.
> > Elaboré el siguiente código con mis conocimientos limitados, funciona,
> pero
> > ovbiamente solo funciona para el primer item del listado, y seguir el
> mismo
> > procedimiento para todos los item seria muy engorroso:

> > Sub Listado()

> > Dim Nombre As String
> > Range("A1").Select
> > Nombre = ActiveCell

> > Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues,
LookAt:> > _
> > xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
> > MatchCase:=False _
> > , SearchFormat:=False).Activate
> > Selection.Copy
> > ActiveCell.Offset(0, 2).Select
> > ActiveSheet.Paste
> > End Sub

> > Hay manera de hacer algo con un codigo más ingenioso, simple y que
> funcione
> > mejor? Estoy seguro de que si, pero no se la manera.
> > Desde ya muchas gracias!!
> > CONTADURIA- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#5 César H
06/02/2007 - 17:51 | Informe spam
J.P. no es para mi, pero lo probé y creo que es lo que el necesita, funciona
perfecto!




"J.P." escribió en el mensaje
news:
Buenos Días

Intenta con este codigo

Sub Listado()
Dim Nombre As String
Dim i As Integer
Dim c As Range
Dim firstAddress As String
Range("A1").Select
'Borra lo que se tiene y coloca encabezado
Range("D1:E10").ClearContents
Cells(1, 4) = "Valores Encontrados"
Cells(1, 5) = "Número de Repeticiones"
For i = 1 To 10
Nombre = Cells(i, 1)
With Range("C1:C10")
Set c = .Find(Nombre)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c = Nombre Then
con = con + 1
If con = 1 Then
Cells(Range("D65536").End(xlUp).Offset(1,
0).Row, 4) = c
End If
Cells(Range("D65536").End(xlUp).Offset(0, 1).Row, 5) con
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
con = 0
Next
End Sub

Con este codigo te da en la columna D los valores repetido y en la E
el numero de veces que se repite dicho valor.

Mirala y me cuentas.

On 6 feb, 08:49, "Insumos" wrote:
Muchas gracias por sus amables respuestas. Las dos fórmulas que me
proponen
funcionan a la perfección. Igualmente mi idea era hacerlo por código, ya
que
ese código formaria parte de un programita algo más complejo que además de
eso haría algunas otras cosillas combinadas. Si saben la manera de hacerlo
por código por favor avisen! Muchas gracias por su atención!!

"L. Garcia" escribió en el
mensajenews: Hola:

> Yo usaria la funcion BUSCARV en la columna E:

=SI(ESNOD(BUSCARV(A1;$C$1:$C$10;1;FALSO));"";BUSCARV(A1;$C$1:$C$10;1;FALSO)­)





> Espero que te sirva.

> Saludos

> PD: ¿ Alguien sabe como 'sugerir' a Microsoft que añadan un parametro
extra
> opcional a todas las funciones para indicar el valor de retorno cuando
> el
> valor sea #NA ?

> La funcion anterior podria quedar tal como asi:

> =BUSCARV(A1;$C$1:$C$10;1;FALSO;"cuando sea #na quiero que devuelva este
> texto")

> Mucho mas claro, explicito y evitas posibles errores si 'te olvidas' de
> cambiar la funcion, puesto que la tienes que poner 2 veces.

> PD2: Ya se que se puede crear una funcion NZ() o similar en VBA, pero ya
> dependes de macros, seguridad, etc.

> "Insumos" escribió en el mensaje
>news:
> > Hola gente del Foro:

> > Tengo dos listados y necesito que el excell me los compare y luego
elabore
> > un reporte con las coincidencias que encontró. Supongamos que un
> > listado
> > esta en las celdas de una hoja de la A1 hasta la A10, mientras que el
otro
> > se encuentra desde la C1 hasta la C10 y que en la columna E quisiera
> > que
> me
> > pusiera las coincidencias que encontro y que deje en blanco donde no
hubo
> > coincidencia.
> > Elaboré el siguiente código con mis conocimientos limitados, funciona,
> pero
> > ovbiamente solo funciona para el primer item del listado, y seguir el
> mismo
> > procedimiento para todos los item seria muy engorroso:

> > Sub Listado()

> > Dim Nombre As String
> > Range("A1").Select
> > Nombre = ActiveCell

> > Cells.Find(What:=Nombre, After:=ActiveCell, LookIn:=xlValues,
LookAt:> > _
> > xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
> > MatchCase:=False _
> > , SearchFormat:=False).Activate
> > Selection.Copy
> > ActiveCell.Offset(0, 2).Select
> > ActiveSheet.Paste
> > End Sub

> > Hay manera de hacer algo con un codigo más ingenioso, simple y que
> funcione
> > mejor? Estoy seguro de que si, pero no se la manera.
> > Desde ya muchas gracias!!
> > CONTADURIA- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida