Arbeide med VBA-funksjoner som returnerer en matrise i Excel 2016

Array formler er en av Excel mest kraftige funksjoner. Hvis du er kjent med matriseformler, vil du være glad for å vite at du kan lage VBA-funksjoner som returnerer en matrise.

Returnere en rekke månedsnavn

La oss starte med en enkelt eksempel. Den MonthNames funksjonen returnerer en 12-element utvalg av - du gjettet det -. Månedsnavn
Funksjons MonthNames () MonthNames = Array ("januar", "februar", "Mars", _ "April", "May", "June", "July", "August", _ "September", "October", "November", "Skuffet") End Function

Hvis du vil bruke MonthNames funksjon i et regneark, må du oppgi det som en 12 -celle matriseformel. For eksempel velge utvalg A2: F2 og skriv inn = MonthNames ()
. Deretter trykker du Ctrl + Shift + Enter for å gå inn i matriseformel i alle 12 valgte cellene. Sjekk ut resultatet.
Bruke MonthNames fungere å returnere en 12-element array.

Hvis du vil ha navnene måneden skal vises i en kolonne, velger 12 celler i en kolonne og bruke denne matriseformel. (Ikke glem å skrive det inn ved å trykke Ctrl + Shift + Enter.)
= TRANSPONER (MonthNames ())

Du kan også plukke ut en enkelt måned fra tabellen. Her er en formel (ikke en matriseformel) som viser det fjerde elementet i matrisen: april
= Index (MonthNames (), 4)
Returnere en sortert liste

Tenk deg at du har en. liste over navn du ønsker å vise i sortert rekkefølge i et annet område av celler. Ville det ikke være fint å ha en regnearkfunksjon gjør det for deg

Denne skikken funksjonen gjør nettopp det: Det tar et celle som sin argument single-kolonne og deretter returnerer en matrise av disse cellene sortert . Range A2: A13 inneholder noen navn. Range C2: C13 inneholder denne multicellematriseformel. (Husk at du må inn i formelen ved å trykke Ctrl + Shift + Enter.)
Ved hjelp av en egendefinert funksjon for å returnere en sortert range = Ordnet (A2: A13).

Her er koden for Ordnet funksjon:
Funksjon Ordnet (RNG As Range) Dim SortedData () As Variant Dim Cell As Range Dim Temp As Variant, jeg As Long, j As Long Dim nonempty As Long 'Overfør data til SortedData for hver celle i RNG Hvis ikke gjelder tom bil (Cell) Så nonempty = nonempty + 1 ReDim Bevar SortedData (1 Til nonempty) SortedData (nonempty) = Cell.Value End If Neste Cell 'Sortere array For i = 1 Til nonempty For j = i + 1 Å nonempty Hvis SortedData (i) > SortedData (j) Deretter Temp = SortedData (j) SortedData (j) = SortedData (i) SortedData (i) = Temp End If Neste j Neste jeg 'transponere matrisen og returnere det Ordnet = Application.Transpose (SortedData) End Function < p> Ordnet funksjonen starter ved å opprette et utvalg som heter SortedData. Denne rekken inneholder alle de blank verdiene i argumentområdet. Deretter blir matrisen SortedData sortert under anvendelse av en boble-form algoritme. På grunn av at matrisen er en horisontal rekke, må det være innarbeidet før den returneres av funksjonen.

Ordnet Function arbeider med et utvalg av hvilken som helst størrelse, så lenge som det er i en enkelt kolonne eller rekke. Hvis usortert data er på rad, trenger din formel å bruke Excel TRANSPONER-funksjonen til å vise de sorterte data horisontalt. For eksempel:
= TRANSPONER (Ordnet (A16: L16))