Sorterings kalkylblad

October 27

Om du arbetar med ett projekt som använder mycket kalkylblad i en arbetsbok, kan du sortera dem efter kalkylblad namn. Följande korta makrot kommer att göra susen mycket snyggt:

Sub SortSheets ()
Dim I As Integer, J As Integer

För i = 1 till Sheets.Count - 1
För J = I + 1 Till Sheets.Count
Om ucase (Sheets (I) .name)> ucase (Sheets (J) .name) Då
Lakan (J) .Manövrera Före: = Sheets (I)
End If
Nästa J
Nästa jag
End Sub

Detta makro fungerar om du har ett relativt lågt antal kalkylblad i arbetsboken. Om, när du kör makrot, noterar du att det tar en hel del tid att köra, kanske du vill använda en effektivare sorteringsalgoritm i makrot. Till exempel är följande en version som läser namnen på alla kalkylblad i en array, sorterar arrayen med BubbleSort algoritmen, och sedan gör själva ordna:

Sub SortSheets ()
Dim I As Integer
Dim sMySheets () As String
Dim iNumSheets As Integer

iNumSheets = Sheets.Count
ReDim sMySheets (1 till iNumSheets)

För i = 1 till iNumSheets
sMySheets (i) = Sheets (I) .name
Nästa jag

BubbleSort sMySheets

För i = 1 till iNumSheets
Lakan (sMySheets (I)) Flytta Före:. = Sheets (I)
Nästa jag
End Sub

Sub BubbleSort (sToSort () As String)
Dim Lägre As Integer, Upper As Integer
Dim I As Integer, J As Integer, K As Integer
Dim Temp As String

Undre = LBound (sToSort)
Övre = UBound (sToSort)
För I = Lägre Till Övre - 1
K = I
För J = I + 1 Till Övre
Om sToSort (K)> sToSort (J) Då
K = J
End If
Nästa J
Om jag <> K Sen
Temp = sToSort (I)
sToSort (I) = sToSort (K)
sToSort (K) = Temp
End If
Nästa jag
End Sub

Alla som har programmerats för en tid vet att BubbleSort är ett bra allmänt ändamål sorteringsrutin, men det finns snabbare ettor tillgängliga. Till exempel, om du har en hel del arbetsblad, och de börjar väldigt oorganiserat, kanske du upptäcker att Quicksort algoritmen är mer fördelaktigt. Allt du behöver göra för att ändra ovan att använda Quicksort är tillQuickSort algoritmen som en subrutin (du hittar algoritmen i någon bra Visual Basic programmering bok) och sedan ringa proceduren inifrån huvud SortSheets makrot. (Detta innebär att du byter den rad där BubbleSort kallas nu.)

Det finns en annan skillnad mellan denna andra makro- och den första. Den första makro inte uppmärksamma fallet med den text som används för att namnge dina kalkylblad. Således skulle Min Blad ses på samma sätt som MY kalkylblad. Den andra makrot gör uppmärksamma text fall och sorterar därefter. Naturligtvis är detta inte en särskilt stor fråga, eftersom Excel inte uppmärksamma fallet kalkylbladsnamn, heller.

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