Avatar billede hartvig12 Nybegynder
24. december 2007 - 12:43 Der er 15 kommentarer

sum.hvis i VBA

Hej eksperter,

Jeg skal bruge en vba kode som benytter samme metode som sum.hvis formelen i "normal"-Excel. Jeg har eks. i A1 JA, A2 JA, A3 NEJ.
B1 10, B2 10, B3 10. VBA-koden skal summere alt i kolonne B, hvis der står JA i A.

Jeg kan ikke bruge et excel-formel svar, det skal være i vba.
Avatar billede supertekst Ekspert
24. december 2007 - 14:03 #1
Prøve at indspille en makro...
Avatar billede hartvig12 Nybegynder
25. december 2007 - 11:06 #2
Hej supertekst, jeg havde selvfølgelig håbet på noget mere håndgribeligt, især fra din side, har fulgt dine tidligere svar, og mener nok du er manden der kan hjælpe.
Hvordan forklarer jeg i en makro, at den kun skal summe på JA ?
Avatar billede supertekst Ekspert
25. december 2007 - 18:07 #3
Hej hartvig 12 - tak for din tilkendegivelse - skal forsøge ...
Avatar billede supertekst Ekspert
25. december 2007 - 18:17 #4
Sub SumHvisJa()
    Cells(4, 2).Select
    ActiveCell.FormulaR1C1 = "=SUMIF(R[-3]C[-1]:R[-1]C[-1],""JA"",R[-3]C:R[-1]C)"
End Sub

men det kan også gøres på anden vis - sig til, hvis dette ønskes...
Avatar billede supertekst Ekspert
25. december 2007 - 18:29 #5
Alternativt:
Sub SumHvisJa()
Dim total
    total = 0
   
    For ræk = 1 To 65000
        If Cells(ræk, 1) <> "" Then
            If Cells(ræk, 1) = "JA" Then
                total = total + Cells(ræk, 2)
            End If
        Else
            Cells(ræk, 2) = total
            Exit For
        End If
    Next ræk
End Sub
Avatar billede hartvig12 Nybegynder
26. december 2007 - 10:27 #6
Hej Supertekst,

Dit første forsøg fik jeg også ved at gøre som du sagde, optage en makro, men jeg skal bruge en variabel, så dit alternative er langt tættere på det jeg ønsker at arbejde hen imod. Jeg har måske ikke været eksplicit nok, men jeg skal til slut bruge nogle variabler (ved ikke hvor mange), det afgøres af hvad der står i kolonne A. (ikke boolean).

Alternativ svaret virker ikke helt endnu, men du er nok tæt på løsningen, jeg har erklæret ræk som en variabel og indsat range("E4").value = total.
Det er afgørende at jeg kan kalde variablen til en given celle.
Avatar billede supertekst Ekspert
26. december 2007 - 11:48 #7
Vil det sige, at kolonne A skal gennemløbes og der skal ske en "opsamling" af de forskellige værdier heri - f.eks.i et array?
Avatar billede hartvig12 Nybegynder
26. december 2007 - 12:18 #8
Jeps, i sidste ende skal jeg bruge en kode der opsamler nogle værdier fra kolonne B baseret på "grupper" som er i kolonne A. Værdierne skal sættes ind i et andet ark i samme projektmappe. Det skal bruges sammen med dataudtræk fra et erp-system, så jeg kender ikke altid antallet af grupper i kolonne A.
Avatar billede supertekst Ekspert
26. december 2007 - 12:23 #9
Prøv denne version:

Rem Koden anbringes i det ønskede ark
Rem =================================
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 And Target.Value <> "" Then    'Hvis HØJREKLIK er i kolonne A (1) & celle udfyldt
        SumHvis Target.Value                            'Anvend indhold som argument for optælling
       
    End If
    Cancel = True
End Sub
Private Sub SumHvis(værdi)
Dim total
    total = 0
   
    For ræk = 1 To 65000
        If Cells(ræk, 1) <> "" Then
            If Cells(ræk, 1) = værdi Then
                total = total + Cells(ræk, 2)
            End If
        Else
            Cells(ræk, 2) = total
            Exit For
        End If
    Next ræk
End Sub
Avatar billede hartvig12 Nybegynder
26. december 2007 - 14:22 #10
Det funker ikke rigtig !
Avatar billede supertekst Ekspert
26. december 2007 - 14:36 #11
Den sidste kode er skrevet før jeg så dit næstsidste indlæg - er ved at omarbejde koden - vender tilbage senere - men beskriv gerne baggrunden for dit sidste indlæg.
Avatar billede hartvig12 Nybegynder
26. december 2007 - 18:43 #12
Public Sub JaTotal1()
Har fundet en metode som virker, men takker for Superteksts hårde indsats :-)


Dim dTotal As Double
Dim i As Long
With Range("a1:b3")
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
    If .Cells(i, 1) = "JA" Then dTotal = dTotal + .Cells(i, 2)
Next i
End With
Range("e4").Value = dTotal
End Sub
Avatar billede supertekst Ekspert
26. december 2007 - 23:25 #13
Selv tak - mere?
Avatar billede tipsen Nybegynder
15. januar 2008 - 23:06 #14
Det nemmeste er vel blot at bruge sum.hvis fra vba:

Dim rngData As Range, strWanted As String

Set rngData = ThisWorkbook.Worksheets("something").UsedRange.Columns(1)
strWanted = "JA"

Resultat = Application.WorksheetFunction.CountIf(rngData, strWanted)

- bare lige for at vise et nemt alternativ - noget med dybe tallerkner... :-)
Avatar billede tipsen Nybegynder
15. januar 2008 - 23:08 #15
- ovenstående tæller antallet af "JA" 'er i 1. kolonne i det brugte data-område og lagrer resultatet i variablen Resultat (som jeg glemte at deklarere øverst, som enten Integer eller Long)
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
Kategori
Kurser inden for grundlæggende programmering

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