Sortera bladflikar i Excel med makro

Hur gör jag för att sortera bladflikar i Excel? Den frågan har jag fått några gånger…:-)

Tyvärr finns det inget inbyggt sätt sortera bladflikar på i Excel, vilket givetvis hade varit praktiskt ibland. Dock kan du lösa det med hjälp av ett makro på ett enkelt sätt:

Makrot i den bifogade filen nedan låter dig välja om du vill sortera bladflikarna i stigande (A-Ö) eller fallande ordning (Ö-A). I filen är makrot kopplat till knappar, men du kan ju givetvis köra igång det via menyfliken Utvecklare eller koppla ett kortkommando till makrot. Du kopplar makrot till ett kortkommando genom att välja menyfliken Utvecklare (1) och knappen Makron (2). Markera makrot i listan (3) och klicka på Alternativ…(4). Välj sedan önskat kortkommando (5).

Vi rekommenderar dessa Excelkurser:
www.infocell.se – lärarledda kvalitetskurser i Excel
www.officekurs.se – oslagbar e-kurser i Excel & Office-paketet

kortkommando till makro

sortera bladflikar fallande eller stigande

Här kan du ladda ner filen.

Det går självklart bra att kopiera koden nedan också. Öppna sedan VBA-editorn (Alt+F11). Klicka på menyfliken Infoga och välj Modul. Klistra in koden. Sedan är det bara att använda makrot för att sortera bladflikar i fallande eller stigande ordning.

Makrokod:

Sub Sortera_Bladflikar()
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult
'
' Prompt the user as which direction they wish to
' sort the worksheets.
'
   iAnswer = MsgBox("Sortera bladflikarna i stigande ordning (A-Ö)?" & Chr(10) _
     & "Klicka Nej för att sortera i fallande ordning (Ö-A)", _
     vbYesNoCancel + vbQuestion + vbDefaultButton1, "Sortera bladflikar")
   For i = 1 To Sheets.Count
      For j = 1 To Sheets.Count - 1
'
' If the answer is Yes, then sort in ascending order.
'
         If iAnswer = vbYes Then
            If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
'
' If the answer is No, then sort in descending order.
'
         ElseIf iAnswer = vbNo Then
            If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
         End If
      Next j
   Next i
End Sub

 

Du gillar kanske också...

Börja prenumerera idag!

Ta del av tips & tricks i Excel och Office en gång i månaden helt kostnadsfritt.

Grattis! Du kommer nu att få Excelbrevet varje månad helt gratis.