# RANG i Excel
Author: AktieTrader

Jag har gjort ett excelark som nedan. Jag vill få fram rangordningen för var månad, men det går inte med RANG eftersom det kräver sorterade listor. Jag kan inte sortera var månad för sig. Hur kan man lösa det?

 

A

B

 

C

Jan

11

 

22

 

33

Feb

15

 

12

 

11

Mar

2

 

1

 

3

Apr

15

 

11

 

26

## Comment 1
Author: johan

Jag är inte helt med på vad du vill få ut?

## Comment 2
Author: AktieTrader

Mellankolumnerna föll bort.

För var kolumn vill jag ha en rangordning där det visas om talet i tex A är nr 1,2 eller 3 i januari.

Resultatet skulle bli så här

 

A

Rang A

B

Rang B

C

Rang C

Jan

11

3

22

2

33

1

Feb

15

1

12

2

11

3

Mar

2

2

1

1

3

3

Apr

15

2

11

3

26

1

## Comment 3
Author: johan

Kan man ta förgivet att det aldrig är mer än 12 månader? :)

## Comment 4
Author: AktieTrader

Nä, det är från 1998 och frammåt och dessutom i 30 kolumner :)

## Comment 5
Author: johan

Denna UDF (User Definied Function) borde fungera. Makron måste aktiveras för att det ska fungera. Ställ Verktyg, Makro, Säkerhet till Mellan.

Gör så här för att lägga in den:

1.  Gå till Verktyg, Makro, Visual Basic Editor
2.  Se till att du står i den arbetsboken du vill ha funktionen tillgänglig i
3.  Gå till Infoga, Modul
4.  Klistra in nedanstående text
5.  Stäng Visual BAsic Editor

Ställ dig nu i en cell och skriv:

\=UnsortedRang($B$2:$B$100; B2; SANT)

*   Första argumentet är området du vill undersöka
*   Andra argumentet är värdet du vill hitt ordning på
*   Tredje argumentet är om du vill räkna från högsta till lägsta (SANT) eller lägsta till högsta (FALSKT)

Option Explicit

Public Function UnsortedRang( \_  
        ByRef oRange As Range, \_  
        ByRef oLookup As Range, \_  
        Optional ByVal bHighestToLowest As Boolean = True) As Long  
    Dim lngCounter As Long  
    Dim oCurrent As Range  
     
    Application.Volatile True  
     
    lngCounter = 1  
     
    For Each oCurrent In oRange  
        If bHighestToLowest Then  
            If oCurrent.Value > oLookup.Value Then  
                lngCounter = lngCounter + 1  
            End If  
        Else  
            If oCurrent.Value < oLookup.Value Then  
                lngCounter = lngCounter + 1  
            End If  
        End If  
    Next  
     
    UnsortedRang = lngCounter  
End Function

## Comment 6
Author: johan

UDF:er skrivna i VBA brukar ha en tendens att bli rätt långsamma när det är många celler, så i värsta fall kanske du kan ställa om beräkningen på manuell för bladet.

Det gör du under Verktyg, Alternativ, Beräkning. Sedan kan du beräkna om bladet med F9-tangenten.

// Johan
