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

Loop

Status
Niet open voor verdere reacties.

don42

Gebruiker
Lid geworden
25 apr 2014
Berichten
764
Wie kan mij helpen om regel 12 van de bijlage in een loop te krijgen
dat de berekening gemaakt wordt tot helemaal beneden.
ik heb regel 12 'werkend'
er worden 5 waardes ingevuld van D tot H
de hoogte en de laagste waarden worden er afgeteld
zie bijlage
Bekijk bijlage Telsysteem.xlsm
Don
 
Bijgaand een geheel nieuwe opzet waarbij de data in de betreffende rijen van kolommen D t/m M in een array worden gelezen; vervolgens worden de berekeningen binnen de array gedaan (razendsnel dus) en uiteindelijk wordt het resultaat weer teruggeschreven naar de betreffende rijen in kolommen D t/m M.
Ik heb alle scores ingevuld met willekeurige getallen tussen 5,0 en 10,0.
Code:
Private Sub CommandButton1_Click()
    Dim daten
    Dim i As Long
    Dim j As Integer
    Dim Max As Double, Min As Double, Summe As Double
    daten = Range("D12:M" & Cells(Rows.Count, 4).End(xlUp).Row)
    For i = 1 To UBound(daten, 1)
        If Not IsEmpty(daten(i, 1)) Then
            Max = -1
            Min = 1000
            Summe = 0
            For j = 1 To 5
                If daten(i, j) > Max Then Max = daten(i, j)
                If daten(i, j) < Min Then Min = daten(i, j)
                Summe = Summe + daten(i, j)
            Next j
            daten(i, 8) = Max
            daten(i, 9) = Min
            daten(i, 6) = Summe - Min - Max
            daten(i, 10) = daten(i, 6)
        End If
    Next i
    Range("D12").Resize(UBound(daten, 1), UBound(daten, 2)) = daten
End Sub
 

Bijlagen

  • Telsysteem MB.xlsm
    88,7 KB · Weergaven: 27
Beste Marcel
top zeg wat werkt dit mooi
heb er even naar gekeken maar de code is best moeilijk
zou jij als je tijd heb voor mij een kleine uitleg willen geven deze code werkt
Je zou mij daar een groot plezier meer doen
en al bedankt voor wat je al heb t gedaan super
 
Eerlijk gezegd vind ik dat de code best lekker weg leest, oftewel goed te begrijpen is.
Een stukje uitleg had ik al gegeven.

Cells(Rows.Count, 4).End(xlUp).Row
Dit doet hetzelfde als wanneer je de onderste cel in kolom 4 (D) hebt geselecteerd (dus D1048576) (Cells(Rows.count, 4)) en dan op Ctrl+PijlOmhoog drukt (End(xlUp)); dan kom je in de laatstgevulde regel (row) in kolom D, in mijn voorbeeld regel 315.

daten = Range("D12:M" & Cells(Rows.Count, 4).End(xlUp).Row)
De inhoud van - in het voorbeeld - D12:M315 wordt in variabele daten geplaatst, dat daarmee een matrix wordt van 304 rijen en 10 kolommen (D t/m M zijn 10 kolommen).

De buitenste For...Next lus (met teller i), gaat over alle rijen in daten.

UBound(daten, 1) geeft aan hoeveel elementen daten heeft in de eerste dimensie (rijen), 304 dus.
Ubound(daten, 2) geeft aan hoeveel elementen daten heeft in de tweede dimensie (kolommen), 10 dus.

Als er een score is ingevuld in de huidige rij (daten(i, 1)) (dus: If Not IsEmpty(daten(i, 1))) dan moet de berekening plaatsvinden:
In een lus over de scores in kolom 1 t/m 5 (teller j), worden het maximum, minimum en de som bepaald, nadat deze variabelen eerst zijn geïnitialiseerd.
Daarna worden de resultaten in de daartoe bestemde posities in de betreffende rij van daten ingevuld.

Uiteindelijk wordt de matrix daten teruggeschreven naar - in het voorbeeld - D12:M315, oftewel 304 rijen en 10 kolommen (Resize conform de omvang van de matrix daten) te beginnen met D12 (Range("D12")).
 
Laatst bewerkt:
Bedankt voor deze mooie uitleg
en je geweldige hulp
Ik ga de vraag sluiten
:thumb:

Don
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan