Determinación de los criterios de clasificación (Microsoft Excel)
Suponga que un compañero de trabajo le da una hoja de trabajo que tiene varios cientos de filas de datos en 27 columnas. Antes de comenzar a trabajar con los datos, es posible que desee saber si se han ordenado previamente. Es posible que conocer la información no solo elimine la necesidad de recurrir a los datos, sino que también le dará una idea de lo que su compañero de trabajo sintió que era la forma más importante de ver los datos.
Desafortunadamente, Excel no tiene una forma integrada de determinar los criterios de clasificación utilizados para un rango de datos. Teóricamente, podría escribir una macro que verificaría cada columna y vería si estaba en orden ascendente o descendente. Esto le dirá si esa única columna fue ordenada, pero eso no significa necesariamente que toda la tabla de datos fue ordenada por esa columna; podría ser solo una coincidencia que la columna esté ordenada y la ordenación la haya realizado otra columna. La tarea de verificar se vuelve aún más complicada cuando comienza a considerar los tipos secundarios y terciarios.
Sin embargo, hay una cosa que puede intentar para determinar si una columna en particular está ordenada y si está ordenada en orden ascendente o descendente. (Recuerde: esto no le dirá si la columna en particular fue la columna principal utilizada para ordenar, solo le dirá si la columna está ordenada).
La idea detrás de la macro es copiar el contenido de la columna a una hoja de trabajo temporal, dos veces. Por ejemplo, si desea consultar la columna F, la macro copia la columna F en las columnas A y B de la hoja de trabajo temporal. A continuación, la macro ordena la columna B en orden ascendente y la compara con la columna A. Si las columnas ordenadas y no ordenadas son iguales, entonces la columna original estaba en orden ascendente. Luego, la columna B se ordena en orden descendente y se vuelve a realizar la comparación. Nuevamente, si las columnas son iguales, la columna está en orden descendente.
Sub TestIfSorted(i) Dim CColumn as Number Dim CSheet as String Dim FlagSort as String 'Identify Current Column and Current Sheet CColumn = i CSheet = ActiveSheet.Name FlagSort = "" 'Add a temporary sheet to test for sorting Sheets.Add ActiveSheet.Name = "TempSort" 'Copy CURRENT column to Columns A,B in Current Sheet Sheets(CSheet).Select Columns(CColumn).Select Selection.Copy Sheets("TempSort").Select Range("A1").Select ActiveSheet.Paste Range("B1").Select ActiveSheet.Paste Application.CutCopyMode = False 'In Column C test for equality of Columns A/B 'If Sum in C1=0 then OK otherwise Col A<>Col B Range("B2").Select Selection.End(xlDown).Select Bottom = ActiveCell.Row Range(Cells(2, 3), Cells(Bottom, 3)).Select Selection.FormulaArray = "=IF(RC[-2]=RC[-1],0,1)" Range("C1").Select ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6535]C)" 'Sort Column B--Ascending - See if c1=0 Columns("B:B").Select Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal If Cells(1, 3).Value = 0 Then FlagSort = "Ascending" 'Sort Column B--Descending - See if c1=0 Columns("B:B").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal If Cells(1, 3).Value = 0 Then FlagSort = "Descending" If FlagSort = "Ascending" Then 'Color Header on original sheet yellow Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 36 End If If FlagSort = "Descending" Then 'Color Header on original sheet orange Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 44 End If 'Delete temporary sheet Sheets("TempSort").Select ActiveWindow.SelectedSheets.Delete End Sub
Una vez que se determina si la columna original estaba en orden ascendente o descendente, la primera celda de la columna en la hoja de trabajo original se establece en amarillo o naranja, respectivamente. Finalmente, se elimina la hoja de trabajo temporal.
Esta macro se podría modificar para que se llamara una vez para cada columna de una tabla de datos. Ejecutar la macro para una tabla completa no tomaría tanto tiempo, pero proporcionaría una representación colorida de si las columnas individuales están ordenadas en orden ascendente o descendente.
Por supuesto, cualquier macro como esta no es trivial, por lo que puede ser más fácil para usted averiguar cómo desea ordenar los datos y luego ordenarlos de esa manera desde el principio.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (2395) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.