
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 C
está disponible para usar como "columna auxiliar". Poner
=IF(A1=A2, C1, C1+1)
dentro de la celda C2
. (Si la columna C
no 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 1
en 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 C
y Columna B
.
Respuesta2
Rápido y sucio:-
- Copie el contenido de la columna A en el bloc de notas y luego vuelva a copiarlo en el portapapeles.
- Seleccione ambas columnas.
- Seleccione la función de clasificación y ordene la columna A usando el orden de "lista personalizada".
- Ingrese los datos del portapapeles en la lista personalizada.
- 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