¿como hago para tener una lista con datos no repetidos?

22/04/2005 - 00:52 por El Catire | Informe spam
Tengo una lista con datos repetidos
a1 a2 a3 a1 a3 a1 a1 a2 a1 a1 a2 a1 a2 a3 a1
a1 a2 a1

Necesito tener una lista con datos no repetidos para poder calcular la
frecuencia con la que ocurre cada evento con utilizando la fórmula contar.si,
ya que la lista que tengo es bastante grande.

Si existe otra forma más fácil que esta por favor comuníquenmela.
 

Leer las respuestas

#1 KL
22/04/2005 - 01:31 | Informe spam
Hola El Catire,

Prueba con el codigo que te pongo a continuacion que usa la funcion ofrecida
por John Walkenbach. Tendras que copiarlo a un modulo VBA estandar en tu
libro de Excel y lanzar el macro llamado "ListarValoresUnicos". Para ello:

1) Abre tu libro y activa la hoja donde quieres colocar la lista de valores
unicos
2) Haz clic-derecho sobre el nombre de tu hoja en una de las pestañas de la
parte de abajo de la ventana de Excel.
3) Elige la opcion Ver Codigo para abrir el editor VBA.
4) Una vez en el Editor VBA, ve al menu Insertar>Modulo
5) En la ventana mas grande a la derecha pega el codigo que te pongo a
continuacion (abajo del todo).
6) Si es necesario, en el macro "ListarValoresUnicos" cambia el 2 dentro de
.Sheets(2) por el nombre de la hoja (entre comillas) donde tienes la matriz
con los valores repetidos (por ej.: .Sheets("Hoja3")) o por el indice de la
misma.
7) Ahora pulsa Alt+F11 para volver a la hoja.
8) Pulsa Alt+F8 y haz doble-clic sobre "ListarValoresUnicos"

Saludos,
KL

'Inicio Codigo
Option Base 1

Sub ListarValoresUnicos()
Dim rng As Range, Lista As Variant
With ThisWorkbook
Set rng = .Sheets(2).Range("A1:R1")
Lista = UniqueItems(rng, False)
With .ActiveSheet
.Range(Cells(1, "A"), _
.Cells(UBound(Lista), "A")) _
= WorksheetFunction.Transpose(Lista)
End With
End With
End Sub

Function UniqueItems(ArrayIn, Optional Count As Variant) As Variant
' Accepts an array or range as input
' If Count = True or is missing, the function returns the number
' of unique elements
' If Count = False, the function returns a variant array of unique
' elements

Dim Unique() As Variant ' array that holds the unique items
Dim Element As Variant
Dim i As Integer
Dim FoundMatch As Boolean

' If 2nd argument is missing, assign default value
If IsMissing(Count) Then Count = True

' Counter for number of unique elements
NumUnique = 0

' Loop thru the input array
For Each Element In ArrayIn
FoundMatch = False

' Has item been added yet?
For i = 1 To NumUnique
If Element = Unique(i) Then
FoundMatch = True
GoTo AddItem '(Exit For-Next loop)
End If
Next i

AddItem:
' If not in list, add the item to unique list
If Not FoundMatch Then
NumUnique = NumUnique + 1
ReDim Preserve Unique(NumUnique)
Unique(NumUnique) = Element
End If

Next Element

' Assign a value to the function
If Count Then UniqueItems = NumUnique Else _
UniqueItems = Unique
End Function
'Fin Codigo

Preguntas similares