
¿Cómo puedo obtener valores únicos que están separados por comas en diferentes filas en una lista de columnas en EXCEL?
Mis datos
Dallas, New York, Austin, Tokyo
Dallas, New York, Austin, Tokyo
London, Tokyo
Tokyo, Istanbul
Resultado Esperado:
Dallas
New York
Austin
Tokyo
London
Istanbul
Respuesta1
Con datos en columnaA, ejecute esta breve macro de VBA:
Sub Sundar()
Dim s As String, c As Collection, k As Long
Set c = New Collection
k = 1
s = Replace(Application.WorksheetFunction.TextJoin(",", True, Range("A:A")), " ", "")
arr = Split(s, ",")
On Error Resume Next
For Each a In arr
c.Add a, CStr(a)
If Err.Number = 0 Then
Cells(k, 2).Value = a
k = k + 1
Else
Err.Number = 0
End If
Next a
On Error GoTo 0
End Sub
Respuesta2
Yo usaría vba, pero para demostrarlo se puede hacer con una fórmula:
=INDEX(TRIM(MID(SUBSTITUTE(TEXTJOIN(",",,$A$2:$A$5),",",REPT(" ",99)),(ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))-1)*99+1,99)),AGGREGATE(15,7,ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))/(COUNTIFS($B$1:B1,TRIM(MID(SUBSTITUTE(TEXTJOIN(",",,$A$2:$A$5),",",REPT(" ",99)),(ROW($XFD$1:INDEX($XFD:$XFD,LEN(TEXTJOIN(",",,$A$2:$A$5))-LEN(SUBSTITUTE(,",",""))+1))-1)*99+1,99)))=0),1))
Esto unirá todas las cadenas y luego creará una matriz de todas las entradas divididas en el ,
ciclo pasando por la primera que se encuentre y que ya no exista en la lista en crecimiento.
Un par de advertencias:
- Esto requiere Office 365 o posterior
- Es una fórmula de tipo matricial y, como tal, demasiadas ralentizarán los cálculos.
- Es simplemente difícil de mantener.
- Debe colocarse con al menos una celda encima y esa celda encima de la dirección debe reemplazar la
$B$1:B1
atención a lo que es y a lo que no es absoluto.
Respuesta3
A mano
- Datos > Texto en columnas > Delimitado > Siguiente > Coma > Finalizar
- Copie todos los datos de columnas separadas en una columna
- Seleccione la columna > Datos > Eliminar duplicados
Automáticamente
- Abre tu hoja
- Alt+F11
- Insertar > Módulo
- Pega este código:
Sublista_unique() Dim rngData como rango Dim c como rango Atenuar mientras dure Dim arr() como cadena Dim dict como objeto: Establecer dict = CreateObject("Scripting.Dictionary") Tecla atenuada como variante Establecer rngData = Rango ("A14:A17") Para cada c en rngData arr = Dividir(c.Valor, ","") Para i = 0 a UBound(arr) dict(Recortar(arr(i))) = 1 Próximo Próximo yo = 1 Para cada clave en dict.Keys rngData(1).Offset(rngData.Rows.Count + i).Value = clave yo = yo + 1 Próximo Subtítulo final
- En el código cambia
Range("A14:A17")
con tu dirección de rango real donde tienes tus datos. - GolpearF5
Respuesta4
Creé una aplicación basada en tu respuesta. Ésta es la solución más sencilla. Simplemente copie, pegue sus datos en el área de texto y haga clic en el botón Ejecutar.
Aquí puedes ver una captura de pantalla de la aplicación.
También puede cambiar el separador usando el cuadro combinado. Déjame saber si tienes alguna pregunta.
Aquí tienes la forma aburrida de hacerlo. Usando un VBA.
Sub Macro1()
Dim countries As String
Dim arrayofcountries
Dim con As Integer
con = 0
For i = 2 To 5
countries = Cells(i, 1).Value
If (countries = "") Then
''Do nothing
Else
arrayofcountries= Split(countries , ",")
For Z = LBound(arrayofcountries) To UBound(arrayofcountries)
Cells(i + con, 3).Value = arrayofcountries(Z)
con = con + 1
Next Z
End If
con = con - 1
Next i
End Sub
Simplemente elimine los duplicados con Excel.