• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Somproduct in VBA opgeven

Status
Niet open voor verdere reacties.

Haije

Terugkerende gebruiker
Lid geworden
24 mrt 2009
Berichten
4.314
Besturingssysteem
Windows 11
Office versie
Office 2016 Professional Plus en Office 2010 Home & Student
Hallo,

in de bijlage een bestand waarin ik in VBA wil tellen hoeveel regels er voorkomen met een bepaalde tekst.
Daarvoor denk ik de functie SOMPRODUCT te gebruiken.

Dat lukt als ik de formule gewoon in een cel opgeef, maar het lukt me niet om dat in VBA te proppen.

Welke knappe kop helpt me uit de brand?
 

Bijlagen

  • Somproduct in VBA-Helpmij.xlsb
    30,8 KB · Weergaven: 52
Code:
Sub M__snb()
  MsgBox UBound(Filter([transpose(A1:A1000)], "=")) + 1
  MsgBox UBound(Filter([transpose(A1:A1000)], "lijnnummer")) + 1
End Sub

Code:
sub M_snb()
  MsgBox [sum(N(not(iserr(find("=",A1:A1000)))))]
  MsgBox [sum(N(not(iserr(find("lijnnummer",A1:A1000)))))]
End Sub

Maar ik vermoed dat je voor je doel voldoende hebt aan:

Code:
Sub M_snb()
  MsgBox Columns(1).SpecialCells(2).Areas.Count - 2
End Sub
 
Laatst bewerkt:
Je kan SOMPRODUCT ook negeren door (min of meer) te programmeren wat de functie in feite doet: tellen hoeveel records aan verschillende criteria voldoen.
Zoiets:
Code:
Sub Voorbeeld()
Teller = 0
For Each Cel In Range("A1:A1000")
    If Left(Cel, 7) = "lijnnum" Then
        Teller = Teller + 1
    End If
Next Cel
MsgBox Teller
End Sub
 
Voor de geïnteresseerden:

1. het gebruik van sum of sumproduct
2. het gebruik van de 'evaluate' methode met rechte haken [ .. ] of "evaluate"
3. het gebruik van de worksheetfunction

Omdat iedere 'evaluate' methode inherent een Arrayformule is, is het gebruik van 'sumproduct' overbodig.
Omdat de worksheetfunction sum of sumproduct een range nodig heeft, kan beter meteen een volledige evaluate-methode gebruikt worden.

Code:
Sub M_snb()
    MsgBox [sum(N(left(A1:A1000,10)="lijnnummer"))]
    MsgBox [sum(N(mid(A1:A1000,3,1)="="))]
    
    MsgBox [sumproduct(N(left(A1:A1000,10)="lijnnummer"))]
    MsgBox [sumproduct(N(mid(A1:A1000,3,1)="="))]

    MsgBox Evaluate("sum(N(left(A1:A1000,10)=""lijnnummer""))")
    MsgBox Evaluate("sum(N(mid(A1:A1000,3,1)=""=""))")

    MsgBox Evaluate("SumProduct(N(Left(A1:A1000, 10) = ""lijnnummer""))")
    MsgBox Evaluate("SumProduct(N(mid(A1:A1000, 3,1) = ""=""))")

    MsgBox Application.Sum([index(N(left(A1:A1000,10)="lijnnummer"),)])
    MsgBox Application.Sum([if(left(A1:A1000,10)="lijnnummer",1)])
    MsgBox Application.Sum([index(N(mid(A1:A1000,3,1)="="),)])
    MsgBox Application.Sum([if(mid(A1:A1000,3,1)="=",1)])

    MsgBox Application.SumProduct([index(N(left(A1:A1000,10)="lijnnummer"),)])
    MsgBox Application.SumProduct([if(left(A1:A1000,10)="lijnnummer",1)])
    MsgBox Application.SumProduct([index(N(mid(A1:A1000,3,1)="="),)])
    MsgBox Application.SumProduct([if(mid(A1:A1000,3,1)="=",1)])
End Sub
 
Allemaal bedankt voor jullie input!

@TitaTovenaar: neen die hd ik niet gezie, nu wel gelezen > leerzaam.

@snb: al je mogelijkheden doen wat ik vroeg > TOP!

@Conseclusie: is ook een prima mogelijkheid, dank!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan