14. april 2010 - 15:49Der er
5 kommentarer og 1 løsning
Smart momsberegning
Jeg har lavet et ark hvor der i området C4:C33 skal være priser inklusiv moms, i området D4:D33 priser eksklusiv moms.
Det skal være valgfrit om indtastning sker i kolonnen med moms eller kolonnen uden moms.
Det skulle gerne virke selv om man i første omgamg tager fejl (taster beløbet i forkert kolonne) og ændrer indtastningen til den rette kolonne.
Altså: Hvis indtastning sker i kolonne C, række 4 til 33, skal beløbet, ganget med 0,8, indsættes i samme række i kolonne D. Hvis indtastning sker i kolonne D, række 4 til 33, skal beløbet, ganget med 1,25, indsættes i samme række i kolonne C.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Højreklik på fanen og vælg "Vis kode" eller "View code"
Kopier følgende makro ind
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C4:C33")) Is Nothing Then 'Brutto Application.EnableEvents = False Target.Offset(0, 1).Value = Target.Value * 0.8 Application.EnableEvents = True End If
If Not Intersect(Target, Range("D4:D33")) Is Nothing Then 'Netto Application.EnableEvents = False Target.Offset(0, -1).Value = Target.Value * 1.25 Application.EnableEvents = True End If
Bortset fra et enkelt irritationsmment virker det perfect. Hvis noget er indtastet i kolonne C og jeg sletter det, så viser kolonne D "0,00". For at undgå det har jeg tilføjet lidt. Her er den færdige kode.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C4:C33")) Is Nothing Then 'Brutto Application.EnableEvents = False If Target.Value = "" Then Target.Offset(0, 1).Value = "" Else Target.Offset(0, 1).Value = Target.Value * 0.8 End If Application.EnableEvents = True End If
If Not Intersect(Target, Range("D4:D33")) Is Nothing Then 'Netto Application.EnableEvents = False If Target.Value = "" Then Target.Offset(0, -1).Value = "" Else Target.Offset(0, -1).Value = Target.Value * 1.25 End If Application.EnableEvents = True End If
Så må du også været træt af fejlen, hvis du indtaster bogstaver eller laver en fejl, som ikke er et tal...
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C4:C33")) Is Nothing Then 'Brutto Application.EnableEvents = False If IsEmpty(Target.Value) Then Target.Offset(0, 1).Delete ElseIf IsNumeric(Target.Value) Then Target.Offset(0, 1).Value = Target.Value * 0.8 End If Application.EnableEvents = True End If
If Not Intersect(Target, Range("D4:D33")) Is Nothing Then 'Netto Application.EnableEvents = False If IsEmpty(Target.Value) Then Target.Offset(0, -1).Delete ElseIf IsNumeric(Target.Value) Then Target.Offset(0, -1).Value = Target.Value * 1.25 End If Application.EnableEvents = True End If
Den havde jeg ikke lige tænkt på. At lave en indtastning i en beløbskolonne som ikke er et tal er lidt langt ude, men i betragtning af hvad jeg ellers har set mine kære kolleger lave af narrestreger, så må jeg nok hellere afprøve dit forslag i aften.
Du kan også bruge datavaliderig til dette formål, således der kun kan tastes tal i cellerne... måske en lidt mere brugervenlig løsning, når nu der skal andre brugere på...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.