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 om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for 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.