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

#6 Insumos
06/02/2007 - 17:58 | Informe spam
J.P. tu codigo funciona perfectamente y es lo que necesitaba!! Muchisimas
gracias. Sos un genio!

"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 -
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida