Matrisformler är en av Excels mest kraftfulla funktioner. Om du är bekant med matrisformler kommer du gärna att veta att du kan skapa VBA-funktioner som returnerar en matris.
Returnerar en rad månadsnamn
Låt oss börja med ett enkelt exempel. Funktionen MonthNames returnerar en array med 12 element av — du gissade rätt — månadsnamn.
Funktion MonthNames()
MonthNames = Array("januari", "februari", "mars", _
"april", "maj", "juni", "juli", "augusti", _
"September oktober november december")
Avsluta funktion
För att använda funktionen MonthNames i ett kalkylblad måste du ange den som en 12-cells matrisformel. Välj till exempel intervall A2:L2 och ange =MonthNames() . Tryck sedan på Ctrl+Skift+Enter för att ange matrisformeln i alla 12 markerade celler. Kolla in resultatet.

Använda funktionen MonthNames för att returnera en array med 12 element.
Om du vill att månadsnamnen ska visas i en kolumn, välj 12 celler i en kolumn och använd denna matrisformel. (Glöm inte att ange den genom att trycka på Ctrl+Skift+Enter.)
=TRANSPOSE(Månadsnamn())
Du kan också välja ut en enda månad från arrayen. Här är en formel (inte en matrisformel) som visar det fjärde elementet i matrisen: April.
=INDEX(Månadsnamn(),4)
Returnerar en sorterad lista
Anta att du har en lista med namn som du vill visa i sorterad ordning i ett annat cellområde. Skulle det inte vara trevligt att ha en kalkylbladsfunktion som gör det åt dig?
Den här anpassade funktionen gör just det: Den tar ett cellintervall med en kolumn som argument och returnerar sedan en array av dessa celler sorterade. Område A2:A13 innehåller några namn. Område C2:C13 innehåller denna flercellsmatrisformel. (Kom ihåg att du måste ange formeln genom att trycka på Ctrl+Skift+Enter.)

Använda en anpassad funktion för att returnera ett sorterat intervall.
=Sorterad(A2:A13)
Här är koden för den sorterade funktionen:
Funktion sorterad (Rng som intervall)
Dim SortedData() som variant
Dim cell som intervall
Dim Temp As Variant, i As Long, j As Long
Dim ej tom så länge
' Överför data till SortedData
För varje cell i Rng
Om inte är tom (cell) då
NonEmpty = NonEmpty + 1
ReDim Bevara sorterad data (1 till icke-tom)
SortedData(NonEmpty) = Cell.Value
Avsluta om
Nästa cell
' Sortera arrayen
För i = 1 Till Ej Tom
För j = i + 1 till icke-tom
Om SortedData(i) > SortedData(j) Då
Temp = SortedData(j)
SortedData(j) = SortedData(i)
SortedData(i) = Temp
Avsluta om
Nästa j
Nästa i
' Transponera arrayen och returnera den
Sorterad = Application.Transpose(SortedData)
Avsluta funktion
Sorted-funktionen börjar med att skapa en array som heter SortedData. Denna array innehåller alla icke-blanka värden i argumentintervallet. Därefter sorteras SortedData-matrisen med hjälp av en bubbelsorteringsalgoritm. Eftersom arrayen är en horisontell array måste den transponeras innan den returneras av funktionen.
Den sorterade funktionen fungerar med ett intervall av vilken storlek som helst, så länge den finns i en enda kolumn eller rad. Om den osorterade informationen är i en rad måste din formel använda Excels TRANSPOSE-funktion för att visa den sorterade datan horisontellt. Till exempel:
=TRANSPOSERA(Sorterat(A16:L16))