Números repetidos

21/12/2004 - 17:27 por Raúl Z. | Informe spam
Hola a todos
Tengo un libro con 20 hojas y en cada hoja tengo 4 columnas con números x ej.

A B C D
1 28 32 11 9
2 36 75 8 54
3 33 43 6 32
4 29 98 5 28
5 43 77 63 88
6 11 84 13 15

Como puedo hacer para informar en una hoja distinta los número repetidos, o
sea que siguiendo el ej. anterior me diga:

A
1 28
2 32
3 11

etc.etc.
Muchas gracias
Raúl

Preguntas similare

Leer las respuestas

#36 KL
29/12/2004 - 11:33 | Informe spam
Raul,

Por si acaso he probado el codigo y he detectado un pequeno error. Tendras q
sustituir las siguientes lineas:

'KL: Establece el rango a evaluar para la hoja.
Set miRng = Intersect(Hoja.Range("A:D"), _
Hoja.UsedRange).Offset(1, 0).Resize(rng.Rows.Count - 1)



con:

'KL: Establece el rango a evaluar para la hoja.
With Intersect(Hoja.Range("A:D"), Hoja.UsedRange)
Set miRng = .Offset(1, 0).Resize(.Rows.Count - 1)
End With

Saludos,
KL
(XL 97, 2000, 2002)

Ojo - mi separador de argumentos en las formulas es la coma ",".
Puede q necesites cambiarla por punto y coma ";".

Para usar mi direccion de correo electronico privada
borra "NOSPAM" y "PLEASE" antes de usarla.

"KL" wrote in message
news:
Raul,

Ahora si! A ver, prueba el codigo de abajo. Ojo-no lo he probado, pero
creo q deberia funcionar. De todas formas me dices si hay problemas. He
puesto mis comentarios precedidos por "KL:".

Saludos,
KL

'Inicio Codigo-
Sub BuscarDuplicadasEnVariasHojas()
Dim Hoja As Worksheet, C As Range, Resultados As Range
Dim res As Variant ' resultado de Match()
Dim j As Long, i As Long, k As Long
Dim LLaves As Variant, Veces As Variant, Direcciones As Variant
Dim miRng As Range 'KL: variable para el rango a evaluar.
Dim Contador As Single 'KL: variable para la cuenta de valores.

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

j = 0
For Each Hoja In ActiveWorkbook.Worksheets
Select Case Hoja.Name
Case "HojaSumar", "Perez", "Sanchez" 'etc.
Case Else
'KL: Establece el rango a evaluar para la hoja.
Set miRng = Intersect(Hoja.Range("A:D"), _
Hoja.UsedRange).Offset(1, 0).Resize(rng.Rows.Count - 1)

'Actualiza la cuenta de valores para cada hoja.
Contador = Contador + WorksheetFunction.Count(miRng)

For Each C In miRng
' cambia el rango si lo quieres
If Not IsError(C.Value) Then ' sin celda con error
If C.Value <> "" Then ' sin celda vacia
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
End Select
Next Hoja

'Mostrar los resultados
Resultados.ClearContents ' borrar resultados viejos
'
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

'KL: Asigna la cuenta total de valores a
'la celda F9 de la hoja "hojasumar"
Sheets("hojasumar").Range("F9") = Contador
End Sub


Private Function LaDireccion(C As Range) As String
Dim s As String, i As Integer
s = C.Address(False, False, xlA1, True)
i = InStr(1, s, "]")
LaDireccion = Mid(s, i + 1)
End Function
'Fin Codigo-

"Raul Z." wrote in message
news:
Haber si soy claro en esta oportunidad K.L.
Te decia que la segunda opcion fue la que funciono bien.
El tema es que tengo que agrupar al final del libro las hojas q no quiero
sumar
por ej. tengo las hojas "pedro", "juan", "jose, "mariano", "claudio" pero
resulta q quiero sumar solo "pedro", "mariano", "claudio" entonces lo que
tengo que hacer es mover manualmente a "juan", "jose", para que lo macro
tome
como primera hoja a "pedro" y como ultima a "claudio",
Hasta aqui bien?
Bueno, lo que preguntaba es si hay alguna forma de incluirlo en la macro
de
los numeros repetidos, ya que las que hojas que no se deben sumar son las
que
excluimos en:
Case "HojaSumar", "Perez", "Sanchez" 'etc.
Case Else
recuerdas ?

Y por ultimo te decia que esta macro quiero que este dentro de la macro
de
numeros repetidos.

Espero haber sido claro
Muchas Gracias

Raul Z.


"KL" escribio:

> La segunda andubo muy bien, ahora tengo un pequenito problema por el
> que
> tengo que agrupar al finar las hojas que no quiero sumar, que son las
> mismas
> de los numero repetidos, se puede asociar esta macro con la de
> repetidos y
> que tome estos? se entiende?

La verdad es q no mucho. ?Puedes explicarlo con un poco mas de detalle?

Saludos,
KL









Respuesta Responder a este mensaje
#37 Raúl Z.
29/12/2004 - 21:59 | Informe spam
Hola K.L.
Efectivamente sustituyendo estas líneas funciona perfectamente.
Además, inserte

Worksheets("HojaSumar").Range("A1:z1000").ClearContents

al comienzo porque sumala esta hoja, analizando el código creia que:

Resultados.ClearContents

borraba todo los resultados, pero no tiene ningun efecto.
Muchisimas gracias esto quedo muy bien, y gracias tambien a todos los que se
interesaron por mi pregunta.

Raúl Z.

"KL" escribió:

Raul,

Por si acaso he probado el codigo y he detectado un pequeno error. Tendras q
sustituir las siguientes lineas:

> 'KL: Establece el rango a evaluar para la hoja.
> Set miRng = Intersect(Hoja.Range("A:D"), _
> Hoja.UsedRange).Offset(1, 0).Resize(rng.Rows.Count - 1)

con:

'KL: Establece el rango a evaluar para la hoja.
With Intersect(Hoja.Range("A:D"), Hoja.UsedRange)
Set miRng = .Offset(1, 0).Resize(.Rows.Count - 1)
End With

Saludos,
KL
(XL 97, 2000, 2002)

Ojo - mi separador de argumentos en las formulas es la coma ",".
Puede q necesites cambiarla por punto y coma ";".

Para usar mi direccion de correo electronico privada
borra "NOSPAM" y "PLEASE" antes de usarla.

"KL" wrote in message
news:
> Raul,
>
> Ahora si! A ver, prueba el codigo de abajo. Ojo-no lo he probado, pero
> creo q deberia funcionar. De todas formas me dices si hay problemas. He
> puesto mis comentarios precedidos por "KL:".
>
> Saludos,
> KL
>
> 'Inicio Codigo-
> Sub BuscarDuplicadasEnVariasHojas()
> Dim Hoja As Worksheet, C As Range, Resultados As Range
> Dim res As Variant ' resultado de Match()
> Dim j As Long, i As Long, k As Long
> Dim LLaves As Variant, Veces As Variant, Direcciones As Variant
> Dim miRng As Range 'KL: variable para el rango a evaluar.
> Dim Contador As Single 'KL: variable para la cuenta de valores.
>
> Set Resultados = Worksheets("HojaSumar").Range("A2:C10000")
>
> j = 0
> For Each Hoja In ActiveWorkbook.Worksheets
> Select Case Hoja.Name
> Case "HojaSumar", "Perez", "Sanchez" 'etc.
> Case Else
> 'KL: Establece el rango a evaluar para la hoja.
> Set miRng = Intersect(Hoja.Range("A:D"), _
> Hoja.UsedRange).Offset(1, 0).Resize(rng.Rows.Count - 1)
>
> 'Actualiza la cuenta de valores para cada hoja.
> Contador = Contador + WorksheetFunction.Count(miRng)
>
> For Each C In miRng
> ' cambia el rango si lo quieres
> If Not IsError(C.Value) Then ' sin celda con error
> If C.Value <> "" Then ' sin celda vacia
> 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
> End Select
> Next Hoja
>
> 'Mostrar los resultados
> Resultados.ClearContents ' borrar resultados viejos
> '
> 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
>
> 'KL: Asigna la cuenta total de valores a
> 'la celda F9 de la hoja "hojasumar"
> Sheets("hojasumar").Range("F9") = Contador
> End Sub
>
>
> Private Function LaDireccion(C As Range) As String
> Dim s As String, i As Integer
> s = C.Address(False, False, xlA1, True)
> i = InStr(1, s, "]")
> LaDireccion = Mid(s, i + 1)
> End Function
> 'Fin Codigo-
>
> "Raul Z." wrote in message
> news:
>> Haber si soy claro en esta oportunidad K.L.
>> Te decia que la segunda opcion fue la que funciono bien.
>> El tema es que tengo que agrupar al final del libro las hojas q no quiero
>> sumar
>> por ej. tengo las hojas "pedro", "juan", "jose, "mariano", "claudio" pero
>> resulta q quiero sumar solo "pedro", "mariano", "claudio" entonces lo que
>> tengo que hacer es mover manualmente a "juan", "jose", para que lo macro
>> tome
>> como primera hoja a "pedro" y como ultima a "claudio",
>> Hasta aqui bien?
>> Bueno, lo que preguntaba es si hay alguna forma de incluirlo en la macro
>> de
>> los numeros repetidos, ya que las que hojas que no se deben sumar son las
>> que
>> excluimos en:
>> Case "HojaSumar", "Perez", "Sanchez" 'etc.
>> Case Else
>> recuerdas ?
>>
>> Y por ultimo te decia que esta macro quiero que este dentro de la macro
>> de
>> numeros repetidos.
>>
>> Espero haber sido claro
>> Muchas Gracias
>>
>> Raul Z.
>>
>>
>> "KL" escribio:
>>
>>> > La segunda andubo muy bien, ahora tengo un pequenito problema por el
>>> > que
>>> > tengo que agrupar al finar las hojas que no quiero sumar, que son las
>>> > mismas
>>> > de los numero repetidos, se puede asociar esta macro con la de
>>> > repetidos y
>>> > que tome estos? se entiende?
>>>
>>> La verdad es q no mucho. ?Puedes explicarlo con un poco mas de detalle?
>>>
>>> Saludos,
>>> KL
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#38 KL
29/12/2004 - 22:29 | Informe spam
Raul,

creia que:.. Resultados.ClearContents
borraba todo los resultados, pero no tiene ningun efecto.



?Estas seguro? a mi si q me funciona a la perfeccion. Yo q tu lo comprobaba
una vez mas, por ejemplo: si el resultado de la ultima extraccion ha sido
digamos 100 filas en la hoja "HojaSumar", copia la ultima fila hacia abajo
hasta la fila digamos 110 y vuelve a usar el macro. Si el resultado velve a
ser 100 filas, entonces si q se borran los datos anteriores.

o

reduce el numero de valores repetidos, p.ej. algo tan drastico como dejando
solo 2 o 3 filas en cada una de las hojas de origen, y vuelve a usar el
macro. Si el numero de filas en la hoja "HojaSumar" sigue siendo 100
entonces probablemente tengamos un problema.

De todas formas, por puro perfeccionismo :-), yo sustituiria la linea:

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

con:

With Worksheets("HojaSumar").UsedRange
Set Resultados = .Offset(1, 0).Resize(.Rows.Count - 1)
End With

Saludos,
KL
Respuesta Responder a este mensaje
#39 Raúl Z.
30/12/2004 - 13:03 | Informe spam
Hola K.L.
Sustituyendo:
Set Resultados = Worksheets("HojaSumar").Range("A2:C10000")

con:

With Worksheets("HojaSumar").UsedRange
Set Resultados = .Offset(1, 0).Resize(.Rows.Count - 1)
End With


me da error en:
Resultados.Resize(k, 3).Sort key1:=Resultados.Cells(1, 2),
order1:=xlDescending, header:=xlNo

Por otra parte:
Resultados.ClearContents
Borra los resultado no repetidos pero muestra como repetidos los que están
dentro de "hojasumar"

Y...
Otra pregunta fuera de esto:
Existe algún compilador de libros de excel, para que me genere un .exe y lo
pueda usar una pesona sin necesidad de tener el excel instalado?

Gracias

Raúl



"KL" escribió:

Raul,

>creia que:.. Resultados.ClearContents
> borraba todo los resultados, pero no tiene ningun efecto.

?Estas seguro? a mi si q me funciona a la perfeccion. Yo q tu lo comprobaba
una vez mas, por ejemplo: si el resultado de la ultima extraccion ha sido
digamos 100 filas en la hoja "HojaSumar", copia la ultima fila hacia abajo
hasta la fila digamos 110 y vuelve a usar el macro. Si el resultado velve a
ser 100 filas, entonces si q se borran los datos anteriores.

o

reduce el numero de valores repetidos, p.ej. algo tan drastico como dejando
solo 2 o 3 filas en cada una de las hojas de origen, y vuelve a usar el
macro. Si el numero de filas en la hoja "HojaSumar" sigue siendo 100
entonces probablemente tengamos un problema.

De todas formas, por puro perfeccionismo :-), yo sustituiria la linea:

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

con:

With Worksheets("HojaSumar").UsedRange
Set Resultados = .Offset(1, 0).Resize(.Rows.Count - 1)
End With

Saludos,
KL



Respuesta Responder a este mensaje
#40 KL
30/12/2004 - 18:11 | Informe spam
Raul,

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

con:

With Worksheets("HojaSumar").UsedRange
Set Resultados = .Offset(1, 0).Resize(.Rows.Count - 1)
End With


me da error en:
Resultados.Resize(k, 3).Sort key1:=Resultados.Cells(1, 2),
order1:=xlDescending, header:=xlNo



Tienes razon, habria q cambiar mas cosas en el codigo por lo cual q casi es
mejor dejarlo tal cual.

Por otra parte:
Resultados.ClearContents
Borra los resultado no repetidos pero muestra como repetidos los que estan
dentro de "hojasumar"



No he podido detectar nada parecido a lo q dices. ?Como sabes q lo hace?
?Puedes copiar aqui el codigo final q usas o incluso enviarme tu hoja?

Otra pregunta fuera de esto:
Existe algun compilador de libros de excel, para que me genere un .exe y
lo
pueda usar una pesona sin necesidad de tener el excel instalado?



Nunca lo he hecho, pero seguramente hay alguna forma. Yo q tu lo posteaba
como un tema aparte.

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