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

Tabel met veel voorwaarden

Status
Niet open voor verdere reacties.

Angelala

Nieuwe gebruiker
Lid geworden
24 mei 2012
Berichten
4
Hoi,

Ik heb nog nooit met marcro's in Excel gewerkt. Ik heb wel wat verstand van logisch programmeren, maar dit nog nooit in VBA gedaan. Ik moet berekeningen gaan programmeren in een PLC. Om deze berekeningen te testen is het overzichtelijker om deze eerst in excel te maken. Omdat ik weinig tijd heb om dit helemaal uit te zoeken wil ik vragen of jullie me een beetje kunnen helpen. Met een klein voorbeeldje kom ik er zelf denk ik wel uit hoe ik het verder op moet lossen.

Ik heb een paar berekeningen opgesteld en deze wil ik in een cell weergeven onder een bepaalde voorwaarde.

Ik weet niet hoe ik het volgende moet doen met VBA:
Ik heb een tabel opgesteld en de berekeningen komen in 1 kolom onder elkaar te staan. Nu wil ik dus in de hele kolom willen bepalen of de uitkomst van de berekening hoger of lager dan 1 getal zijn. Dit getal is al ingevuld in een cel. Als het als de uitkomst van de berekening hoger is dan dat getal, moet dat getal in die cel komen, en de rest in de cel er onder.

Ik heb wel voorbeelden gezien met benoemingen naar cellen, zoals a1 enz. Maar ik krijg niet gevonden hoe dit voor de hele kolom kan, waarbij het niet uit maakt in welke cel dit getal staat. Het verdere if-else statement moet me zelf wel lukken.

Alvast bedankt, mocht het niet duidelijk zijn dan lees ik het wel!
 
Wazige uitleg, je wilt iets berekenen van een hele kolom en dan de celwaarde vervangen als die hoger is en de rest eronder?
Elke rest, en hoezo eronder, je vergelijkt in een kolom hoe zet je er dan iets onder?

in ieder geval een voorbeeldje van een macro voor alle cellen in een kolom:

Code:
For Each cl In Range("A:A").SpecialCells(2)
If cl.Value > "jouw controle cel" Then
bla bla bla
bla bla bla
End If
Next

Plaats anders even een voorbeeld bestand.

Niels
 
Alvast bedankt.
Ik bedoel eigenlijk dat elke cel een voorwaarde met berekeningen heeft. Deze voorwaarde geeft een uitkomst en deze uitkomst moet per cel in de kolom vergeleken worden met 'de controle cel'.
Als deze uitkomst groter is dan de celwaarde, dan krijgt de berekende cel de waarde van de controle cel.
De overige waarde, dus de berekende waarde - de controle waarde, moet in de cel onder de berekende waarde komen (in dezelfde kolom).
De volgende cel (in dezelfde kolom) moet weer berekenen, vergelijken, enz...

Ik zal het even praktisch uitleggen ;)
Ik moet lengtes en posities van tapes op een tafel berekenen. Deze lengtes moeten een tafel precies bedekken. Als de berekende lengte langer is dan 600mm, moet deze lengte gesplits worden in 600 en het rest stuk.. Ik moet hierbij dus ook de positie en het aantal verwerkte tapes berekenen, vandaar dat ik dit restgetal in 'de volgende cel' wil hebben..

Ik heb nog niet echt een voorbeeld bestand, ben nog aan het knutselen ;) Ik hoop dat het zo iets duidelijker is.
 
Een voorbeeldbestandje is duidelijker, dit lijkt mij als ik de vraag goed begrijp in een paar minuten gemaakt.
Wat wil je waar hebben.

nog een voorbeeldje , bedoel je dan dit.

In E5 lengte tafel en in lengtetape?

Code:
Sub test()
j = Range("E5").Value
For i = 1 To Int(Range("e5") / Range("G5"))
Range("E5").Offset(i, 0).Value = Range("G5").Value
Next
j = j Mod Range("G5").Value
If j <> 0 Then Range("E5").Offset(i, 0).Value = j
End Sub

Niels
 
Ja, zoiets bedoel ik!
Bedankt :)!

Met offset wordt dus 'de cel er onder' bedoeld?
Alleen als de berekende lengte langer is dan maximaal, moet de maximale lengte in de cel staan ipv de berekende.

En als ik dit dus voor de hele kolom uit wil voeren, ipv voor 1 cel, moet ik je eerste code er bij zetten?
 
Zoals ik al aangaf snap ik "Hele Kolom" niet.
Welke hele kolom.
Je vraagt om waardes onder elkaar te zetten dan kan er verder toch niks in die kolom staan want dan heb je toch kans dat je die overschrijft.

Inderdaad de offset gaat naar de cel eronder.
Alleen als de cel groter is doe je zo:

Code:
Sub test()
j = Range("E5").Value
If Range("e5").Value > Range("G5").Value Then
For i = 1 To Int(Range("e5") / Range("G5"))
Range("E5").Offset(i, 0).Value = Range("G5").Value
Next
j = j Mod Range("G5").Value
If j <> 0 Then Range("E5").Offset(i, 0).Value = j
End If
End Sub

Niels
 
Mijn excuses voor de hele late reactie, ik heb er een tijd niet meer aan gewerkt.

Ik zal voor de duidelijkheid (hoop ik) mijn excel bestand toevoegen.

Bekijk bijlage berekenen lengte tapes.xlsm

De onderstaande code heb ik tot nu toe.
Hierbij wordt in E11 de lengte van de tape getypt, om het te testen.
Als dit dus een hoger getal is dan 600, komt er in E11 het getal 600, en de restwaarde in E12.

Code:
Sub test()
i = 1
j = Range("C11").Value
k = Range("E11").Value
If Range("e11").Value > Range("C11").Value Then
For i = 1 To Int(Range("c11") / Range("E11"))
Range("C11").Offset(i, 0).Value = Range("E11").Value
Next
j = j Mod k
If j <> 0 Then Range("E11").Value = j
j = k Mod Range("E11").Value
If j <> 0 Then Range("E11").Offset(i, 0).Value = j
End If
End Sub

Deze code wil ik dus uitvoeren over de kolom L7 t/m L46. In deze cellen staan de voorwaardes voor verschillende berekeneningen. Hierbij wil ik dus ook de voorwaarde hebben dat als de uitkomst groter is dan 600, het restgetal moet in de cel daar onder, zoals in het voorbeeld. De cel daar weer onder moet weer de berekening uitvoeren, en weer vergeleken worden met 600.

De berekeningen kloppen nog niet helemaal.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan