Problema con fechas duplicadas?

02/11/2005 - 18:16 por pretorian | Informe spam
Estimados amigos

tengo un problemita que me esta volviendo loco...

necesito que el usuario solo seleccione fechas que se encuentran disponibles
(sin duplicados) para rescatar la informacion disponible con esa fecha en
otra hoja..resolvi el problema utilizando filtro avanzado y ligando el
resultado a la validacion de la celda con lista, el problema que de vez en
cuando se vuelve loco y empieza a tirar errores y ya no puedo seguir
utilizando cierro el archivo y su tamaño queda monstruoso, existe alguna
forma menos engorrosa de hacerlo..

si alguien me puede ayudar se lo agradeceria..

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
03/11/2005 - 03:50 | Informe spam
hola, pretorian !

Mostrar la cita
puedes utiizar unos [como] filtros avanzados -pero SOLO- por medio de funciones de hoja de calculo...
si estas dispusto a 'echar a perder' dos -o tres- columnas [y obviamente a 'mantenerlas actualizadas'] :)) [p.e.]
-> suponiendo que las fechas [sin celda con titulo] estan en el rango 'A2:A40'
y que tienes 'disponibles' -para echar a perder- las columnas 'H', 'I', -y quizas tambien la 'J'-...
prueb con el procedimiento que expongo al final del presente :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) introduce la siguiente formula en 'H1' y la copias hasta 'H40' [identifica la primera 'aparicion' de cada fecha]
=(contar.si($a$2:a2,a2)=1)*(max($h$1:h1)+1)
2) introduce la siguiente formula en 'I1' -UNICAMENTE- [para que sepas cuantas fechas son 'unicas', no duplicadas']
=sumaproducto(1/contar.si(a2:a40,a2:a40))
3) introduce la siguiente formula en 'I2' y la copias -al menos- el numero de filas igual a las fechas no duplicadas [o hasta 'I40']
=elegir(1+(filas($i$2:i2)<=$i$1),,indice($a$2:$a$40,coincidir(filas($i$2:i2),$h$2:$h$40,0)))
4) define un nombre que va a hacer referencia a un rango 'dinamico' [el de las fechas sin duplicados en la columna 'I']
[menu] insertar / nombre / definir...
-> nombre [p.e.] Fechas_Tal
-> se refiere a: =desref($i$1,1,,$i$1,1) <= aqui excel va a completar con el nombre de la hoja las referencias a rangos ;)
5) usa el nombre definido en el paso anterior como 'origen' de la lista para las reglas de validacion: =Fechas_Tal

nota: las fechas 'unicas' van a aparecer en la validacion 'tal-cual' aparecen en el rango 'original' [NO necesariamente ordenadas] :-(
-> si necesitas que las fechas en la lista [y el combo de la validacion] aparezcan ordenadas...

6) introduce la siguiente formula en 'J2' [para ordenar las fechas en el rango 'Fechas_Tal']
=elegir(1+(filas($i$2:i2)<=$i$1),,k.esimo.menor(fechas_tal,filas($i$2:i2)))
7) define un nombre que va a hacer referencia a un rango 'dinamico' [el de las fechas sin duplicados en la columna 'I']
[menu] insertar / nombre / definir...
-> nombre [p.e.] Fechas_Ord
-> se refiere a: =desref(fechas_tal,,1)
5) usa el nombre definido en el paso anterior como 'origen' de la lista para las reglas de validacion: =Fechas_Ord
#2 pretorian
03/11/2005 - 13:55 | Informe spam
Hola Hector Miguel... y gracias por responder

intentare con tu respuesta a ver como me va...

de todas maneras buscando en internet encontre la siguiente rutina, pero al
hacerla funcionar el formato de la fecha no esta como la necesito (dd-mm-aa)
puedes echarle una miradita y comentas...?

Sub RemoveDuplicates()
Dim AllCells As Range, Cell As Range
Dim NoDupes As New Collection
Dim i As Integer, j As Integer
Dim Swap1, Swap2, Item

' The items are in A1:A105
Set AllCells = Range("A1:A105")

' The next statement ignores the error caused
' by attempting to add a duplicate key to the collection.
' The duplicate is not added - which is just what we want!
On Error Resume Next
For Each Cell In AllCells
NoDupes.Add Cell.Value, CStr(Cell.Value) >>>probe cambiando a
CDate(Cell.Value) pero no me muestra nada
' Note: the 2nd argument (key) for the Add method must be a string
Next Cell

' Resume normal error handling
On Error GoTo 0

' Update the labels on UserForm1
With UserForm1
.Label1.Caption = "Total Items: " & AllCells.Count
.Label2.Caption = "Unique Items: " & NoDupes.Count
End With

' Sort the collection (optional)
For i = 1 To NoDupes.Count - 1
For j = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(j) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(j)
NoDupes.Add Swap1, before:=j
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove j + 1
End If
Next j
Next i


' Add the sorted, non-duplicated items to a ListBox
For Each Item In NoDupes
UserForm1.ListBox1.AddItem Item
Next Item

' Show the UserForm
UserForm1.Show
End Sub

Saludos de Pretoriano


"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
disponibles (sin duplicados)...
Mostrar la cita
la validacion de la celda con lista
Mostrar la cita
errores y ya no puedo seguir utilizando
Mostrar la cita
menos engorrosa de hacerlo
Mostrar la cita
funciones de hoja de calculo...
Mostrar la cita
'mantenerlas actualizadas'] :)) [p.e.]
Mostrar la cita
'A2:A40'
Mostrar la cita
'I', -y quizas tambien la 'J'-...
Mostrar la cita
[identifica la primera 'aparicion' de cada fecha]
Mostrar la cita
cuantas fechas son 'unicas', no duplicadas']
Mostrar la cita
de filas igual a las fechas no duplicadas [o hasta 'I40']
Mostrar la cita
=elegir(1+(filas($i$2:i2)<=$i$1),,indice($a$2:$a$40,coincidir(filas($i$2:i2)
,$h$2:$h$40,0)))
Mostrar la cita
las fechas sin duplicados en la columna 'I']
Mostrar la cita
completar con el nombre de la hoja las referencias a rangos ;)
Mostrar la cita
para las reglas de validacion: =Fechas_Tal
Mostrar la cita
aparecen en el rango 'original' [NO necesariamente ordenadas] :-(
Mostrar la cita
aparezcan ordenadas...
Mostrar la cita
rango 'Fechas_Tal']
Mostrar la cita
=elegir(1+(filas($i$2:i2)<=$i$1),,k.esimo.menor(fechas_tal,filas($i$2:i2)))
Mostrar la cita
las fechas sin duplicados en la columna 'I']
Mostrar la cita
para las reglas de validacion: =Fechas_Ord
Mostrar la cita
#3 Héctor Miguel
04/11/2005 - 04:32 | Informe spam
hola, pretorian !

Mostrar la cita
[aparentemente] la solucion que buscas, si ha de ser por macros, 'necesita' contemplar los sistemas de fechas...
[ademas] si ya estas utilizando filtros avanzados, no veo la necesidad de eliminar 'duplicados' -?-
-> a menos que requieras eliminarlos de la lista 'de origen' -???-
-> y toma en cuenta que [probablemente] no desaparecera el 'crecimiento anormal' que comentas de tu archivo :-(

si de todas formas quieres hacer el intento por macros...
1) si en tu configuracion regional, el orden de fecha-corta es dd-mm-aa... para VBA [que es 'US-Centric'] ES mm-dd-aa
2) CDate(texto_fecha) utiliza el formato/orden de fechas que se tiene en la configuracion regional de windows
3) VBA [siendo US-Centric) ESPERA y 'trabaja' -siempre/solo- con el formato de fechas mm-dd-yy
4) si en la configuracion regional el formato de fechas es NO-USA... hay 'conflictos' con la interpretacion EN VBA
5) si [al fin de cuentas en excel] las fechas SON numeros seriales...
-> una 'nueva' re/conversion con el tipo de datos CLng(CDate(...)) +/- te asegura la 'transparencia' entre VBA-usuario :))

saludos,
hector.
#4 Héctor Miguel
04/11/2005 - 18:51 | Informe spam
hola, pretorian !

Mostrar la cita
[creo que] el 'principio' que se utiliza en el archivo que adjuntas y la propuesta que te hacia... son -basicamente- lo mismo :)
[la unica diferencia es que -yo- en lo particular trato de 'evitar' el ab/uso de funciones si 'condicionales'] ;)
los 'errores' que comentas de la propuesta [probablemente] se deben... al 'separador de argumentos' -?-
[a veces olvido 'advertir' que mi separador de argumentos es la coma] :-(

lo bueno es que ha quedado resuelto :D

saludos,
hector.
Ads by Google
Search Busqueda sugerida