Questo tutorial ti mostrerà come utilizzare le funzioni di Excel SOMMA.SE e SOMMA.SE in VBA
VBA non ha un equivalente delle funzioni SUMIF o SUMIFS che è possibile utilizzare: un utente deve utilizzare le funzioni Excel integrate in VBA utilizzando il Funzione del foglio di lavoro oggetto.
SOMMA.SE Foglio di lavoroFunzione
L'oggetto WorksheetFunction può essere utilizzato per chiamare la maggior parte delle funzioni di Excel disponibili nella finestra di dialogo Inserisci funzione in Excel. La funzione SOMMA.SE è una di queste.
123 | Sub TestSumIf()Range("D10") = Application.WorksheetFunction.SumIf(Range("C2:C9"), 150, Range("D2:D9"))Fine sottotitolo |
La procedura precedente aggiungerà le celle in Intervallo (D2: D9) solo se la cella corrispondente nella colonna C = 150.
Assegnare un risultato SOMMA.SE a una variabile
Potresti voler utilizzare il risultato della tua formula altrove nel codice piuttosto che scriverlo direttamente in Excel Range. In questo caso, puoi assegnare il risultato a una variabile da utilizzare successivamente nel codice.
1234567 | Sub AssignSumIfVariable()Risultato debole come doppio'Assegna la variabilerisultato = FunzioneFoglio di Lavoro.SumIf(Range("C2:C9"), 150, Range("D2:D9"))'Mostra il risultatoMsgBox "Il totale del risultato che corrisponde al codice di vendita 150 è " & risultatoFine sottotitolo |
Utilizzo di SUMIF
La funzione SOMMA.SE è simile alla Funzione Foglio di lavoro SOMMA.SE ma consente di controllare più di un criterio. Nell'esempio seguente, stiamo cercando di sommare il prezzo di vendita se il codice di vendita è 150 E il prezzo di costo è maggiore di 2. Notare che in questa formula, l'intervallo di celle da sommare è davanti ai criteri, mentre nella funzione SOMMA.SE è dietro.
123 | Sub MultipleSumIfs()Range("D10") = WorksheetFunction.SumIfs(Range("D2:D9"), Range("C2:C9"), 150, Range("E2:E9"), ">2")Fine sottotitolo |
Utilizzo di SOMMA.SE con un oggetto intervallo
È possibile assegnare un gruppo di celle all'oggetto Range e quindi utilizzare quell'oggetto Range con il pulsante Foglio di lavoroFunzione oggetto.
123456789101112 | Sub TestSumIFRange()Dim rngCriteria As RangeDim rngSum come intervallo'assegna l'intervallo di celleImposta rngCriteria = Range("C2:C9")Imposta rngSum = Intervallo ("D2: D9")'usa l'intervallo nella formulaRange("D10") = WorksheetFunction.SumIf(rngCriteria, 150, rngSum)'rilascia gli oggetti della gammaSet rngCriteria = NothingImposta rngSum = NienteFine sottotitolo |
Utilizzo di SUMIFS su oggetti a più intervalli
Allo stesso modo, puoi usare SUMIFS su più Range Object.
123456789101112131415 | Sub TestSumMultipleRanges()Dim rngCriteria1 As RangeDim rngCriteria2 come RangeDim rngSum come intervallo'assegna l'intervallo di celleImposta rngCriteria1= Intervallo("C2:C9")Imposta rngCriteria2 = Range("E2:E10")Imposta rngSum = Intervallo ("D2: D10")'usa gli intervalli nella formulaRange("D10") = WorksheetFunction.SumIfs(rngSum, rngCriteria1, 150, rngCriteria2, ">2")'rilascia l'oggetto intervalloSet rngCriteria1 = NienteSet rngCriteria2 = NothingImposta rngSum = NienteFine sottotitolo |
Si noti che poiché si utilizza un segno di maggiore di, i criteri maggiori di 2 devono essere tra parentesi.
Formula SOMMA.SE
Quando usi il Foglio di lavoroFunzione.SOMMA.SE per aggiungere una somma a un intervallo nel foglio di lavoro, viene restituita una somma statica, non una formula flessibile. Ciò significa che quando le tue cifre in Excel cambiano, il valore che è stato restituito dal Foglio di lavoroFunzione non cambierà.
Nell'esempio sopra, la procedura ha sommato Range(D2:D9) dove SaleCode è uguale a 150 nella colonna C e il risultato è stato inserito in D10. Come puoi vedere nella barra della formula, questo risultato è una cifra e non una formula.
Se uno qualsiasi dei valori cambia in Intervallo (D2: D9) o Intervallo (C2: D9), il risultato in D10 sarà NON modificare.
Invece di usare il Foglio di lavoroFunzione.SumIf, puoi usare VBA per applicare una funzione SOMMA.SE a una cella usando il Formula o FormulaR1C1 metodi.
Metodo della formula
Il metodo della formula consente di puntare in modo specifico a un intervallo di celle, ad esempio: D2: D10 come mostrato di seguito.
123 | Sub TestSumIf()Intervallo("D10").FormulaR1C1 = "=SOMMA.SE(C2:C9,150,D2:D9)"Fine sottotitolo |
Metodo FormulaR1C1
Il metodo FormulaR1C1 è più flessibile in quanto non ti limita a un determinato intervallo di celle. L'esempio seguente ci darà la stessa risposta di quello sopra.
123 | Sub TestSumIf()Intervallo("D10").FormulaR1C1 = "=SOMMA.SE(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C )"Fine sottotitolo |
Tuttavia, per rendere la formula più flessibile, potremmo modificare il codice in questo modo:
123 | Sub TestSumIf()ActiveCell.FormulaR1C1 = "=SOMMA.SE(R[-8]C[-1]:R[-1]C[-1],150,R[-8]C:R[-1]C)"Fine sottotitolo |
Ovunque ti trovi nel tuo foglio di lavoro, la formula aggiungerà quindi le celle che soddisfano i criteri direttamente sopra di essa e posizionerà la risposta nel tuo ActiveCell. L'intervallo all'interno della funzione SOMMA.SE deve essere riferito utilizzando la sintassi Riga (R) e Colonna (C).
Entrambi questi metodi consentono di utilizzare formule Excel dinamiche all'interno di VBA.
Ora ci sarà una formula in D10 invece di un valore.