Het bepalen sorteren Criteria

Stel dat een mede-werker geeft je een werkblad dat enkele honderden rijen gegevens in 27 kolommen hebben. Voordat u begint te werken met de gegevens, zou je willen weten als u er reeds gesorteerd. Het kennen van de informatie niet alleen verwijderen van de noodzaak om de gegevens toevlucht nemen, maar geeft u ook een idee over wat uw collega voelde was de belangrijkste manier om te kijken naar de gegevens.

Helaas, Excel niet over een ingebouwde manier om het sorteren criteria gebruikt voor een scala van gegevens vast. Je zou theoretisch schrijven macro die elke kolom zou controleren en als het ware in oplopende of aflopende volgorde. Dit zal u vertellen of dat één kolom gesorteerd was, maar dat betekent niet noodzakelijk dat de hele gegevenstabel gesorteerd was op die kolom-het kon gewoon toeval zijn dat de kolom is in gesorteerde volgorde, en de soort werd gedaan door een andere kolom. De taak van de controle wordt nog lastiger als je gaan nadenken over secundaire en tertiaire soorten.

Er is één ding dat je kunt proberen, echter, om te bepalen of een bepaalde kolom wordt gesorteerd en of het wordt gesorteerd in oplopende of aflopende volgorde. (Vergeet niet: dit zal u niet vertellen of de specifieke kolom was het primaire kolom wordt gebruikt voor het sorteren, het zal u alleen vertellen als de kolom wordt gesorteerd.)

Het idee achter de macro is om de inhoud van de kolom te kopiëren naar een tijdelijke werkblad, twee keer. Bijvoorbeeld, als u wilt controleren op kolom F, de kolom macro kopieën F om de kolommen A en B op de tijdelijke werkblad. De macro sorteert vervolgens kolom B oplopend en vergelijkt deze kolom A. Als de gesorteerde en ongesorteerde kolommen zijn gelijk, dan de oorspronkelijke kolom in oplopende volgorde. Dan kolom B wordt gesorteerd in aflopende volgorde en de vergelijking weer gedaan. Opnieuw, als de kolommen gelijk zijn dan de kolom in aflopende volgorde.

Sub TestIfSorted (i)
Dim CColumn als nummer
Dim CSheet als String
Dim FlagSort als String

'Identificeer Actueel Column en Huidige Gezinsblad
CColumn = i
CSheet = ActiveSheet.Name
FlagSort = ""

'Voeg een tijdelijke plaat om te testen voor het sorteren
Sheets.Add
ActiveSheet.Name = "TempSort"

'Kopiëren huidige kolom naar kolommen A, B in Current Gezinsblad
Sheets (CSheet) .Selecteer
Kolommen (CColumn) .Selecteer
Selection.Copy

Sheets ("TempSort"). Selecteer
Range ("A1"). Selecteer
ActiveSheet.Paste
Range ("B1"). Selecteer
ActiveSheet.Paste
Application.CutCopyMode = False

'In Kolom C test voor gelijkheid van de kolommen A / B
'Als Sum in C1 = 0 dan OK anders Col A <> Col ​​B
Range ("B2"). Selecteer
Selection.End (xlDown) .Selecteer
Onder = ActiveCell.Row
Range (Cells (2, 3), cellen (Bodem, 3)). Selecteer
Selection.FormulaArray = "= ALS (RC [-2] = RC [-1], 0,1)"
Range ("C1"). Selecteer
ActiveCell.FormulaR1C1 = "= SOM (R [1] C: R [6535] C)"

'Sorteer Kolom B - oplopend - Kijk of c1 = 0
Kolommen ("B: B") kiezen.
Selection.Sort Key1: = Range ("B2"), Order1: = xlDescending, _
Header: = xlYes, OrderCustom: = 1, MatchCase: Valse =, _
Oriëntatie: = xlTopToBottom, DataOption1: = xlSortNormal
Als Cells (1, 3) .Value = 0 Dan FlagSort = "Oplopend"

'Sorteer Kolom B - Aflopend - Kijk of c1 = 0
Kolommen ("B: B") kiezen.
Selection.Sort Key1: = Range ("B2"), Order1: = xlAscending, _
Header: = xlYes, OrderCustom: = 1, MatchCase: Valse =, _
Oriëntatie: = xlTopToBottom, DataOption1: = xlSortNormal
Als Cells (1, 3) .Value = 0 Dan FlagSort = "Aflopend"

Als FlagSort = "Oplopend" Dan
'Kleur Kopbal op originele vel geel
Sheets (CSheet) .Cells (1, CColumn) .Interior.ColorIndex = 36
End If

Als FlagSort = "laag" Dan
'Kleur Kopbal op originele vel oranje
Sheets (CSheet) .Cells (1, CColumn) .Interior.ColorIndex = 44
End If

'Verwijder tijdelijke sheet
Sheets ("TempSort"). Selecteer
ActiveWindow.SelectedSheets.Delete
End Sub

Zodra is vastgesteld of de oorspronkelijke kolom in oplopende of aflopende volgorde, waarna de eerste cel van de kolom in de oorspronkelijke werkblad op geel of oranje, respectievelijk. Ten slotte wordt de tijdelijke werkblad verwijderd.

Deze macro kan worden gewijzigd, zodat het een keer genoemd werd voor elke kolom in een tabel. Het uitvoeren van de macro voor een hele tafel zou niet zo lang duren, maar zou een kleurrijke voorstelling over de vraag of afzonderlijke kolommen zijn gesorteerd in oplopende of aflopende volgorde.

Natuurlijk, elke macro als dit is niet triviaal, dus het kan gewoon makkelijker voor u om erachter te komen hoe u de gegevens wilt sorteren, en dan sorteren op die manier van de get-go.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (2395) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003.