Avatar billede fajens Mester
14. maj 2019 - 19:11 Der er 5 kommentarer og
1 løsning

VBA finde 3 højste værdier i matrix

Jeg har lidt problem med følgende:
jeg har 4 kolonner og 25 rækker med tal B1 E25
en kolonne med tekst A1:A25

Jeg vil gerne finde de 3 højeste værdier i området B1:E25 og i hvilken celle værdien er, så jeg kan hente teksten i kolonne A1:A25
resultatet ønsker jeg således:
1. jan 100
2. per 99
osv
Hvordan pokker løser jeg det problem?
På forhånd tak
/fajens
Avatar billede kim1a Ekspert
14. maj 2019 - 22:18 #1
Er der dubletter i tallene?
Avatar billede fajens Mester
14. maj 2019 - 22:37 #2
Ja, det kan forekomme.
Avatar billede Mads32 Ekspert
15. maj 2019 - 00:16 #3
Hej fajens

Jeg har en løsning uden VBA, den kan i formlerne ikke tage hensyn til dubbletter, men giver en markering.

Jeg har lavet det med Lopslag, hvilket kræver at der indsættes kolonner foran dine data.

Dette kan sikker løses mere elegant med nogle af de andre referenceformler.

Brug det til inspiration

https://www.dropbox.com/s/7b9p5a7qxbonrps/VBA%20Finde%203%20h%C3%A6jeste%20v%C3%A6rdier_mads32.xlsx?dl=0
Avatar billede fajens Mester
15. maj 2019 - 09:04 #4
Hej Mads32
Tak for dit indlæg. Af forskellige grunde skal det laves i VBA og der skal tages højde for dubletter.
/fajens
Avatar billede Mads32 Ekspert
15. maj 2019 - 09:19 #5
Hej det er OK.

Jeg ser frem til at se en løsning.
Avatar billede fajens Mester
15. maj 2019 - 14:11 #6
Hej Mads32
Herunder er der  en løsning, kan muligvis forfines lidt.
Naceoeb er lidt kringlet men umiddelbart ser den ud til at virke som ønsket.
Resultatet bliver vist i en message box
i arket "INDTAST SCORE" er der føgende kolonner:
A6:A145 fortløbende startnumre
B6:B145 Navne
C6:C145 klubnavne
D6:D145 klubnumre
E6:E145 grupper
F6:F145 Handicap
G6:I145 indtastede score i 3 kolonner, tal mellem 100 og 300 med dubletter.

Sub find_hoejst_score()
' Genvejstast:Ctrl+h
' Macro der finder den laveste totale score i valgt område.
' start og slut er rækkenumre ikke startnumre

Dim hs(5, 4)
Dim plc(5, 2)

Worksheets("INDTAST SCORE").Activate
d = 6
c = 145
    For b = 1 To 5
        For a = c To d Step -1
            If Sheets("INDTAST SCORE").Cells(a, 7) = "" Then GoTo nxt1
                For aa = 7 To 9
                    If Val(Cells(a, aa)) + Cells(a, 6) >= hs(b, 3) Then
                        If plc(b - 1, 1) = a And plc(b - 1, 2) = aa Then GoTo nxt2
                        If b = 1 Then GoTo nxt3
                        If plc(b - 2, 1) = a And plc(b - 2, 2) = aa Then GoTo nxt2
                        If b = 2 Then GoTo nxt3
                        If plc(b - 3, 1) = a And plc(b - 3, 2) = aa Then GoTo nxt2
                        If b = 3 Then GoTo nxt3
                        If plc(b - 4, 1) = a And plc(b - 4, 2) = aa Then GoTo nxt2
nxt3:                          plc(b, 1) = a
                                plc(b, 2) = aa
                                hs(b, 1) = Cells(a, 1)
                                hs(b, 2) = Cells(a, 2)
                                hs(b, 3) = Cells(a, aa) + Cells(a, 6)
                                hs(b, 4) = Cells(a, 6)
nxt2:
                    End If
                Next aa
nxt1:
        Next a
    Next b
MsgBox hs(1, 1) & " " & hs(1, 2) & "  " & hs(1, 3) & "  " & hs(1, 4) & Chr(13) & _
        hs(2, 1) & " " & hs(2, 2) & "  " & hs(2, 3) & "  " & hs(2, 4) & Chr(13) & _
        hs(3, 1) & " " & hs(3, 2) & "  " & hs(3, 3) & "  " & hs(3, 4) & Chr(13) & _
        hs(4, 1) & " " & hs(4, 2) & "  " & hs(4, 3) & "  " & hs(4, 4) & Chr(13) & _
        hs(5, 1) & " " & hs(5, 2) & "  " & hs(5, 3) & "  " & hs(5, 4)
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester