Bigelk Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 (endret) Hei. Jeg har 15 forskjellige "databaser" Hvor jeg trenger og finne de 3 største verdiene i hver database. Også trenger jeg og finne de 10 største verdiene. Disse databasene har ikke fast størrelse. Skal prøve og lage 2 eksempler I celle x1 står det "konsulent1" i området X3:Z19 står dataen som hører til Konsulent 1(dette området har ikke et fast antall rader, men den sista linja starter alltid med Total) Så dataen jeg er ute etter er i området X2:Z18) Kolonne x = Kunder Kolonne Y = antall ks solgt Kolonne Z = hvor mange prosent solgt i forhold til total i celle AB1 Konsulent2 Området AB3:AD13 (det samme oppsettet som Konsulent1) I A3 står det Konsulent1 Jeg lurer på hvordan jeg finner de 3 største verdiene til Konsulent1. men jeg trenger da hvilken butikk de 3 verdiene hører til A4 Butikk Nr1 b4 antall ks solgt Nr1 c4 prosent Nr1 a5 butikk Nr2 b5 antall ks solgt Nr2 c5 prosent Nr2 O.S.V I A10 Konsulent2 (det samme som konsulent1) bare at den må jo da refere til området til konsulent 2 I kolonne F3 Står det "Topp 10" i fra kolonne F4:G14 må det da stå de 10 største salgene av alle "databasene" Jeg legger ved en fil så Kanskje det er mulig og skjønne hva jeg vil fram til (områdene i testfila stemmer ikke overens med eksempelet over fordi arket egentlig inneholder mye mer info enn bare dette) Bare si i fra hvis forklaringen ikke er god nok Hilsen Torbjørn Test.xlsx Endret 28. februar 2012 av Bigelk Lenke til kommentar
Anders Hole Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 (endret) Lag en 2 dimensjonell tabell som inneholder index til butikk(tall), og salgsresultat(tall). Sorter denne via en standard biblioteksfunksjon, på salgsresultat, tror disse heter bubble o.l.[kolonne2] Søk i google etter Sorting Array vba. Da vil de 3 første indeksene i tabellen inneholde høyeste verdier. Men du må også ha en oversikt over indekser til butikker, så du ikke glemmer hvilken indeks hver butikk har. Men du kan også enkelt lage en macro for sortering, dette har excel innebygd. Under Data, Sort. Du kan da bruke innebygd macro bygger for å gjøre dette på en kolonne. Det vil gi samme resultat. Endret 28. februar 2012 av Anders Hole Lenke til kommentar
Bigelk Skrevet 28. februar 2012 Forfatter Del Skrevet 28. februar 2012 Hei Anders, nå har du overvurdert mine excel/vba evner kraftig Jeg skal ta en titt på Google, så kommer jeg sikkert tilbake med noen problemstillinger. Takk for tipset. Hilsen Torbjørn Lenke til kommentar
Anders Hole Skrevet 28. februar 2012 Del Skrevet 28. februar 2012 (endret) Er jo 2 tastetrykk dette.. I Excel, gå på meny Data, Sort, og sorter etter largest number. Øverste 3 verdier i resultatet er de verdiene du er ute etter. Merk alle kolonnene og sorter etter verdi. Isåfall kan du alltid anta at data er sortert, og at de 3 første radene i kolonnen er også de høyeste verdiene. Endret 28. februar 2012 av Anders Hole Lenke til kommentar
Bigelk Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 Hei. Ja, sorteringen i excel er ikke noe problem. Men jeg trenger og lage en makro som henter de 3 største verdiene fra databsen til en ny en som bare viser de 3 største salgene per konsulent. + en topp 10 liste som viser de 10 største salgene. Hilsen Torbjørn Lenke til kommentar
Bigelk Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 Hei. Er det mulig og løse dette med en formel? Har prøvd =FINN.RAD(N.STØRST(G3:G7;1);F3:H7;1;) men det fungerer ikke. Hilsen Torbjørn Lenke til kommentar
Bigelk Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 (endret) Hei. fant ut at formelen over fungerer hvis man setter opp arrayet med antall ks solgt som første kolonne. finnes det en formel som kan søke i et array og finne verdier til venstre for søkeverdien? Hilsen Torbjørn Endret 29. februar 2012 av Bigelk Lenke til kommentar
Bigelk Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 Hei. igjen.. jeg kan ikke vba så godt at jeg klarer og lage en kode for dette selv. Men sånn jeg ser det for meg blir det noe sånt som dette Dim x As Integer Dim x2 As Integer Dim x3 As Integer With Range("g3:g8") 'for x = det største tallet mellom 1 og 100 'for x2 = det nest største tallet mellom 1 og 100 'for x3 = det tredjestørste tallet mellom 1 og 100 'nxt x3 'Next x2 'next x 'range("a1") = en kolonne til venstre for x 'range("b1") = x 'range("c1") = en kolonne til høyre for x hvis jeg er på riktig spor i det hele tatt, er det noen som kan "oversette" dette til kode? Hilsen Torbjørn Lenke til kommentar
Anders Hole Skrevet 29. februar 2012 Del Skrevet 29. februar 2012 Anbefaler å bruke en ferdig sorteringsalgoritme(biblioteksfunksjon) Du må i minste fall gjøre noe slikt: Private Sub CommandButton2_Click() Dim selectRange Dim selectRange_rows As Integer, Counter As Integer, testNumber As Integer Dim resultArray(3) As Integer resultArray(0) = 0 resultArray(1) = 0 resultArray(2) = 0 Set selectRange = Range("K5:K21") selectRange_rows = selectRange.Rows.Count For Counter = 1 To selectRange.Rows.Count testNumber = selectRange.Cells(Counter, 1).Value If testNumber > resultArray(0) Then resultArray(2) = resultArray(1) resultArray(1) = resultArray(0) resultArray(0) = testNumber ElseIf testNumber > resultArray(1) Then resultArray(2) = resultArray(1) resultArray(1) = testNumber ElseIf testNumber > resultArray(2) Then resultArray(2) = testNumber End If Next MsgBox ("nr 1: " & resultArray(0) & "nr 2: " & resultArray(1) & "nr3: " & resultArray(2)) End Sub Hei. igjen.. jeg kan ikke vba så godt at jeg klarer og lage en kode for dette selv. Men sånn jeg ser det for meg blir det noe sånt som dette Dim x As Integer Dim x2 As Integer Dim x3 As Integer With Range("g3:g8") 'for x = det største tallet mellom 1 og 100 'for x2 = det nest største tallet mellom 1 og 100 'for x3 = det tredjestørste tallet mellom 1 og 100 'nxt x3 'Next x2 'next x 'range("a1") = en kolonne til venstre for x 'range("b1") = x 'range("c1") = en kolonne til høyre for x hvis jeg er på riktig spor i det hele tatt, er det noen som kan "oversette" dette til kode? Hilsen Torbjørn Lenke til kommentar
Bigelk Skrevet 1. mars 2012 Forfatter Del Skrevet 1. mars 2012 (endret) Takk for hjelpen Anders Men jeg får opp en feilmld på linje: testNumber = selectRange.Cells(Counter, 1).Value Run-time error 13 Type missmatch. Har satt inn on error resume next Men da blir alle "svarene" 0 Hilsen Torbjørn Endret 1. mars 2012 av Bigelk Lenke til kommentar
Anders Hole Skrevet 1. mars 2012 Del Skrevet 1. mars 2012 (endret) Takk for hjelpen Anders Men jeg får opp en feilmld på linje: testNumber = selectRange.Cells(Counter, 1).Value Run-time error 13 Type missmatch. Har satt inn on error resume next Men da blir alle "svarene" 0 Hilsen Torbjørn Har du noe tekst i disse cellene(range)? Prøv å formater cellene til tall i workbook. Den skal funke fint. Kjør en test isnumeric, og prøve å konverter til tall om du fremdeles får problemer. Endret 1. mars 2012 av Anders Hole Lenke til kommentar
Bigelk Skrevet 2. mars 2012 Forfatter Del Skrevet 2. mars 2012 (endret) Hei. Tusen takk for hjelpen Får fortsatt opp feilen, men jeg får svar med "on error resume next" Men får opp en annen feil nå: Jeg har 2 celler med tallet 5, men koden svarer med at alle resultArrayene er 5 Hilsen Torbjørn Endret 2. mars 2012 av Bigelk Lenke til kommentar
Anders Hole Skrevet 2. mars 2012 Del Skrevet 2. mars 2012 (endret) Det er ikke mulig så lenge du initierer med 0, og ikke 5. Om du har 2 celler med 5 og bruker else if og ikke if, så vil siste være 0. Private Sub CommandButton1_Click() Dim selectRange Dim selectRange_rows As Integer, Counter As Integer, testNumber As Integer Dim resultArray(3) As Integer resultArray(0) = 0 resultArray(1) = 0 resultArray(2) = 0 Set selectRange = Range("K5:K21") selectRange_rows = selectRange.Rows.Count For Counter = 1 To selectRange.Rows.Count Dim bool As Boolean bool = IsNumeric(selectRange.Cells(Counter, 1).Value) If (bool = True) Then testNumber = selectRange.Cells(Counter, 1).Value If testNumber > resultArray(0) Then resultArray(2) = resultArray(1) resultArray(1) = resultArray(0) resultArray(0) = testNumber ElseIf testNumber > resultArray(1) Then resultArray(2) = resultArray(1) resultArray(1) = testNumber ElseIf testNumber > resultArray(2) Then resultArray(2) = testNumber End If Else End If Next MsgBox ("nr 1: " & resultArray(0) & "nr 2: " & resultArray(1) & "nr3: " & resultArray(2)) End Sub Endret 2. mars 2012 av Anders Hole Lenke til kommentar
Bigelk Skrevet 6. mars 2012 Forfatter Del Skrevet 6. mars 2012 Takk for hjelpen Anders skal teste ut koden senere (når jeg får tid) Hilsen Torbjørn Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå