Met behulp van SOM in een macro

Bob heeft behoefte aan de SOM functie in een macro om de som van alle waarden vinden in een kolom. Het probleem is dat het aantal cellen worden samengevat variëren; voor een run van de macro het zou kunnen zijn 100 cellen, terwijl op de volgende het zou kunnen zijn 300 en op de derde slechts 25.

Ten eerste is het gemakkelijk om de meeste werkbladfuncties (zoals SOM) gebruiken vanuit een macro. Het enige wat u hoeft te doen is om de naam van de functie voorwoord met "Application.WorksheetFunction." of eenvoudig "WorksheetFunction." Dus, als je weet dat elke run van de macro optellen A1 zal moeten worden: A100, dan A1: A300, en tenslotte A1: A25, kon je een macro gebruiken als dit:

Public Sub Sum_Demo ()
Dim mijnBereik
Dim Resultaten
Dim Run As Long

Voor Run = 1 tot 3
Selecteer Case Run
Case 1
mijnBereik = Worksheets ("Blad1"). Range ("A1", "A100")
Case 2
mijnBereik = Worksheets ("Blad1"). Range ("A1", "A300")
Case 3
mijnBereik = Worksheets ("Blad1"). Range ("A1", "A25")
Einde Select
Resultaten = WorksheetFunction.Sum (mijnBereik)
Range ("B" & Run) = Resultaten
Volgende Run
End Sub

Deze macro maakt gebruik van een voor. . . Volgende lus om verschillende reeksen van cellen die moet worden opgeteld. Het gebruikt dan is de SOM blad functie is aan de som van de resultaten variabele, die (eindelijk) gevuld in een cel in kolom B. toewijzen De resultaten van de eerste run worden in B1, de tweede in B2, en de derde in B3 .

Hoewel deze bijzondere macro niet die nuttig kunnen zijn, het toont een aantal handige technieken, zoals hoe je een benoemd bereik definiëren, hoe de functie SOM gebruiken, en hoe u de som spullen in een cel. Wat de macro niet te doen is om te laten zien hoe om te selecteren een variabel aantal cellen moet worden opgeteld. Om dit te doen, is het het beste om te vertrouwen op de End-methode van de Range object. De volgende regel code laat zien hoe u de som van het bereik kan proppen te beginnen bij A1 en zich uitstrekt tot net voor de eerste lege cel in de kolom:

mijnBereik = ActiveSheet.Range ("A1", Range ("A1"). End (xlDown))
Range ("B1") = WorksheetFunction.Sum (mijnBereik)

Merk op dat een bereik (mijnBereik) wordt gedefinieerd als begin met A1 en die zich door alles wat het Einde methode retourneert. Dit wordt dan opgeteld en gevuld in B1.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (3217) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) hier vinden: Met behulp van SOM in een macro.