Hoe gebruik je sum in excel via vba?
In Excel kunt u VBA gebruiken om de som van waarden uit een celbereik of meerdere bereiken te berekenen. En in deze tutorial gaan we de verschillende manieren leren waarop we het kunnen gebruiken.
Som op in VBA met behulp van WorksheetFunction
In VBA zijn er verschillende functies die u kunt gebruiken, maar er is geen specifieke functie hiervoor. Dit betekent niet dat we geen bedrag kunnen maken. In VBA is er een eigenschap genaamd WorksheetFunction waarmee u functies in VBA-code kunt aanroepen.
Beschouw de som van de waarden in het bereik A1:A10.
- Voer eerst de eigenschap van de werkbladfunctie in en selecteer vervolgens de functie SOM in de lijst.
- Vervolgens moet u een haakje beginnen in te voeren, net zoals u dat doet bij het invoeren van een functie in het werkblad.
- Daarna moeten we het bereikobject gebruiken om te verwijzen naar het bereik waarvoor we de som willen berekenen.
- Typ aan het einde een haakje sluiten en wijs de retourwaarde van de functie toe aan cel B1.
Range ("B1") = Application.WorksheetFunction.Sum(Range("A1:A10"))
Wanneer u deze code nu uitvoert, wordt de som berekend van de waarden die u in het bereik A1:A10 heeft en voert u de waarde in cel B1 in.
Som van waarden van een hele kolom of rij
In dit geval geeft u gewoon een rij of kolom op in plaats van het bereik dat we in het vorige voorbeeld hebben gebruikt.
' for the entire column A Range ("B1") = Application.WorksheetFunction.Sum( Range ("A:A")) ' for entire row 1 Range ("B1") = Application.WorksheetFunction.Sum( Range ("1:1"))
Gebruik VBA om selectiewaarden toe te voegen
Stel nu dat u alleen de waarde van de geselecteerde cellen wilt optellen, omdat u deze code kunt gebruiken.
Sub vba_sum_selection() Dim sRange As Range Dim iSum As Long On Error GoTo errorHandler Set sRange = Selection iSum = WorksheetFunction.Sum(Range(sRange.Address)) MsgBox iSum errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
In de bovenstaande code gebruikten we de selectie en specificeerden deze vervolgens in de variabele “sRange”. Vervolgens gebruikten we het adres van deze bereikvariabele om de som te verkrijgen.
VBA-som van alle bovenstaande cellen
De volgende code extraheert alle cellen en somwaarden en voert het resultaat in de geselecteerde cel in.
Sub vba_auto_sum() Dim iFirst As String Dim iLast As String Dim iRange As Range On Error GoTo errorHandler iFirst = Selection. End (xlUp). End (xlUp).Address iLast = Selection. End (xlUp).Address Set iRange = Range(iFirst & ":" & iLast) ActiveCell = WorksheetFunction.Sum(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Voeg dynamisch bereik toe met VBA
En op dezelfde manier kunt u dynamisch bereik gebruiken terwijl u VBA gebruikt om waarden toe te voegen.
Sub vba_dynamic_range_sum() Dim iFirst As String Dim iLast As String Dim iRange As Range On Error GoTo errorHandler iFirst = Selection.Offset(1, 1).Address iLast = Selection.Offset(5, 5).Address Set iRange = Range(iFirst & ":" & iLast) ActiveCell = WorksheetFunction.Sum(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Voeg een dynamische kolom of rij toe
Op dezelfde manier kunt u, als u een dynamische kolom wilt gebruiken, de volgende code gebruiken die de kolom van de actieve cel neemt en alle waarden optelt die u daar heeft.
Sub vba_dynamic_column() Dim iCol As Long On Error GoTo errorHandler iCol = ActiveCell.Column MsgBox WorksheetFunction.Sum(Columns(iCol)) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
En voor een rij.
Sub vba_dynamic_row() Dim iRow As Long On Error GoTo errorHandler iRow = ActiveCell.Row MsgBox WorksheetFunction.Sum(Rows(iCol)) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Gebruik SUMIF met VBA
Net als som kun je de functie SOM.ALS gebruiken om waarden toe te voegen met criteria zoals in het volgende voorbeeld.
Sub vba_sumif() Dim cRange As Range Dim sRange As Range Set cRange = Range ("A2:A13") Set sRange = Range ("B2:B13") Range ("C2") = _ WorksheetFunction.SumIf(cRange, "Product B", sRange) End Sub