Avatar billede TheLibrarian Mester
15. marts 2010 - 15:30 Der 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?
Avatar billede madiedk Nybegynder
15. marts 2010 - 15:40 #1
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.
Avatar billede supertekst Ekspert
15. marts 2010 - 15:50 #2
Er cellerne ved siden af hinanden?
Avatar billede supertekst Ekspert
15. marts 2010 - 17:37 #3
Indlægges under relevante ark

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
Avatar billede TheLibrarian Mester
16. marts 2010 - 12:20 #4
Ja, cellerne er i samme række og ved siden af hinanden.
Avatar billede TheLibrarian Mester
16. marts 2010 - 12:21 #5
Jeg forstår ikke helt hvad al den kode gør, eller hvordan jeg skal kunne lægge den på arket?
Avatar billede supertekst Ekspert
16. marts 2010 - 12:30 #6
Højreklik på arkfanen - Vis Programkode - Indsæt ovennævnte kode heri. Tilpas kolonnerne - som anført

-

Ellers - send en mail  - min adr. under profil

Oplys hvilke kolonner det drejer sig om.

Jeg justerer og returnerer...
Avatar billede TheLibrarian Mester
19. marts 2010 - 19:18 #7
Ja, det bliver jeg vist nød til, jeg kan ikke ud fra den kode du har skrevet gennemskue hvor jeg skal rette til de celler jeg ønsker valideret...
Avatar billede TheLibrarian Mester
24. marts 2010 - 10:37 #8
Yup, nu virker det!  Mange tak :-)
Avatar billede TheLibrarian Mester
24. marts 2010 - 12:34 #9
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)
Avatar billede supertekst Ekspert
25. marts 2010 - 13:56 #10
Tillægsspørgsmål - er blevet korrigeret og fremsendt direkte
Avatar billede Michael B. Bom Juniormester
04. maj 2010 - 14:57 #11
Er lidt interesseret i at se den samlede kode - om muligt
PFT
Avatar billede supertekst Ekspert
04. maj 2010 - 15:07 #12
p5 - prøver at finde filen & vise den her. Ok - ellers giv signal.
Avatar billede supertekst Ekspert
04. maj 2010 - 15:09 #13
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

End Sub
Avatar billede Michael B. Bom Juniormester
04. maj 2010 - 15:30 #14
Hej igen - supertekst - det er altid rart at få inspiration herinde
Avatar billede supertekst Ekspert
04. maj 2010 - 15:37 #15
Hej P5 - ok - det er du velkommen til..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester