Avatar billede wolfcastle Nybegynder
28. februar 2012 - 11:28 Der er 13 kommentarer

Summere celler i vba

Jeg er nybegynder i vba universet og har dermed et simpel spørgsmål. Jeg vil gerne lave en function der tager hver værdi i en række celler og dividere de enkelte værdier med f.eks. 1.10 og derefter summere alle værdierne til ét tal. Jeg kan regne ud at der skal bruges en "loop" til at gå igennem alle værdierne og dividere dem med 1.1, men jeg kan bare ikke lave en der virker. Håber i kan hjælpe..
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 11:33 #1
Sub Regn()

Range("A1").Select

Tal = 0
Do Until Len(ActiveCell.Text) = 0
    Tal = Tal + ActiveCell.Value
    ActiveCell.Offset(1, 0).Select
Loop


Range("B1").Value = Tal
Range("B2").Value = Tal / 2

End Sub
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 11:33 #2
Håber det kan give dig en idé til at bygge videre :)
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 11:35 #3
Tal = Tal + (ActiveCell.Value / 1.1)

Skal din formel muligvis hedde
Avatar billede wolfcastle Nybegynder
28. februar 2012 - 12:16 #4
Den virker som den skal - men, er det muligt at lave den som en function(), da tallene skal opdateres automatisk når der ændres i værdierne. Derudover kunne jeg godt tænke mig, at man kan markere de værdier man skal beregne, istedet for at de skal ligge i kolonne a. På samme måde som man bruger funktionerne på i regnearket. På forhånd tak......
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 13:29 #5
Jeg forstår ikke helt hvad det er du gerne vil? :-O
Avatar billede wolfcastle Nybegynder
28. februar 2012 - 13:41 #6
Det er helt ok. Jeg prøver med et eksempel..

Hvis man har en masse værdier i et regneark:

100  200  500  300.... 600

så skal funktionen udføre denne opgave 100 / x + 200 / x + 500 / x + 300 / x +......+ 600 / x

men da værdierne kan starte hvor som helst i regnearket, så er det ikke muligt på forhånd at definere hvor værdier ligger. Så funktionen skal se sådan her ud

Regn(talværdier,x)

jeg tænker at man laver en loop i stil med:

for each cell in (range)
next cell

håber det giver lidt mening, men ellers skal den bare fungere lidt som npv() funktionen i excel
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 14:17 #7
Sådan som jeg forstå det, så skal funktionen bruges sådan her:


A1 = 2
A2 = 1

B1 = Regn(A1:A2,2) > = 1½

Er det på sådan en måde du havde tænkt dig?

For hvis det altid er f.eks. 2 du skal divider med, var det så ikke nemmere at tage =Sum(Range)/2

Eller er jeg helt galt på den
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 14:17 #8
forstår *
Avatar billede wolfcastle Nybegynder
28. februar 2012 - 15:37 #9
det første forslag du kom med var som jeg havde tænkt det. Men du havde lavet den som en sub, men jeg vil gerne have den som en funktion, hvor man vælger værdierne med musen.
Det er ikke altid det samme tal der skal divideres med, for det første tal skal divideres med 1,1^1 det næste 1,1^2 osv. Jeg har modificeret den sub du lavede så den passer med det ovenstående, men problemet er, at værdier skal indtastes i kolonne A, istedet for at man bare markerer værdierne, som i =regn(d3:d50,rente).
Mit problem er at jeg ikke ved hvordan man kan få vba til at tage den første værdi i rækken og så slutte ved det sidste tal. Men kunne forstille mig at det var noget med:

For each cell
Next cell
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 15:48 #10
Hvis de kommer lige efter hinanden så kan du gøre sådan her :

Function Regn(rng As Range, Rente)
TalTotal = 0

For Each cell In rng
    TalTotal = TalTotal + (cell.Value / Rente)
Next

Regn = TalTotal

End Function
Avatar billede Mads Larsen Nybegynder
28. februar 2012 - 15:50 #11
Function Regn(rng As Range, Rente)
TalTotal = 0

For Each cell In rng
    TalTotal = TalTotal + (cell.Value / Rente)
    Rente = Rente + 0.1
Next

Regn = TalTotal

End Function

Så kan du jo evt. forhøje renten på måden her :)
Avatar billede wolfcastle Nybegynder
29. februar 2012 - 13:05 #12
Det var lige det jeg havde brug for. Mange tak for det :)
Avatar billede Mads Larsen Nybegynder
29. februar 2012 - 13:15 #13
Det var godt at høre :)
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
Kurser inden for grundlæggende programmering

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