• 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.

Hoogste waarde ooit

Status
Niet open voor verdere reacties.

vis ta

Terugkerende gebruiker
Lid geworden
31 mei 2007
Berichten
3.253
(hoe) Is het mogelijk om in excel de hoogste waarde te laten bijhouden?

Ik heb nu namelijk 'tellers' in excel staan die steeds optellen maar soms worden gereset. En nu zou ik heel blij zijn als excel voor mij automatisch het 'record' zou kunnen bijhouden...
 
Hoi,

Wanneer die waarden onder elkaar in een kolom, of naast elkaar in een rij staan, is daar dan de simpele functie =MAX() niet voor?

Wanneer die waarden in kolom B staan bijvoorbeeld:
=MAX(B:B)

of in rij 3
=MAX(3:3)

Zoiets?
 
Maar dan gebeurt het niet automatisch hea:confused:
en heb ik om den duur een eindeloze rij of kolom
 
Maar dan gebeurt het niet automatisch hea:confused:
en heb ik om den duur een eindeloze rij of kolom

Wel degelijk gebeurt dat automatisch, want zodra in de betreffende kolom of rij een hogere waarde komt te staan dan de 'laatste hoogste' wordt die nieuwe vermeld .....:confused:
 
Maar je moet wel opletten dat je die max niet kwijt bent met een reset

Ron
 
Ik bedoel dat ik dan handmatig die rij moet gaan aanvullen

de bedoeling is dus dat ik bijvoorbeeld een cel D7 heb en ik wil dat in cel G7 de hoogste waarde staat die er ooit in D7 heeft gestaan...

Met andere woorden: als ik in D7 16 heb staan en in G7 18 dan moet D7 doortellen tot 17, vervolgens 18 en pas bij 19 moet G7 19 worden en wanneer D7 gereset wordt en er weer 0 komt te staan moet G7 19 blijven.

Dat is geen rij of kolom...:confused:
 
Ik dan dat niet zonder VBA oplossen. Iemand die het zonder VBA kan?

Ron
 
Ik probeer m'n best te doen met vba maar ik denk dat het duidelijk is dat ik er geen crack in ben:p
Maar als je me kan uitleggen welke vba-codes ik moet gebruiken om het klaar te spelen?
 
Ik probeer m'n best te doen met vba maar ik denk dat het duidelijk is dat ik er geen crack in ben:p
Maar als je me kan uitleggen welke vba-codes ik moet gebruiken om het klaar te spelen?

Deze VBA-code zou moeten werken:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Maximum As Long
Dim Nieuw As Long

Maximum = Range("G7").Value
Nieuw = Range("D7").Value

If Nieuw > Maximum Then
Range("G7").Value = Nieuw
End If

End Sub

Is dit hetgeen je zoekt?

Groeten, Raf
 
goed, ik ken bitter weinig van vba dus euhm. Die code plak ik gewoon in nieuwe modules?

En als ik meerdere records wil bijhouden maak ik zo meerdere modules aan?
 
goed, ik ken bitter weinig van vba dus euhm. Die code plak ik gewoon in nieuwe modules?

En als ik meerdere records wil bijhouden maak ik zo meerdere modules aan?

vis ta,

Hier een voorbeeldje dat 3 records bijhoudt...

Succes !!!
 

Bijlagen

vis ta,

Hier een voorbeeldje dat 3 records bijhoudt...

Succes !!!

Ik zou gebruik maken van een Target omdat je anders bij een Change_Event het programma onnodig vaak aanroept.
En vanwaar een Array?

Ikzelf had zo iets in gedachte:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D7:D9")) Is Nothing Then
        Range("G" & Target.Row).Value = WorksheetFunction.Max(Range("D" & Target.Row).Value, Range("G" & Target.Row).Value)
    End If
End Sub

Met vriendelijke groet,


Roncancio
 
Ik zou gebruik maken van een Target omdat je anders bij een Change_Event het programma onnodig vaak aanroept.
En vanwaar een Array?

Ikzelf had zo iets in gedachte:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D7:D9")) Is Nothing Then
        Range("G" & Target.Row).Value = WorksheetFunction.Max(Range("D" & Target.Row).Value, Range("G" & Target.Row).Value)
    End If
End Sub

Met vriendelijke groet,


Roncancio


Tja Roncancio,

Ik ben eigenlijk ook nog maar een "junior" en vond de array makkelijker zodat vis ta de cellen willekeurig kan plaatsen op het werkblad.
Die "Target" kende ik niet, lijkt een goed idee :thumb:
 
Tja Roncancio,

Ik ben eigenlijk ook nog maar een "junior" en vond de array makkelijker zodat vis ta de cellen willekeurig kan plaatsen op het werkblad.
Die "Target" kende ik niet, lijkt een goed idee :thumb:

Een Array is zeker aan te raden als de cellen willekeurig op het werkblad staan, maar in dit geval zou het niet nodig zijn.:thumb::cool:
Ik zie een junior programmeur niet zo gauw array's gebruiken in zijn/haar code. En junior zijn bij Helpmij zegt niets over je niveau.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Sorry voor het late antwoord, ik heb ook vakantie genomen:p

Ik zou gebruik maken van een Target omdat je anders bij een Change_Event het programma onnodig vaak aanroept.
En vanwaar een Array?

Is dat array/change event-ding heel erg?

Want ik begrijp die beter dan die andere:confused:
Als ik het goed begrijp heb ik die D7 en G7 enz... maar te vervangen door de cellen die het op mijn blad zijn...

Ik gebruik trouwens ook geen hele range, bij mij draait het om de veranderingen in G8, I8, K8, M8 en P8
Die zouden respectievelijk in rij 12 moeten komen.

Stel daarbij dat ik die vervolgens kopieer of een rij invoeg, veranderd de code dan automatisch of zal ik deze telkens zelf moeten veranderen?

Wat betreft het onnodig aanroepen van het programma. Zou het 'vast' kunnen lopen als ik ook nog eens een andere macro in het blad heb lopen die elke seconden wordt uitgevoerd?
 
Is dat array/change event-ding heel erg?
Integendeel.
Een Change_Event is een event(=gebeurtenis) dat aangeroepen wordt als er een wijziging plaatsvindt op het werkblad. Event zijn dus gebeurtenissen die een werkblad "meemaakt".
Een werkblad ondergaat de nodige gebeurtenissen (wijzigingen, verplaatsingen van de cursor, afsluiten, etc) waaraan een ontwikkelaar code kan verbinden.
Een array is een soort ladenkast waar de ontwikkelaar gegevens kan plaatsen en uithalen.
Dit is wat ingewikkelder te programmeren dan mijn oplossing (vind ik).
Mijn oplossing berekent slechts en de oplossing met een array verzamelt de gegevens en schrijft ze dan weg.

Want ik begrijp die beter dan die andere:confused:
Als ik het goed begrijp heb ik die D7 en G7 enz... maar te vervangen door de cellen die het op mijn blad zijn...
Welke je gebruikt is helemaal jouw keuze. Mijn code werkt als volgt:

Regel 1. Aansturing omdat er een wijziging is geweest in het werkblad.
Regel 2. Controleren of de wijziging in het bereik D7:D9 is.
Regel 3. Als regel 2 waar is, cel G (op rij wijziging) is grootste van D (rij) en G (rij)
Regel 4. Einde IF
Regel 5. Einde Aansturing Event

Toelichting Regel 3.
Er is dus een wijziging in bijv. cel D8.
De cel G8 krijgt de grootste waarde van D8 en G8.
Het maakt dus niet uit of D8 of G8 de grootste is.

Ik gebruik trouwens ook geen hele range, bij mij draait het om de veranderingen in G8, I8, K8, M8 en P8
Die zouden respectievelijk in rij 12 moeten komen.
Bij een range bedoel ik een reeks opeenlopende cellen.Bijv.: G1:G12, G8:P8, etc.
Dat is hier niet aan de orde.

Stel daarbij dat ik die vervolgens kopieer of een rij invoeg, veranderd de code dan automatisch of zal ik deze telkens zelf moeten veranderen?
Als het hard gecodeerd is (celbereiken staan in code) zou je dat steeds moeten aanpassen.
Als het flexibel geprogrammeerd is (dus met relatieve verwijzingen e.d.), niet.

Wat betreft het onnodig aanroepen van het programma. Zou het 'vast' kunnen lopen als ik ook nog eens een andere macro in het blad heb lopen die elke seconden wordt uitgevoerd?
Dat kan inderdaad voor problemen (vastlopen, vertragen, etc) zorgen.

Met vriendelijke groet,


Roncancio
 
Bedankt. Ik ga eerst die in mijn ogen simpele proberen en als het vast blijkt te lopen verdiep ik me hier verder in.
 
Dit dacht ik er van te moeten maken:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Const AantalRecords = 10

arrayMaximum = Array("G8", "G9", "I8", "I9", "K8", "K9", "M8", "M9", "P8", "P9")
arrayNieuw = Array("G12", "G13", "I12", "I13", "K12", "K13", "M12", "M13", "P12", "P13")

For i = 0 To AantalRecords - 1
    
    Maximum = Range(arrayMaximum(i)).Value
    Nieuw = Range(arrayNieuw(i)).Value
      
    If Nieuw > Maximum Then
    Range(arrayMaximum(i)).Value = Nieuw
    End If
    
Next


End Sub

Maar dat werkt dus niet... Waar zit ik fout?

Bovendien heb ik in mijn werkblad ook een macro als klok (zie een ander topic van me) die elke seconde aftelt.

Die gaf eerst een foutmelding bij volgende code maar nu niet meer (?)
Code:
Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:00:01"), "Klok"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime dTime, "Klok", , False
End Sub
 
Omdat ik toch even verder wou met m'n rekenblad wilde ik voorlopig de wijzigingen even handmatig aanbrengen. Toen ontdekte ik dat ik de code verkeerd had en ik de twee reeksen moest omdraaien. Dat is gebeurd en nu heb ik volgende code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Const AantalRecords = 10

arrayMaximum = Array("G12", "G13", "I12", "I13", "K12", "K13", "M12", "M13", "P12", "P13")
arrayNieuw = Array("G8", "G9", "I8", "I9", "K8", "K9", "M8", "M9", "P8", "P9")

For i = 0 To AantalRecords - 1
    
    Maximum = Range(arrayMaximum(i)).Value
    Nieuw = Range(arrayNieuw(i)).Value
      
    If Nieuw > Maximum Then
    Range(arrayMaximum(i)).Value = Nieuw
    End If
    
Next


End Sub

Ik denk alleen dat er helaas nog een foutje inzit:confused:
Het werkt nu goed, wanneer de getallen veranderen blijven de hoogste waarden bewaard in die andere cellen. Alleen van enkele waarden waarvan de nieuwe waarde 0 is blijven deze leeg...

Ik heb nu even eerst een andere wijziging aangebracht waardoor deze er wel opstonden. Nu blijkt het geen probleem te zijn.

Kan ik verder zo of moet ik nog ergens rekening mee houden? Kan de code nog iets doen mislopen met het rekenblad?

Alvast bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan