Obtenga una lista única en una columna a partir de valores separados por comas en diferentes filas

Obtenga una lista única en una columna a partir de valores separados por comas en diferentes filas

¿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

ingrese la descripción de la imagen aquí

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:

  1. Esto requiere Office 365 o posterior
  2. Es una fórmula de tipo matricial y, como tal, demasiadas ralentizarán los cálculos.
  3. Es simplemente difícil de mantener.
  4. Debe colocarse con al menos una celda encima y esa celda encima de la dirección debe reemplazar la $B$1:B1atención a lo que es y a lo que no es absoluto.

ingrese la descripción de la imagen aquí

Respuesta3

A mano

  1. Datos > Texto en columnas > Delimitado > Siguiente > Coma > Finalizar
  2. Copie todos los datos de columnas separadas en una columna
  3. Seleccione la columna > Datos > Eliminar duplicados

Automáticamente

  1. Abre tu hoja
  2. Alt+F11
  3. Insertar > Módulo
  4. 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
  1. En el código cambia Range("A14:A17")con tu dirección de rango real donde tienes tus datos.
  2. 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.

información relacionada