Optellen van waarden in kolom

Status
Niet open voor verdere reacties.

Sansje

Gebruiker
Lid geworden
21 dec 2014
Berichten
50
Hoi Allemaal.

Allereerst de beste wensen voor het nieuwe jaar 2016. Hoop dat jullie dit allemaal in goede gezondheid mogen doorbrengen en dat het jullie veel voorspoed zal geven.


Mijn vraag is vrij simpel.

Ik ben even aan het experimenteren.

Ik ben een userform aan het maken waarin ik in textbox 1 het weeknummer plaats. Zodra ik dan op de commandbutton druk dan moeten alle cellen in kolom O vanaf rij 2 worden opgeteld. Echter is het optellen van de cellen in kolom O afhankelijk van kolom A.

Als ik in textbox 1 bijvoorbeeld 25 invoer en ik klik dan op de commandbutton dan moeten alle cellen in kolom O worden opgeteld waarvan de waarde in kolom A overeenkomt met textbox 1. In deze: 25. Kolom A kent ook lege cellen.

Ik heb het geprobeerd met CountIf, maar dan tel ik enkel het aantal keren dat 25 voorkomt in kolom A en dan mogen er ook geen lege cellen aanwezig zijn.

Voorbeeldje:

Kolom A Kolom O

25 50
25 75
26 14
26 85
27 78
27 74

Zodra ik dan 25 invoer in textbox 1 dan dient er in textbox 2 de opgetelde waarde: 125 te verschijnen.
Zodra ik dan 26 invoer in textbox 1 dan dient er in textbox 2 de opgetelde waarde: 99 te verschijnen.
Enz.

Weet iemand welke count ik moet gebruiken??

Dank jullie wel.

Groetjes van Sandra
 
Kijk eens naar SUMIF.
 
Is dat ook VBA?? Formules in cellen wil ik namelijk niet hebben
 
Ik heb even gekeken met SumIf.

3 stuks argumenten. Ok, maar nergens een voorbeeld.

Code:
    TextBox2 = Application.WorksheetFunction.SumIf(Sheets("Blad1").Range("A2").End(xlDown), TextBox1.Value)

Tot zover kom ik, maar dan doet het nog niets.
 
Als je het puur in VBA wilt doen zou ik het zo doen (Volgens de opgegeven kolommen in je initiële vraag):
Code:
Sub CommandButton1_Click()
    TextBox2 = Totaal(25, 1, 15) '(Controlegetal, In kolomnummer, Nummer op te tellen kolom (Max: 26))
End Sub

Function Totaal(Getal, Kolom1 As Integer, Kolom2 As Integer) As Long
    Dim i As Long
    
    With Sheets("Blad1")
        For i = 1 To .Cells(.Rows.Count, Chr(Kolom1 + 64)).End(xlUp).Row
            If .Cells(i, Kolom1) = Getal Then Totaal = Totaal + .Cells(i, Kolom2)
        Next i
    End With
End Function
 
Laatst bewerkt:
Sorry edmoor maar jouw code is mij een beetje cryptisch.

Ik ben onbekend met function.

Ook is mij Kolom1 en die 25 niet duidelijk.
 
Het staat hier uitgelegd:
Code:
Sub CommandButton1_Click()
    TextBox2 = Totaal(25, 1, 15) '(Controlegetal, In kolomnummer, Nummer op te tellen kolom (Max: 26))
End Sub
 
Ja maar het controlegetal is het getal wat in textbox 1 komt te staan. Deze is variabel.

Kan ik daar dan gewoon (textbox1.value) plaatsen?

En dus:

Code:
Sub CommandButton1_Click()
    TextBox2 = Totaal(Textbox1.Value, 1, 15) '(Controlegetal, In kolomnummer, Nummer op te tellen kolom (Max: 26))
End Sub

Wat ik trouwens nog ben vergeten te melden is dat er in kolom O, dus 15, de celeigenschap: Financieel, is gebruikt. Er staat dus bijvoorbeeld: € 25,00
 
Laatst bewerkt:
Ja, dat kan. Kan je ook makkelijk even testen natuurlijk ;)
Wat dat Financieel betreft, dat is het uiterlijk voor de cel.
De waarde blijft gewoon 25.
 
Sorry Edmoor de code werkt niet.

Er staan ook lege rijen tussen de gegevens in kolom A. Wellicht dat het daarom niet werkt. Om de hoeveel rijen er een lege rij ontstaat is variabel.
 
De code werkt prima als de situatie is zoals je deze hebt geschetst in je eerste bericht. Ervaring leert dat men vaak een niet duidelijk voorbeeld van de situatie geeft en dat lijkt nu ook zo. Onduidelijke voorbeelden leiden tot een niet werkende "oplossing". Het maken van VBA code luistert nu eenmaal erg nauw. Plaats daarom een document met exact de situatie waar je een oplossing voor wilt hebben.
 
Laatst bewerkt:
Hoi Edmoor. Ik heb een oorzaak gevonden. Het bestand was opgeslagen als .XLSX en niet als .XLSM. De macro's werkten dus niet.

Nu ik dit wel heb gedaan, werkt het inderdaad wel. Alleen die 25, waar ik textbox1.value van wilde maken, werkt alleen op 25.

Code:
Sub CommandButton1_Click()
    TextBox2 = Totaal(25, 1, 16) '(Controlegetal, In kolomnummer, Nummer op te tellen kolom (Max: 26))
End Sub

Function Totaal(Getal, Kolom1 As Integer, Kolom2 As Integer) As Long
    Dim i As Long
    
    With Sheets("Blad1")
        For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(i, Kolom1) = Getal Then Totaal = Totaal + .Cells(i, Kolom2)
        Next i
    End With
End Function

Bijkomstigheid. Er wordt nu wel opgeteld, maar in de textbox verschijnt in plaats van 808,64 slechts 808. De komma en de getallen erachter worden niet weergegeven. As Double heb ik ook geprobeerd als ook CDec(), maar ook deze werken niet. Hierna heb ik format geprobeerd, maar ook voor deze geldt alleen dat ik de eerste 3 cijfers te zien krijg.
 
Laatst bewerkt:
Plaats eens een relevant voorbeeld document.
 
Beter?

Code:
Function Totaal(Getal, Kolom1 As Integer, Kolom2 As Integer) [COLOR=#FF0000]as double[/COLOR]
 
hsv As Double had ik ook al geprobeerd. Ik zal wel ergens iets niet goed doen. Ik zie het wel.

Alvast bedankt.

Groetjes Sandra
 
Heb je het niet getest?
 
Ik heb je bestandje even bekeken.

1:
Code:
Sub CommandButton1_Click()
    TextBox2 = Format(Totaal(TextBox1, 1, 16), "€ 0.00") '(Controlegetal, In kolomnummer, Nummer op te tellen kolom (Max: 26))
End Sub

2:
Code:
Function Totaal(TextBox1, Kolom1 As Integer, Kolom2 As Integer) As Double
 
hsv. aanpassingen van jou ingevoerd. en ja zo werkt het wel, maar zodra ik 26 wil hebben dan geeft textbox2 de waarde voor 25.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan