Toon posts:

Waarde ontleden excel

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oi,

Ik zou voor een project prijsbepalingen moeten doen voor het aantal genomen stalen:
Ik verduidelijk mij even:

Als ik bv 59 stalen neem wordt de prijsbepaling van deze staalname als volgt opgemaakt...

De eerste 10 stalen kosten 47€
De stalen 11 tot 30 kosten 29,5€
Stalen vanaf 31 tot ... kosten 29€

= 10x47€ + 20x29.5€ + 29x29€


Ik zou dit graag automatisch laten berekenen, dus als ik in een cel 59 invoeg wil ik direct de prijs zien...

Is dit mogelijk?
Alvast bedankt _/-\o_

Alle reacties


Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
Oi @Verwijderd , uiteraard is dat mogelijk...

Probeer eerst de 'logica' van je vraag te ontleden. Welke stappen zou je nemen? Hoe zou je deze aan een 'domme' computer uitleggen?

Naar als uitgangspunt:
Aantal stalen = x

Stel een formule op met 'x' als uitgangspunt:

Opzetje:
Als x >= 1  en x <= 10 dan ...
Als x >= 11 en x <= 30 dan...
Anders...


Ga vervolgens in Excel aan de slag met de formules ALS() en EN() en bouw je logica+formules na.

Opzetje in Excel, de formule staat in cellen F3:L3, de bedragen daarin worden dus automagisch door excel berekend, gebaseerd op het bestelde aantal in F2:L2 en de staffellijst in A1:C4.
Afbeeldingslocatie: https://tweakers.net/ext/f/AjE1uYprOVrpgPfYPPRdnxjf/full.png

[ Voor 44% gewijzigd door breew op 05-07-2018 09:23 ]


Acties:
  • +1 Henk 'm!

  • Unusable
  • Registratie: Juli 2015
  • Laatst online: 26-09 22:27
Hoi @Verwijderd ,

Dit kan je natuurlijk op verschillende manieren oplossen in de code of met tables zoals hierboven je kunt het ook oppakken door middel van een macro te maken.

code:
1
2
3
4
5
6
7
8
9
10
Sub Macro1()
Dim x As Integer

x = ActiveCell.Value

If x <= 10 Then ActiveCell.Offset(1, 0) = x * 47
If x > 10 And x <= 30 Then ActiveCell.Offset(1, 0) = 10 * 47 + (x - 10) * 29.5
If x > 30 Then ActiveCell.Offset(1, 0) = 10 * 47 + 20 * 29.5 + (x - 30) * 29

End Sub


Zat zelfs nog een foutje in :F misschien is dit makkelijker?

[ Voor 45% gewijzigd door Unusable op 05-07-2018 11:29 ]


Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
Unusable schreef op donderdag 5 juli 2018 @ 10:10:
Hoi @Verwijderd ,

Dit kan je natuurlijk op verschillende manieren oplossen in de code of met tables zoals hierboven je kunt het ook oppakken door middel van een macro te maken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Macro1()
Dim x, eerste, tweede, derde As Integer

x = ActiveCell.Value

'x is dan je huidige cel je kunt hier nog ander waardes of een loopje voor inbouwen voor selecteren

'opbouwen van de eerste tweede en derde waarde
If x > 10 Then eerste = 10 Else eerste = x
If x > 20 Then tweede = 20 Else tweede = x - 10
If x > 30 Then derde = x - 30

'Voor het berekenen zet je dan de totaal waarde 1 onder de huidige cel
ActiveCell.Offset(1, 0) = eerste * 47 + tweede * 29.5 + derde * 29

End Sub


Succes
vba FTW :)
Maar aangezien TS hier komt met een vraag over hoe dit probleem aan te pakken, gok ik dat hij/zij nog niet echt uit de voeten zal kunnen met vba ;-)

Echter; als TS het wil leren, dan zijn dit soort vragen wel de uitgeschreven mogelijkheid daarvoor :+. Ik persoonlijk zou dan trouwens geen Sub maken, maar een Function

Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
@Unusable
Je maakt (waarschijnlijk) een veelvoorkomende fout in je code:
Visual Basic:
1
Dim x, eerste, tweede, derde As Integer

Je declareert nu alleen 'derde' als Integer.. de rest is Variant...
Je wilt waarschijnlijk:
Visual Basic:
1
Dim x As Integer, eerste As Integer, tweede As Integer, derde As Integer

Acties:
  • +1 Henk 'm!

  • Unusable
  • Registratie: Juli 2015
  • Laatst online: 26-09 22:27
Hahw, nee ik had bij een waarde groter dan 20 en 30 ging hij de else statement in dus dat was verkeerd.

De dim werkt gewoon met komma seperator, zie MS docs (https://docs.microsoft.co...laring-multiple-variables)

maar dat gaat een beetje offtopic :)

Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
Unusable schreef op donderdag 5 juli 2018 @ 11:08:
De dim werkt gewoon met komma seperator, zie MS docs (https://docs.microsoft.co...laring-multiple-variables)

maar dat gaat een beetje offtopic :)
Dat geldt wellicht voor VB, maar niet voor VBA!
Het gevaarlijke is dat je geen error krijgt, maar ook niet het variabele-type dat je wellicht verwacht...

POC:
Afbeeldingslocatie: https://tweakers.net/ext/f/U6c6LvDbS6h5jlt23XraZdRp/full.png

Weliswaar offtopic, maar ook wel weer belangrijk!

en wat gebeurt er in jouw code bij 10 stuks? :+

[ Voor 14% gewijzigd door breew op 05-07-2018 11:21 ]


Acties:
  • +1 Henk 'm!

  • Unusable
  • Registratie: Juli 2015
  • Laatst online: 26-09 22:27
@breew Wat verraderlijk, dankjewel voor de tip!
Pagina: 1