12. maj 2009 - 14:44Der er
11 kommentarer og 2 løsninger
Find højeste tal med VBA i excel
Jeg har 4 celler i et excel-ark, indeholdende 1 tal hver. Jeg skal nu finde en simpel måde hvorpå jeg kan tjekke hvilket nr der er det højeste. Jeg har aldrig prøvet at lave Array, men ved at læse lidt på nettet, kan jeg se at det nok er sådan det skal gøres.
Det er et pointsystem, hvor jeg til sidst i forløbet vil have vist hvem der har flest point. Så jeg vil egentlig gerne have vist en msgbox, med navnet ud for den kolonne, samt antal point. Fx: "Vinneren er Jacob med 145 point"
En lille hjemmestrikket løsning... Jeg har ikke den store korrekte progammeringsviden - så der kommer nok en med en mere korrekt løsning - men denne var da sjov at lave :-)
Sub Vinder() Dim maksindex As Integer, talrække As Integer, navnrække As Integer, kolonne As Integer, antal As Integer, i As integer
'hvilken række står tallene i? talrække = 3 'hvilken række står navnet i? navnrække = 2 'hvilken kolonne står første navn i? kolonne = 6 'hvor mange navne? antal = 4
ReDim navn(antal - 1) As String ReDim point(antal - 1) As String
maksindex = maksindex For i = 1 To antal navn(i - 1) = Cells(navnrække, kolonne - 1 + i).Value point(i - 1) = Cells(talrække, kolonne - 1 + i).Value
If i <> 1 Then If point(i - 1) > point(i - 2) Then maksindex = i - 1
Next
MsgBox "Vinderen er " & navn(maksindex) & " med " & point(maksindex) & " point." End Sub
Under forudsætning at Navne er i A1:A4 og point i B1:B4 Ellers ret ranges i koden
Sub tst() Point = Application.WorksheetFunction.Max(Range("B1:B4")) navn = Range("B1:B4").Find(Point, LookIn:=xlValues).Offset(0, -1) MsgBox "Vinder er " & navn & " med " & Point & " Point" End Sub
Der kom så en, der lavede det lidt smartere :-) Det læser spørgsmålet som om, at navnene står på række - altså Navne A1:D1 Point A2:D2
Sub tst() Point = Application.WorksheetFunction.Max(Range("A2:D2")) navn = Range("A2:D2").Find(Point, LookIn:=xlValues).Offset(-1, 0) MsgBox "Vinder er " & navn & " med " & Point & " Point" End Sub
Problemet er lidt at point står på en række, hvor der samtidig også står en sidste spil. Dvs at det er kun hver 3. celle i række 28, der skal tjekkes på. Alts står point i cellerne E28 H28 K28 N28 Q28, mens navnene står i cellerne C1 F1 I1 L1 O1. Dvs at der skal testes på cellerne *28 og så skal navnet i cellen, der passer til, så hentes også.
Dette virker, hvis der ikke er andre tal i række 28, der er lig med maks...
Sub tst() Point = Application.WorksheetFunction.Max(Range("E28"), Range("H28"), Range("K28"), Range("N28"), Range("Q28")) navn = Range("E28:Q28").Find(Point, LookIn:=xlValues).Offset(-27, -2) MsgBox "Vinder er " & navn & " med " & Point & " Point" End Sub
Husk jeg stjæler fra excellent, så ingen point til mig - hvis det virker :-)
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.