Ordene la columna B manteniendo el orden de la columna A

Ordene la columna B manteniendo el orden de la columna A

En Excel, tengo 2 columnas. Quiero ordenar el segundo en orden alfabético manteniendo el orden (personalizado) en el primero (piense en std::stable_sort donde la igualdad se basa únicamente en la primera columna). Ejemplo:

dsf   k
www   d
www   a
azd   q
azd   e
azd   b

debe convertirse

dsf   k
www   a
www   d
azd   b
azd   e
azd   q

El asistente de clasificación no parece tener ninguna opción para "mantener el orden actual". Podría definir el orden personalizado pero tengo más de mil elementos diferentes; Sería realmente complicado hacerlo y este orden personalizado puede cambiar en cualquier momento.

Respuesta1

Asumiré que sus datos comienzan en la Fila 2 y que esa Columna Cestá disponible para usar como "columna auxiliar". Poner

=IF(A1=A2, C1, C1+1)

dentro de la celda C2. (Si la columna Cno está disponible, use una que sí lo esté. Si sus datos comienzan en la fila 1, inserte una fila en blanco o (aún) coloque lo anterior en la celda C2, pero colóquelo 1en la celda C1). Arrastre/rellene hacia abajo. Esta (Columna C) ahora "documenta" su pedido personalizado; por ejemplo, C2= 1, C3= C4= 2 y C5= C6= C7= 3. Ahora ordene por Columna Cy Columna B.

Respuesta2

Rápido y sucio:-

  1. Copie el contenido de la columna A en el bloc de notas y luego vuelva a copiarlo en el portapapeles.
  2. Seleccione ambas columnas.
  3. Seleccione la función de clasificación y ordene la columna A usando el orden de "lista personalizada".
  4. Ingrese los datos del portapapeles en la lista personalizada.
  5. Agregue un nivel a la función de clasificación y luego ordene por la columna B, "de menor a mayor".

Respuesta3

Creo que lo mejor que puedes hacer es utilizar pedidos personalizados. Si no es necesario actualizarlo con tanta frecuencia, puede hacerlo FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...e importar todo el rango. Luego úselo al clasificar.

La solución VBA sería algo así como

Subordenar()
Atenuar iCustListNum como entero

iCustListNum = Aplicación.CustomListCount + 1
Application.AddCustomList ListArray:=Rango("A2:A100")

En caso de error Ir a errar:

'Ordena tu lista
Rango("A1:B100").sort Key1:=Rango("A1"), Orden1:=xlAscendente, OrdenPersonalizado:=iCustListNum, _
    Clave2:=Rango("B1"), Orden2:=xlAscendente, Encabezado:=xlSí, _
    MatchCase:=Falso, Orientación:=xlTopToBottom

'Limpiar
errar:
Application.DeleteCustomList ListNum:=iCustListNum

Subtítulo final

información relacionada