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 !

... un problemita... me esta volviendo loco...
necesito que el usuario solo seleccione fechas que se encuentran disponibles (sin duplicados)...
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



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
Respuesta Responder a este mensaje
#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:
hola, pretorian !

> ... un problemita... me esta volviendo loco...
> necesito que el usuario solo seleccione fechas que se encuentran


disponibles (sin duplicados)...
> 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

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


Respuesta Responder a este mensaje
#3 Héctor Miguel
04/11/2005 - 04:32 | Informe spam
hola, pretorian !

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...? [...]



[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.
Respuesta Responder a este mensaje
#4 Héctor Miguel
04/11/2005 - 18:51 | Informe spam
hola, pretorian !

Gracias por responder Hector
La solucion que me enviaste contenia algunos errores en la formula... pero era lo que necesito
encontre la solucion en la internet que era la que... presentabas... y... comparto con ustedes
... habia intentado con filtros avanzados pero el mareo de datos ocurria muy seguido
... en conscuencia una cantidad de basura al cerrar el archivo que ni te cuento...



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