Buscar Valor

04/04/2005 - 22:20 por pedro66 | Informe spam
Debo ingresar datos en una columna, celda a celda. Estos
datos son numeros de clientes (Ejemplo:123454). A veces
estos numeros se repiten. Necesito a traves de una función
o macro, que el valor o numero repetido se me indique en
otra celda y ade mas me entregue un contador indicando
cuantas veces se a repetido.
En resumen necesito diferencial los ingresados mas de una
vez y en que cantidad. Esto lo he intentado en Excel,

Preguntas similare

Leer las respuestas

#1 KL
05/04/2005 - 02:35 | Informe spam
Hola Pedro,

Mira a ver si te sirve el siguiente codigo. Este codigo asume que los
valores se encuentran en la hoja "Hoja1" y los resultados se deben devolver
en la hoja "Resumen". Ademas asume que no habria mas de 9999 valores unicos
en tu lista. Cambia los nombres de hojas en el codigo por los reales.

Saludos,
KL

'Inicio Codigo-
Sub BuscarDuplicadas()
Dim C As Range
Dim Resultados As Range
Dim res As Variant 'resultado de Match()
Dim j As Long
Dim i As Long
Dim k As Long
Dim LLaves As Variant
Dim Veces As Variant
Dim Direcciones As Variant
Dim miRng As Range 'variable para el rango a evaluar.

Set Resultados = Worksheets("Resumen").Range("A2:C10000")

'Establece el rango a evaluar para la hoja.
With Worksheets("Hoja1")
Set miRng = .Range(.Cells(2, 1), _
.Cells(.Range("A65536").End(xlUp).Row, 1))
End With

For Each C In miRng
'saltar celdas con error
If Not IsError(C.Value) Then
'saltar celdas vacias
If C.Value <> "" Then
If j = 0 Then
res = CVErr(xlErrNA)
ReDim LLaves(1 To 1)
ReDim Veces(1 To 1)
ReDim Direcciones(1 To 1)
Else
res = Application.Match(C.Value, LLaves, 0)
End If
If IsError(res) Then
j = j + 1
ReDim Preserve LLaves(1 To j)
ReDim Preserve Veces(1 To j)
ReDim Preserve Direcciones(1 To j)
LLaves(j) = C.Value
Veces(j) = 1
Direcciones(j) = LaDireccion(C)
Else
Veces(res) = Veces(res) + 1
Direcciones(res) = Direcciones(res) & " " _
& LaDireccion(C)
End If
End If
End If
Next C

'Borrar resultados anteriores
Resultados.ClearContents

'Mostrar resultados
k = 1
For i = 1 To j
If Veces(i) > 1 Then
Resultados(k, 1) = LLaves(i)
Resultados(k, 2) = Veces(i)
Resultados(k, 3) = Direcciones(i)
k = k + 1
End If
Next i

Resultados.Resize(k, 3).Sort key1:=Resultados.Cells(1, 2), _
order1:=xlDescending, header:=xlNo
End Sub

Private Function LaDireccion(C As Range) As String
Dim s As String
Dim i As Integer
s = C.Address(False, False, xlA1, True)
i = InStr(1, s, "]")
LaDireccion = Mid(s, i + 1)
End Function
'Fin Codigo
Respuesta Responder a este mensaje
#2 gcasado
05/04/2005 - 18:12 | Informe spam
El código del mensaje anterior lo veo bastante complicado, aunque no
puedo decir que no funcione. Tal vez una solución más simple a la
pregunta inicial sería seleccionar todos los datos e ir al menú
"Datos" "Ordenar" y ordenarlos por la columna del número de cliente.

Una vez ordenados se puede ver los repetidos, y cuánto se repiten.
Luego se puede deshacer la ordenación, o copiarla y pegarla en otra
hoja.

Todo depende de la amplitud de los datos que se quieren consultar.
Respuesta Responder a este mensaje
#3 KL
05/04/2005 - 18:33 | Informe spam
"Angel" wrote in message
news:
El código del mensaje anterior lo veo bastante complicado, aunque no
puedo decir que no funcione. Tal vez una solución más simple a la
pregunta inicial sería seleccionar todos los datos e ir al menú
"Datos" "Ordenar" y ordenarlos por la columna del número de cliente.

Una vez ordenados se puede ver los repetidos, y cuánto se repiten.
Luego se puede deshacer la ordenación, o copiarla y pegarla en otra
hoja.

Todo depende de la amplitud de los datos que se quieren consultar.
Respuesta Responder a este mensaje
#4 KL
05/04/2005 - 18:52 | Informe spam
Hola Angel,

1) La pregunta inicial decia "...atraves de macro o funcion..." lo que creo
supone la utomatizacion del proceso :-)

2) El macro es complejo, pero tiene la ventaja de estar hecho ya. No es
necesario entenderlo para poder usarlo. Solo es cuestion de colocarlo en el
modulo correspondiente y cambiar las dos variables que hay ;-)

3) Ya puestos a ofrecer soluciones manuales, hay una solucion semi-manual
que requiere menos operaciones y no altera el orden de los datos de origen:
- activar la hoja en la cual se quiere introducir las estadisticas
- ir al menu Datos>Filtro>Filtro Avanzado
- marcar la opcion "Copiar a otro sitio"
- meter el cursor en la primera casilla y seleccionar el rango que contiene
los numeros de cliente (o numeroos y nombres, o la fila entera)
- meter el cursor en la tercera casilla y seleccionar la celda a partir de
la cual se quiere introducir las estadisticas
- marcar la opcion "Solo valores unicos"
- Pulsar Aceptar
- suponiendo que la base de datos se encuentra en el rango [A1:D100] de la
Hoja1 y la lista de numeros de cliente unicos se ha introducido a partir de
la celda [A1] en la Hoja2, en la [B1] de esta ultima hoja introducimos la
siguiente formula y la copiamos hacia abajo:

=CONTAR.SI(Hoja1!$A$1:$D$100;A1)

Saludos,
KL



"Angel" wrote in message
news:
El código del mensaje anterior lo veo bastante complicado, aunque no
puedo decir que no funcione. Tal vez una solución más simple a la
pregunta inicial sería seleccionar todos los datos e ir al menú
"Datos" "Ordenar" y ordenarlos por la columna del número de cliente.

Una vez ordenados se puede ver los repetidos, y cuánto se repiten.
Luego se puede deshacer la ordenación, o copiarla y pegarla en otra
hoja.

Todo depende de la amplitud de los datos que se quieren consultar.
Respuesta Responder a este mensaje
#5 C. A. G.
05/04/2005 - 21:23 | Informe spam
Pues me estoy ocupando en comprobar tus dos soluciones. En primer lugar es
verdad que la pregunta dice macro o función. En una primera lectura lo veía
muy simple, y tu macro muy larga y complicada.

La macro veo que funciona, poniendo los números que pueden estar repetidos
en la columna A, no en otra. Ahora me has dejado con el problema de
estudiármela y entenderla.

La segunda solución "semi-manual" sigo "luchando" con ella, porque todavía
no me sale.

Espero ir comprendiendo todo antes de cenar. Gracias por las aclaraciones.


"KL" escribió en el mensaje
news:#r6ot$
Hola Angel,

1) La pregunta inicial decia "...atraves de macro o funcion..." lo que


creo
supone la utomatizacion del proceso :-)

2) El macro es complejo, pero tiene la ventaja de estar hecho ya. No es
necesario entenderlo para poder usarlo. Solo es cuestion de colocarlo en


el
modulo correspondiente y cambiar las dos variables que hay ;-)

3) Ya puestos a ofrecer soluciones manuales, hay una solucion semi-manual

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