Bestämma sorteringskriterier

March 22

Antag att en medarbetare ger du har ett kalkylblad som har flera hundra rader med data i 27 kolumner. Innan du börjar arbeta med datan, kanske du vill veta om det tidigare har sorterats. Veta informationen får inte bara ta bort behovet av att tillgripa data, men kommer också att ge dig en uppfattning om vad din kollega tyckte var det viktigaste sättet att titta på data.

Tyvärr gör Excel inte en inbyggd sätt att bestämma sorteringskriterium som används för en rad olika uppgifter. Du kan teoretiskt skriva ett makro som skulle kolla varje kolumn och se om det var i stigande eller fallande ordning. Detta kommer att berätta om den enda kolumn sorterades, men det betyder inte nödvändigtvis att hela databordet var sorterade efter den kolumnen-det kan bara vara en slump att kolumnen är sorterad ordning och sortera gjordes av någon annan kolonn. Uppgiften att kontrollen blir ännu svårare när du börjar funderar sekundära och tertiära typer.

Det finns en sak som du kan prova, men för att avgöra om en viss kolumn sorteras och om det sorteras i stigande eller fallande ordning. (Kom ihåg: det kommer inte att berätta om den särskilda kolumnen var den primära kolumnen används för sortering, det kommer bara att berätta om kolumnen är sorterad.)

Tanken bakom makrot är att kopiera innehållet i kolumnen till en tillfällig kalkylblad, två gånger. Till exempel, om du vill kolla in kolumn F, den makro kopior kolumn F till kolumnerna A och B på den tillfälliga arbetsbladet. Makrot sorterar därefter kolumn B i stigande ordning och jämför den med kolumn A. Om de sorterade och osorterade kolumner är samma, då den ursprungliga kolumnen var i stigande ordning. Sedan kolumn B sorteras i fallande ordning och jämförelsen göras igen. Återigen, om kolumnerna är lika då kolumnen är i fallande ordning.

Sub TestIfSorted (i)
Dim CColumn som Number
Dim CSheet som String
Dim FlagSort som String

"Identifiera Nuvarande kolumn och Strömblad
CColumn = i
CSheet = ActiveSheet.Name
FlagSort = ""

"Lägg ett annat blad för att testa för sortering
Sheets.Add
ActiveSheet.Name = "TempSort"

"Kopiera aktuella kolumnen till kolumner A, B i Current Sheet
Ark (CSheet) .Select
Kolumner (CColumn) .Select
Selection.Copy

Sheets ("TempSort"). Välj
Range ("A1"). Välj
ActiveSheet.Paste
Range ("B1"). Välj
ActiveSheet.Paste
Application.CutCopyMode = False

"I kolumn C-test för lika Kolumner A / B
"Om Sum i C1 = 0 sedan OK annars Col A <> Col ​​B
Range ("B2"). Välj
Selection.End (xlDown) .Select
Botten = ActiveCell.Row
Range (Celler (2, 3), celler (Bottom, 3)). Välj
Selection.FormulaArray = "= IF (RC [-2] = RC [-1], 0,1)"
Range ("C1"). Välj
ActiveCell.FormulaR1C1 = "= SUMMA (R [1] C: R [6535] C)"

"Sortera Kolumn B - Stigande - Se om c1 = 0
Kolumner ("B: B") Välj.
Selection.Sort Key1: = Range ("B2"), Order1: = xlDescending, _
Header: = xlYes, OrderCustom: = 1, MatchCase: = False, _
Orientering: = xlTopToBottom, DataOption1: = xlSortNormal
Om Cells (1, 3) .Value = 0 Då FlagSort = "Stigande"

"Sortera Kolumn B - Fallande - Se om c1 = 0
Kolumner ("B: B") Välj.
Selection.Sort Key1: = Range ("B2"), Order1: = xlAscending, _
Header: = xlYes, OrderCustom: = 1, MatchCase: = False, _
Orientering: = xlTopToBottom, DataOption1: = xlSortNormal
Om Celler (1, 3) .Value = 0 Då FlagSort = "Fallande"

Om FlagSort = "Stigande" Då
"Color Header på originalblad gul
Lakan (CSheet) .Cells (1, CColumn) .Interior.ColorIndex = 36
End If

Om FlagSort = "Fallande" Då
"Color Header på originalblad apelsin
Lakan (CSheet) .Cells (1, CColumn) .Interior.ColorIndex = 44
End If

"Radera annat blad
Sheets ("TempSort"). Välj
ActiveWindow.SelectedSheets.Delete
End Sub

När det bestäms om den ursprungliga kolumnen var i stigande eller fallande ordning, sedan den första cellen i kolumnen i originalbladet är inställt på gult eller orange, respektive. Slutligen den tillfälliga kalkylblad raderas.

Detta makro kan ändras så att det kallades en gång för varje kolumn i en datatabell. Köra makrot för en hel tabell skulle inte ta så lång tid, men skulle ge en färgstark representation om huruvida enskilda kolumner sorteras i stigande eller fallande ordning.

Naturligtvis är alla makron som detta inte trivialt, så det kan bara vara lättare för dig att räkna ut hur du vill sortera data, och sedan sortera det på det sättet från get-go.

ExcelTips är din källa för kostnadseffektiv Microsoft Excel utbildning. Detta tips (2395) gäller för Microsoft Excel 97, 2000, 2002, och 2003.