Datorn iFokus

Datorn

Etikettmicrosoft-office
Läst 897 ggr
AktieTrader
2006-11-20 16:44
0

RANG i Excel

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

johan
2006-11-20 17:03
0
#1

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

Mvh // Johan

AktieTrader
2006-11-20 17:57
0
#2

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

johan
2006-11-20 18:48
0
#3

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

Mvh // Johan

AktieTrader
2006-11-20 19:15
0
#4

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

johan
2006-11-20 20:31
0
#5

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

Mvh // Johan

johan
2006-11-20 20:33
0
#6

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

Mvh // Johan