• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Optellen negatieve getallen binnen een te kiezen datumbereik

Status
Niet open voor verdere reacties.

anton44

Verenigingslid
Lid geworden
20 mei 2005
Berichten
1.780
Optellen negatieve getallen binnen een te kiezen datumbereik.
Helaas zelf nog geen werkende oplossing gevonden.
Zie voorbeeldbestand.
 

Bijlagen

Deze zou moeten werken

Code:
=SOMPRODUCT(ALS.FOUT((MAAND($E$4:$E$52)=$I$56)*($I$4:$I$52);0))
 
Deze zou moeten werken

Code:
=SOMPRODUCT(ALS.FOUT((MAAND($E$4:$E$52)=$I$56)*($I$4:$I$52);0))

Bedankt, maar helaas de uitkomst geeft 0 aan.
maand(bereik) geeft #waarde !
 
Laatst bewerkt:
Heb je wel iets ingevuld in je maand cel?
 
Door de: ALS.FOUT wordt het een matrixformule.
Maar niet slim natuurlijk; wie zet er nu een apostrof in een cel? (de Als.fout is dan ook overbodig).

De formule houdt geen rekening met alleen de negatieve getallen.
 
Vandaar dat de formule mis ging.. apostrof
 
@HSV, @ JVeer
Als matrixafsluiting werkt de formule wel maar de vraag om alleen negatieve bedragen op te tellen wordt niet opgelost.
 
Code:
=somproduct(als.fout((maand($e$4:$e$52)=$i$56)*($i$4:$i$52<0)*($i$4:$i$52);0))
 
@JVeer. Deze doet wel wat er gezocht heb. Doorgronden doe ik hem echter niet. Kun je een tipje van de sluier optillen ?
 
Het zijn als het ware allemaal voorwaarden binnen de formule. De uitkomsten van de voorwaarden die WAAR zijn, worden vermenigvuldigd (WAAR=1, dus er wordt 1*1 gedaan wanneer voorwaarden waar zijn).
Dat gegeven, vermenigvuldig je het bereik (i4:I52) met de 1'en, wat resulteert in een opsomming(SOMPRODUCT) van de negatieve getallen.

Alle positieve getallen worden buiten beschouwing gelaten doordat de voorwaarden ONWAAR retourneren.
Beetje lastig uit te leggen. Probeer eens met F9 per deel door de formule te gaan.
 
Het werkt wel goed.:thumb:
 
@Senso. Het onderwerp blijft blijkbaar onze zinnen prikkelen.;)
Ben ook nog even aan het testen geweest.
1. De opmaak "rood" voor negatieve getallen is niet voorwaardelijk voor de goede werking.
2. Dit bracht me wel op een ander idee.
Met onderstaande macro komt er een formule beschikbaar die ken regelen met gekleurde fonts.
Het vreemde is nog dat die niet werkt in het voorbeeld maar wel als je een nieuwe kolom maakt met getallen in gekleurde font (hier rood).
Ik ben er nog niet achter waarom niet in de voorbeeld kolommen. Ook met ASAP Utilities nog geen oplossing daarvoor gevonden.
Wordt mogelijk vervolgd.
Code:
Public Function SumByFontColor(pRange1 As Range, pRange2 As Range) As Double
   ' Application.Volatile
    Dim rng As Range
    Dim xTotal As Double
    xTotal = 0
    For Each rng In pRange1
    If rng.Font.Color = pRange2.Font.Color Then
    xTotal = xTotal + rng.Value
End If
    Next
    SumByFontColor = xTotal
End Function
 
Excel is tot nader order geen kleurboek.
Zo'n UDF wordt enkel herrekend als er in de bereiken, die meegegeven worden als argument, iets verandert.
Door toevoeging van "application.volatile" wordt de UDF ook herrekend als er in je werkblad iets verandert.
Het invoegen van een kolom is dus zo'n trigger waardoor je UDF aan de gang gaat.
Het invullen van een willekeurige cel in je werkblad is dat ook.
Maar het louter handmatig inkleuren van cel, het veranderen van de opmaak, etc is geen trigger. Daar moet je zelf voor zorgen.
 
Ben met je eens dat werken met kleuren in Excel niet altijd goed werkt, dus niet altijd betrouwbare resultaten geeft.
Een automatische trigger bij wijzigingen heb ik lopen door als de volgende code in het werkblad op te nemen.
Zodra er wijzigingen in het bereik C2:O72 iets wijzigt start een volgende macro
Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
 'macro wordt gestart als er wijzigingen worden aangebracht in het opgegeven bereik waarin opgenomen:
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    
 If Not Intersect(Target, Range("C2:O72")) Is Nothing Then
       Call Macro_R 'volgende stap
 End If
  End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan