08. december 2003 - 13:22Der er
20 kommentarer og 2 løsninger
Hjælp til formel med avanceret HVIS funktion.
I en række f.eks. (6) har jeg værdier mellem 0 og 100 stående. Jeg mangler her lidt hjælp til en, for mig avanceret HVIS funktion.
I en anden række (7) skal ovenstående værdier beregnes som følgende: Værdien i A6 skal ganges med 3,333, det skal de øvrige værdier (B6, C6, D6…osv.) også hvis ellers værdien er større end 0, så langt så godt. Hvis en eller flere på hinanden følgende cellers værdi er 0 skal den først kommende celle med værdien større end 0 fratrækkes 1 som deles ud på de ”foranstående” celler med værdien 0 samt cellen selv som også tillægges den resterende værdi.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Public Function ADVHvis(VærdiCelle As Range) As Double Dim Pværdi As Integer, Oværdi As Integer, Temp As Double, C As Integer, I As Integer Dim Nuller As Integer Nuller = 0 C = VærdiCelle.Column If VærdiCelle > 0 Then Pværdi = VærdiCelle Temp = Pværdi * 3.333 For I = 1 To C - 1 If VærdiCelle.Offset(0, -I) = 0 Then Nuller = Nuller + 1 Else GoTo SlutRegning: End If Next Else Oværdi = VærdiCelle Temp = (1 * 3.333) / 4 End If SlutRegning: If Nuller > 0 Then Temp = ((1 * 3.333) / 4) + Nuller End If ADVHvis = Temp End Function
Public Function ADVHvis(VærdiCelle As Range) As Double Dim Pværdi As Integer, Oværdi As Integer, Temp As Double, C As Integer, I As Integer Dim Nuller As Integer Nuller = 0 C = VærdiCelle.Column If VærdiCelle > 0 Then Pværdi = VærdiCelle Temp = Pværdi * 3.333 For I = 1 To C - 1 If VærdiCelle.Offset(0, -I) = 0 Then Nuller = Nuller + 1 Else GoTo SlutRegning: End If Next Else Oværdi = VærdiCelle Temp = (1 * 3.333) / 4 End If SlutRegning: If Nuller > 0 Then Temp = ((1 * 3.333) / 4) + (VærdiCelle - 1) End If ADVHvis = Temp End Function
Det ser umiddelbart fint ud til det eksempel jeg har lavet, men meningen var at 4 tallet >>Temp = (1 * 3.333) / 4<< skulle være variabel ud fra hvor mange celle der indeholdt 0. I mit eksempel var der 3 hvilket giver 4 celler, men der kan være mellem 0 og 60 celler indeholdende værdien 0, derfor skulle denne også gerne være variabel.
Function V_ADVHvis(VærdiCelle As Range) As Double Dim Nuller As Integer Nuller = 0 R = VærdiCelle.Row If VærdiCelle = 0 Or VærdiCelle.Offset(-1, 0) = 0 Then For I = 1 To R - 1 If VærdiCelle.Offset(-I, 0) = 0 Then Nuller = Nuller + 1 Else Exit For End If Next I = -1 Do I = I + 1 If VærdiCelle.Offset(I, 0) = 0 Then Nuller = Nuller + 1 End If Loop Until VærdiCelle.Offset(I, 0) > 0 Or VærdiCelle.Offset(I, 0) = "" End If If VærdiCelle.Offset(I, 0) = "" Then If Nuller > 0 Then Nuller = Nuller - 1 Else If Nuller > 0 Then Nuller = Nuller + 1 End If A = Nuller If A > 0 And VærdiCelle = 0 Then V_ADVHvis = 1 * 3.333 / A If A = 0 And VærdiCelle > 0 Then V_ADVHvis = VærdiCelle * 3.333 If A > 0 And VærdiCelle > 0 Then V_ADVHvis = (1 * 3.333 / A) + A - 1 Application.Volatile End Function
Dit forslag virker nogenlunde, men ved den første og den sidste celle går det galt. Man skal godt nok "sortere" mellem de 2 kolonner for at få de rigtige data men den har jeg luret.
Det er ikke kun sidste celle det er galt med, hver gang der står en værdi regnes der forkert, cellerne ovenover indeholdende 0 får den rigtige værdi, mens cellen med værdien ikke fratrækkes 1 og tillægges den andel 0 cellerne får.
Jeg vil fordele poitene lidt da begge løsningsmodeller er ok.
Dog vil jeg sige at kabbak´s løsning er mest brugervenlig selv om dambe´s løsning nok er den jeg bedst selv kan gennemskue ;-)
dambe:35p kabbak:100p
Tak for indsatsen og god weekend
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.