20. april 2009 - 20:43Der er
7 kommentarer og 1 løsning
Gennemgå alle kundeark og opsamle de 10 største værdier i et array
Jeg har en masse ark hvori der er et kunde navn i A1 og omsætning i F10. Jeg ønsker nu at opsamle "top 10 kunder" i et array ud fra størst omsætning. Koden skal dog også kunne håndtere hvis der eksempelvis kun er 3 kundeark og samtidig sortere "Top 10" i faldende orden.
Altså kan det blive:
Hansen 3000 Jensen 2000 Fransen 1500 osv.....
Jeg er rimelig rookie inden for array, og har ikke arbejdet med at der skal opsamles data i flere kolonner.
Derudover kunne jeg godt bruge en kode som tømmer dette "top 10" array igen eksempelvis bare i området (B1:C10)
Public Sub sortTop10() Dim ws As Worksheet, saveWs As Worksheet Dim erSaveWs As Boolean Dim topTenDob(9) As Double, nuTallet As Double, forwDob As Double Dim topTenNavn(9) As String, nuNavn As String, forwNavn Dim counter As Integer, statCell As Range
erSaveWs = False For Each ws In Worksheets ws.Select If ws.Name = "Weekly report" Then Set saveWs = ActiveSheet erSaveWs = True Else nuTallet = Range("F10").Value nuNavn = Range("A1").Value For i = LBound(topTenDob) To UBound(topTenDob) If topTenDob(i) < nuTallet Then forwDob = topTenDob(i) forwNavn = topTenNavn(i) topTenDob(i) = nuTallet topTenNavn(i) = nuNavn taller = i + 1 For y = taller To UBound(topTenDob) nuTallet = topTenDob(y) nuNavn = topTenNavn(y) topTenDob(y) = forwDob topTenNavn(y) = forwNavn forwDob = nuTallet forwNavn = nuNavn Next End If
Next End If
Next
If erSaveWs = False Then Set saveWs = Worksheets.Add(after:=Worksheets(Worksheets.Count)) saveWs.Name = "Weekly report" End If
saveWs.Select Set statCell = Range("B2") Range("B1").Value = "Top 10" For i = LBound(topTenDob) To UBound(topTenDob) taller = 1 + i statCell.Offset(i, -1).Value = taller statCell.Offset(i, 0).Value = topTenNavn(i) statCell.Offset(i, 1).Value = topTenDob(i) Next End Sub
Hvis du har et ark nr 1 til oversikt, vil denne hente data fra alle de andre arkene.
Her blir ALLE sortert i en liste, men det er en enkel sak å slette fra nr. 11 og ned.
Public Sub test() Sheets(1).Select For n = 2 To Sheets.Count Sheets(1).Range("C1").Offset(n - 1, 0) = Sheets(n).Range("A1").Value Sheets(1).Range("C1").Offset(n - 1, 1) = Sheets(n).Range("F10").Value Next
ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("D2:D" & Sheets.Count), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(1).Sort .SetRange Range("C2:D" & Sheets.Count) .Apply End With End Sub
Ja der er intet galt med buddet fra oyejo, problemet er bare at der er tale om et dashbord hvor top 10 kunder skal sættes ind i en specifikt område, og jeg kan derfor ikke bare slette resten, men kunne selvfølgelig bare sætte alle tal ind et helt andet sted først og derefter tage de 10 øverste og flytte over på mit dashboard.....så nu fortyder jeg da egentligt at jeg ikke gav points til jer begge, men det er jo for sent nu og håber at oyejo overlever ;-) men igen mange tak til jer begge to
Synes godt om
Ny brugerNybegynder
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.