Gå til innhold

Excel 2007 vba Finne verdier


Anbefalte innlegg

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 av Bigelk
Lenke til kommentar
Videoannonse
Annonse

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 av Anders Hole
Lenke til kommentar

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 av Anders Hole
Lenke til kommentar

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

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 av Bigelk
Lenke til kommentar

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

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

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 av Bigelk
Lenke til kommentar

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 av Anders Hole
Lenke til kommentar

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 av Bigelk
Lenke til kommentar

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 av Anders Hole
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...