Vinnaren i pepparkakshustävlingen!
2013-12-14, 13:51
  #1
Medlem
Jag försöker göra ett Exceldokument för träningsplanering.

För att kunna ange antal repetioner i formen A + B, tex 1+2 måste jag skriva en funktion i VBA som summerar antal repetitioner.

Efter lite googlade hittade jag Evaluate vilket löste problemet utmärkt, förutom en hake. Det fungerar tydligen inte att köra Evaluate på en cell som har värdet 1.

Bifogar en bild för att göra det lite tydligare: http://i.imgur.com/2esga7S.png

Kod:
Public Function SumRow(rngReps As Range, rngSet As Range) 'Anledning till att jag tar med Set utan att använda är för att få funktionen att reagera när Set ändras
    Dim cReps As Range
    SumRow = 0
    For Each cReps In rngReps
        If (cReps.Value <> vbNullString) Then
                SumRow = SumRow + Evaluate(cReps.Value) * Evaluate(cReps.Offset(0, -1).Value)
        End If
    Next
End Function

En lösning är ju att skriva if-satser för varje scenario men det känns onödigt. Det måste finnas ett enklare sätt.

Vore tacksam för hjälp.
Citera
2013-12-16, 13:12
  #2
Medlem
Antagligen inte det bästa sättet men fungerar.
Får jag fråga varför du kör Evaluate överhuvudtaget på seten? Du kommer väl aldrig köra 2+2 set?
Citera
2013-12-16, 14:27
  #3
Medlem
Citat:
Ursprungligen postat av Temp.User
Antagligen inte det bästa sättet men fungerar.
Får jag fråga varför du kör Evaluate överhuvudtaget på seten? Du kommer väl aldrig köra 2+2 set?

Det är sant. Tror det har tillkommit när jag suttit och knåpat för att lista ut vad som är fel. Tänkte att det kanske blev fel i multipliceringen på grund av att talen var i olika "format" eller någonting i den stilen.

Funkade inte riktigt, det blir nåt fel i uträkningen. Men jag ska kika lite närmare på't när jag kommer hem från jobbet. Tack så mycket!
Citera
2013-12-16, 21:17
  #4
Medlem
Citat:
Ursprungligen postat av Arr!
Det är sant. Tror det har tillkommit när jag suttit och knåpat för att lista ut vad som är fel. Tänkte att det kanske blev fel i multipliceringen på grund av att talen var i olika "format" eller någonting i den stilen.

Funkade inte riktigt, det blir nåt fel i uträkningen. Men jag ska kika lite närmare på't när jag kommer hem från jobbet. Tack så mycket!
Du vet att du kan steppa igenom med F8?
Kolla locals så ser du vilka värden du får in från de olika delarna.
Citera
2014-02-18, 21:47
  #5
Medlem
Lifelovers avatar
Tänker rent spontant att det där bör gå att lösa med formler hela vägen.

Typ =if(mid(N2;2;1)="+";(left(N2;1)+right(N2;1))*O2;N2 *O2)

Risk för att parenteserna är lite off, skrev formeln i flashback..
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback