Matriseformler er en av Excels kraftigste funksjoner. Hvis du er kjent med matriseformler, vil du gjerne vite at du kan lage VBA-funksjoner som returnerer en matrise.
Returnerer en rekke månedsnavn
La oss starte med et enkelt eksempel. MonthNames-funksjonen returnerer en 12-elements matrise med – du gjettet det – månedsnavn.
Funksjonsmånedsnavn()
Månedsnavn = Array(“januar”, “februar”, “mars”, _
"april", "mai", "juni", "juli", "august", _
«September», «Oktober», «November», «Desember»)
Avslutt funksjon
For å bruke funksjonen MonthNames i et regneark, må du angi den som en 12-cellers matriseformel. Velg for eksempel område A2:L2 og skriv inn =MonthNames() . Trykk deretter Ctrl+Shift+Enter for å angi matriseformelen i alle de 12 valgte cellene. Sjekk ut resultatet.
Bruk av funksjonen MonthNames for å returnere en 12-elements matrise.
Hvis du vil at månedsnavnene skal vises i en kolonne, velger du 12 celler i en kolonne og bruker denne matriseformelen. (Ikke glem å angi den ved å trykke Ctrl+Shift+Enter.)
=TRANSPOSER(Månedsnavn())
Du kan også velge en enkelt måned fra arrayet. Her er en formel (ikke en matriseformel) som viser det fjerde elementet i matrisen: April.
=INDEKS(Månedsnavn(),4)
Returnerer en sortert liste
Anta at du har en liste over navn du vil vise i sortert rekkefølge i et annet celleområde. Ville det ikke vært fint å ha en regnearkfunksjon som gjør det for deg?
Denne egendefinerte funksjonen gjør nettopp det: Den tar et enkelt-kolonne område med celler som argument og returnerer deretter en rekke av disse cellene sortert. Område A2:A13 inneholder noen navn. Område C2:C13 inneholder denne flercellede matriseformelen. (Husk at du må skrive inn formelen ved å trykke Ctrl+Shift+Enter.)
Bruke en egendefinert funksjon for å returnere et sortert område.
=Sortert(A2:A13)
Her er koden for Sortert-funksjonen:
Funksjon sortert (Rng som område)
Dim SortedData() som variant
Dim celle som rekkevidde
Dim Temp As Variant, i As Long, j As Long
Dim ikke-tom så lenge
' Overfør data til SortedData
For hver celle i Rng
Hvis ikke er tom (celle) så
NonEmpty = NonEmpty + 1
ReDim Preserve SortedData(1 To NonEmpty)
SortedData(NonEmpty) = Cell.Value
Slutt om
Neste celle
' Sorter matrisen
For i = 1 til ikke-tom
For j = i + 1 til ikke-tom
Hvis SortedData(i) > SortedData(j) Da
Temp = SortedData(j)
SortedData(j) = SortedData(i)
SortedData(i) = Temp
Slutt om
Neste j
Neste i
' Transponer matrisen og returner den
Sortert = Application.Transpose(SortedData)
Avslutt funksjon
Sortert-funksjonen starter med å lage en matrise som heter SortedData. Denne matrisen inneholder alle de ikke-blanke verdiene i argumentområdet. Deretter sorteres SortedData-matrisen ved hjelp av en boblesorteringsalgoritme. Fordi matrisen er en horisontal matrise, må den transponeres før den returneres av funksjonen.
Den sorterte funksjonen fungerer med et område av alle størrelser, så lenge det er i en enkelt kolonne eller rad. Hvis de usorterte dataene er på rad, må formelen din bruke Excels TRANSPOSE-funksjon for å vise de sorterte dataene horisontalt. For eksempel:
=TRANSPOSER(Sortert(A16:L16))