Innehållsförteckning
Denna handledning visar hur du sorterar värden i en matris i VBA
Sortera en endimensionell matris med hjälp av en loop
Att sortera en matris kräver lite datamanipulering med hjälp av loopar, variabler och tillfälliga matriser.
- Du måste först fylla i arrayen med dina värden
- Du måste sedan gå igenom matrisen två gånger! En gång för att få ett värde från den aktuella elementmatrisen, och medan den fortfarande finns i den slingan, för att få värdet för nästa element i matrisen.
- Du måste sedan jämföra elementen - och flytta det andra till positionen för det första om det andra är alfabetiskt FÖR det första.
Exemplet nedan visar detta förfarande.
1234567891011121314151617181920212223 | Sub SortAnArray ()Dim i As Long'Ställ in matrisenDim strName () Som variantDim Temp som variant'fyll i matrisenstrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'gå igenom gränsen för arry och få förnamnetFör i = LBound (strName) Till UBound (strName) - 1'gå igenom igen och kontrollera om nästa namn är alfabetiskt före eller efter originaletFör j = i + 1 till UBound (strName)Om UCase (strName (i))> UCase (strName (j)) Sedan'om namnet måste flyttas före föregående namn, lägg till i en temp -arrayTemp = strName (j)'byt namnstrName (j) = strName (i)strName (i) = TempAvsluta omNästa jNästa i'Mata ut matrisen genom en meddelanderutaMsgBox Join (strName (), vbCrLf)Avsluta Sub |
Om du kör den här proceduren får du följande meddelanderuta.
Du kan också sortera matrisen i den andra riktningen - t.ex.: Z till A genom att ändra denna kodrad
1 | Om UCase (strName (i))> UCase (strName (j)) Sedan |
till denna kodrad
1 | Om UCase (strName (i)) <UCase (strName (j)) Sedan |
Du skulle då få följande meddelanderuta.