diverse kolommen optellen met voorwaarde

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik wil graag diverse kolommen in een bereik optellen, nadat de rij is gevonden waar de waardes uit opgehaald moeten worden. Het lukt wel dit kolom per kolom te doen:
Code:
Function waarde()
    Rijnum = Application.Match(100094, Range("C2:C500"), 0)
    waarde = Application.Index((Sheets("Data").Range("M2:M500")), Rijnum)
End Function

Echter de volgende code

Code:
 Function waarde()
    Rijnum = Application.Match(100094, Range("C2:C500"), 0)
    waarde = Application.Index((Sheets("Data").Range("M2:M500") [COLOR="#FF0000"]+ Sheets("Data").Range("N2:N500")[/COLOR]), Rijnum)
End Function

geeft een foutmelding : Fout 13; 'Typen komen niet met elkaar overeen'. Ik snap dit niet en weet niet hoe dit op te lossen; in beide kolommen zijn het getallen. Natuurlijk kan ik een waarde1 en waard2 etc. bepalen en optellen, maar met veel kolommen wordt het wat omslachtig en mogelijk traag. Ik heb het vermoeden dat dit veel slimmer en krachtiger kan, zoals in het rekenblad zelf. Ik wil echter naar deze VBA-methode omdat dezelfde formule steeds opnieuw op veel plaatsen moet worden uitgevoerd, en een functie me veel flexibeler maakt.

Iemand een gouden tip?

In de spreadsheet doe ik het volgende:

Code:
SOMPRODUCT((ID=1000094)*(Improductief))

wat vertaald (volgens mij) in VBA het volgende moet zijn:
Code:
waarde = Application.WorksheetFunction.Sumprodct((Range("ID") = "100094") * (Range("Improductief")))

zelfde foutmelding
 
Laatst bewerkt:
vraag = de zoekwaarde altijd 100094 ??
de naam van jou functie is al een formule binnen Excel en dit moet je altijd voorkomen ik stel voor dat je je naam aanpast van "waarde" naar "waarden"

in eerste instantie werkt dit volgens mij
Code:
 Function waarden()
 Application.Volatile
    Rijnum = Application.Match(100094, Range("C2:C500"), 0)
    waarden = Application.Index(Sheets("Data").Range("M2:M500"), Rijnum) + Application.Index(Sheets("Data").Range("N2:N500"), Rijnum)
End Function
 
Laatst bewerkt:
dank je pasan, het werkt nu wel. Echt een korte efficiënte formule is het echter nog niet bepaald. Ik ga eens met namen werken, dat zal de code aanzienlijk inkorten. De 1000094 is trouwens een variabele, mee te geven aan de functie.
 
en zo ?
Code:
Function waarden(zoekwaarde)
   Application.Volatile
    Rijnum = Application.Match(zoekwaarde, Range("C2:C500"), 0)
    waarden = Cells(Rijnum + 1, 13).Value + Cells(Rijnum + 1, 14).Value
End Function
 
Code:
Function F_snb(c00)
    F_snb = application.sum(sheets("Data").Range("C2:C500").find(c00).offset(,10).resize(,2))
End Function
 
snb, pasan, hartelijk dank; beide methoden werken voor mij. Een echt snelheidsverschil merk ik niet, maar bij het toenemen van het aantal kolommen zal de formule van snb een voorsprong nemen vermoed ik. Nogmaals beiden hartelijk dank!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan