15. marts 2010 - 15:30Der er
14 kommentarer og 1 løsning
Datavalidering af sum
Hvordan datavaliderer jeg en sum? Jeg har brug for at kunne validere summen af tre celler i samme række, således at man ikke ved indtastning i de tre celler kan få anden sum end præcis 1. Det samme gælder for de tre celler nedenunder, etc. Kan det lade sig gøre og i så fald hvordan?
ja via vba kode, således at en event aktiveres hver gang at der tastes et beløb i en af de 3 celler. Hvis tallet så er større en 1 så advarer den eller slettet det, eller hvad du nu vil have og det samme sker hvis der indtastet et bogstav.
Dim kolonner As Variant Private Sub Worksheet_Change(ByVal Target As Range) Dim sum As Variant
Rem opsætning af kolonner kolonner = Array(1, 3, 5) 'Tilpas - her kolonne A, C & E Rem Er det i en af de 3 kolonner If erKolonneRelevant(Target.Column) = True Then Rem Er alle 3 kolonner udfyldt If kolonnerUdfyldt(Target.Row, sum) = 3 Then If sum <> 1 Then MsgBox ("Sum i række " & CStr(Target.Row) & " er <> 1") End If End If End If End Sub Private Function erKolonneRelevant(kolNr) Dim x As Byte For x = 0 To UBound(kolonner) If kolNr = kolonner(x) Then erKolonneRelevant = True Exit Function End If Next x erKolonneRelevant = False End Function Private Function kolonnerUdfyldt(rækNr, sum) Dim x As Byte, antal As Byte antal = 0 sum = 0
For x = 0 To UBound(kolonner) If Cells(rækNr, kolonner(x)) <> "" Then antal = antal + 1 sum = sum + Cells(rækNr, kolonner(x)) End If Next x kolonnerUdfyldt = antal End Function
Jeg har et tillægsspørgsmål: Koden bevirker at titlen i de to øverste rækker forsvinder hvis jeg prøver at rette i dem. Hvordan klarer jeg mon den? Pointen er at de to øverste rækker i de valgte kolonner skal holdes fri af koden, da der skal stå tekst i dem alle? (Hvordan giver jeg i øvrigt point for det tillægsspørgsmål?, der er 60 på spil)
Rem VERSION 2 Rem ========= Dim kolonner As Variant, flag As Boolean Private Sub Worksheet_Activate() flag = False End Sub Private Sub Worksheet_Change(ByVal Target As Range) Rem opsætning af kolonner 'E-F-G kolonner = Array(5, 6, 7)
If flag = False Then Rem Er det i en af de 3 kolonner If erKolonneRelevant(Target.Column) = True Then sletDeAndreKolonner Target.Row, Target.Column End If End If End Sub Private Function erKolonneRelevant(kolNr) Dim x As Byte For x = 0 To UBound(kolonner) If kolNr = kolonner(x) Then erKolonneRelevant = True Exit Function End If Next x erKolonneRelevant = False End Function Private Sub sletDeAndreKolonner(rækNr, kolNr) Dim x As Byte, kol As Byte flag = True
For x = 0 To UBound(kolonner) kol = kolonner(x) If kol <> kolNr Then Cells(rækNr, kol) = "" End If Next x flag = False
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.