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

:-)

Mostrar la cita
#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:
Mostrar la cita
me
Mostrar la cita
pero
Mostrar la cita
mismo
Mostrar la cita
funcione
Mostrar la cita
#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:
Mostrar la cita
=SI(ESNOD(BUSCARV(A1;$C$1:$C$10;1;FALSO));"";BUSCARV(A1;$C$1:$C$10;1;FALSO))
Mostrar la cita
extra
Mostrar la cita
elabore
Mostrar la cita
otro
Mostrar la cita
hubo
Mostrar la cita
LookAt:> _
Mostrar la cita
#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:
Mostrar la cita
#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:
Mostrar la cita
Ads by Google
Search Busqueda sugerida