Sortera kalkylblad i en arbetsbok med VBA i Microsoft Excel

Anonim

I den här artikeln har vi tillhandahållit detaljer om hur du sorterar kalkylblad i arbetsboken i stigande eller fallande ordning, beroende på kalkylbladets namn.

I den bifogade arbetsboken finns det två moduler:-

Modul 1 innehåller makrot "SortWorksheets" som är tilldelad knappen "Submit" på "Makro" -arket.

Detta makro sorterar alla kalkylblad utom det första kalkylbladet som är huvudarket som heter "Makro".

När användaren klickar på knappen "Skicka" sorteras alla blad efter "Makro" -ark i stigande eller fallande ordning som användaren väljer i kombinationsrutan.

Modul 2 innehåller två makron "AscendingSortOfWorksheets" och "DecendingSortOfWorksheets". När du kör makrot "AscendingSortOfWorksheets" kommer det att sortera alla kalkylblad som finns i arbetsboken i stigande ordning. När du kör makrot "DecendingSortOfWorksheets" sorterar det alla kalkylblad som finns i arbetsboken i fallande ordning.

Logisk förklaring

Bubblesorteringsalgoritm används för att sortera kalkylblad i arbetsboken.

Bubblesorteringsalgoritm jämför varje objekt i arrayen med andra objekt i arrayen och byter dem beroende på om de ska sortera i stigande eller fallande ordning. I varje steg kommer det att bubbla det minsta eller största värdet till toppen av matrisen. Algoritmen upprepas tills alla objekt är sorterade.

I den här artikeln är vårt mål att sortera kalkylblad i arbetsboken efter deras namn. Arbetsboken som vi använder består av olika kalkylblad med namn som Financial Dashboard, Human Resources och Sales Dashboard.

För att uppnå detta mål har vi använt Bubblesorteringsalgoritm för att sortera kalkylblad.

Kodförklaring

SortWorksheets Makro

Detta makro körs när användaren klickar på knappen Skicka. Detta makro sorterar alla kalkylblad i arbetsboken efter deras namn utom det första kalkylbladet i arbetsboken. Beroende på det värde som användaren valt i kombinationsrutan kommer det att sortera kalkylbladet i stigande eller fallande ordning.

För att lägga till kombinationsruta, följ stegen nedan:-

  1. Gå till fliken Utvecklare> Klicka på Infoga> Klicka på kombinationsrutan under formulärkontroll

  1. Högerklicka på kombinationsrutan och klicka på formatkontroll.

  1. Gå till kontrollfliken, Tilldela objektet och länka kombinationsrutan med cell XFC1.

ComboBoxValue = Område ("XFC1"). Värde

Kombinationsruta på "Makro" -arket är länkad till cell XFC1. Så för att få värde från cell XFC1 används variabeln ComboBoxValue.

För i = 2 Till SCount - 1

FOR loop börjar med variabel i, värde från 2 eftersom vi vill utesluta första arbetsbladet i arbetsboken från sortering.

Om ComboBoxValue = 1 Då

IF -villkor används för att kontrollera om man ska sortera i stigande eller fallande ordning. OM ComboBoxValue -värdet är 1, sortera sedan i stigande ordning annars fallande ordning.

Arbetsblad sorterade i stigande ordning

Arbetsblad sorterade i fallande ordning

AscendingSortOfWorksheets och DecendingSortOfWorksheets

AscendingSortOfWorksheets och DecendingSortOfWorksheets makron kan köras genom att trycka på Alt + F8 genvägstangent eller Gå till fliken Utvecklare> Klicka på Makro> välj makro och klicka på kör. De kommer att sortera alla kalkylblad som finns i arbetsboken. Dessa makron kan också köras på andra arbetsböcker.

Arbetsblad sorterade efter att ha kört makrot AscendingSortOfWorksheets

Arbetsblad sorterade i stigande ordning DecendingSortOfWorksheets -makro

Följ koden nedan

 Sub AscendingSortOfWorksheets () 'Sortera kalkylblad i en arbetsbok i stigande ordning Dim SCount, i, j Som heltal' För inaktivering av skärmuppdateringar Application.ScreenUpdating = False 'Få totalt antal. av arbetsblad i arbetsbok SCount = Worksheets.Count 'Kontrollerar villkoret om antalet kalkylblad är större än 1, om antalet är ett, avsluta proceduren Om SCount = 1 Avsluta sedan Sub' Using Bubble sort as sorting algoritm 'Looping through all worksheets For i = 1 Till SCount - 1 'Jämförelse av valt arknamn med andra ark för att flytta valt ark till lämplig position För j = i + 1 Till SCount If Worksheets (j) .Name  Arbetsblad (i) .Namn Sedan Arbetsblad (j) .Rör före: = Arbetsblad (i) Avsluta Om Nästa j Nästa i Avsluta Sub 

Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen