Kopieer de som van geselecteerde cellen naar het klembord

Soms duurt het erg lang voordat er iets bedacht wordt. Maar als ze AL zijn uitgevonden, lijken ze achteraf voor de hand liggend en zelfs banaal. Uit de serie "wat, was het mogelijk?".

Vanaf de allereerste versies gaf de statusbalk onderaan het Microsoft Excel-venster traditioneel totalen weer voor geselecteerde cellen:

Kopieer de som van geselecteerde cellen naar het klembord

Indien gewenst was het zelfs mogelijk om met de rechtermuisknop op deze resultaten te klikken en in het contextmenu precies te selecteren welke functies we willen zien:

Kopieer de som van geselecteerde cellen naar het klembord

En onlangs, in de nieuwste Excel-updates, hebben Microsoft-ontwikkelaars een eenvoudige maar ingenieuze functie toegevoegd - wanneer u nu op deze resultaten klikt, worden ze naar het klembord gekopieerd!

Kopieer de som van geselecteerde cellen naar het klembord

Schoonheid. 

Maar hoe zit het met degenen die nog niet (of al?) over zo'n versie van Excel beschikken? Dit is waar eenvoudige macro's kunnen helpen.

De som van geselecteerde cellen naar het klembord kopiëren met een macro

Openen in tabblad ontwikkelaar (Ontwikkelaar) editor Visual Basic of gebruik deze sneltoets anders+F11. Nieuwe lege module invoegen via menu Invoegen – Module en kopieer daar de volgende code:

Sub SumSelected() If TypeName(Selection) <> "Range" Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection) .PutInClipboard End With End Sub  

De logica is eenvoudig:

  • Eerst komt de "bescherming tegen de dwaas" - we controleren wat er precies is gemarkeerd. Als er geen cellen zijn geselecteerd (maar bijvoorbeeld een diagram), verlaat dan de macro.
  • Gebruik vervolgens het commando Krijg object we maken een nieuw gegevensobject waarin onze som van geselecteerde cellen later wordt opgeslagen. Een lange en onbegrijpelijke alfanumerieke code is in feite een link naar de Windows-registertak waar de bibliotheek zich bevindt Microsoft Forms 2.0-objectbibliotheek, die dergelijke objecten kan maken. Soms wordt deze truc ook wel impliciete late binding. Als je het niet gebruikt, dan zou je via het menu een link naar deze bibliotheek in het bestand moeten maken Hulpmiddelen — Referenties.
  • De som van de geselecteerde cellen wordt als een commando beschouwd WerkbladFunctie.Sum(Selectie), en dan wordt het resulterende bedrag op het klembord geplaatst met het commando ZetInKlembord

Voor gebruiksgemak kun je deze macro natuurlijk toewijzen aan een sneltoets met behulp van de knop Macro's tab ontwikkelaar (Ontwikkelaar — Macro's).

En als u wilt zien wat er precies is gekopieerd na het uitvoeren van de macro, kunt u het Klembord-paneel inschakelen met behulp van de kleine pijl in de rechterbenedenhoek van de overeenkomstige groep op De belangrijkste (Home) tab:

Kopieer de som van geselecteerde cellen naar het klembord

Niet alleen het bedrag

Als u naast het banale bedrag iets anders wilt, dan kunt u een van de functies gebruiken die het object ons biedt WerkbladFunctie:

Kopieer de som van geselecteerde cellen naar het klembord

Er is bijvoorbeeld:

  • Som – som
  • Gemiddeld - rekenkundig gemiddelde
  • Tellen - aantal cellen met getallen
  • CountA – aantal gevulde cellen
  • CountBlank – aantal lege cellen
  • Min - minimale waarde
  • Max – maximale waarde
  • Mediaan – mediaan (centrale waarde)
  • ... etc.

Inclusief filters en verborgen rijkolommen

Wat als rijen of kolommen zijn verborgen (handmatig of door een filter) in het geselecteerde bereik? Om er geen rekening mee te houden in de totalen, moeten we onze code iets aanpassen door aan het object toe te voegen Selectie eigendom SpecialeCellen(xlCellTypeVisible):

Sub SumVisible() If TypeName(Selection) <> "Range" Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection.SpecialCells(xlCellTypeVisible)). PutInClipboard End With End Sub  

In dit geval wordt de berekening van een totale functie alleen toegepast op zichtbare cellen.

Als je een levende formule nodig hebt

Als je het verzint, kun je scenario's bedenken waarin het beter is om geen getal (constante), maar een levende formule in de buffer te kopiëren, die de totalen berekent die we nodig hebben voor de geselecteerde cellen. In dit geval moet u de formule uit fragmenten lijmen, het verwijderen van dollartekens toevoegen en de komma (die wordt gebruikt als scheidingsteken tussen adressen van verschillende geselecteerde bereiken in VBA) vervangen door een puntkomma:

Sub SumFormula() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Replace(Replace(Selection. Adres, ",", ";"), "$", "") & ")" .PutInClipboard End With End Sub  

Sommatie met aanvullende voorwaarden

En ten slotte, voor volledig maniakken, kun je een macro schrijven die niet alle geselecteerde cellen opsomt, maar alleen die die aan de gegeven voorwaarden voldoen. Dus een macro ziet er bijvoorbeeld zo uit dat de som van geselecteerde cellen in de buffer wordt geplaatst, als hun waarden groter zijn dan 5 en tegelijkertijd zijn ze gevuld met elke kleur:

 Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Exit Sub voor elke cel in selectie If cell.Value > 5 En cell.Interior.ColorIndex <> xlNone Als myRange niets is, stel dan myRange = in cel Else Set myRange = Union(myRange, cel) End If End If Next cell With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) .PutInClipboard End With End Sub  

Zoals u zich gemakkelijk kunt voorstellen, kunnen voorwaarden absoluut worden ingesteld - tot celindelingen - en in elke hoeveelheid (inclusief door ze aan elkaar te koppelen met logische operators of of en). Er is veel ruimte voor fantasie.

  • Formules converteren naar waarden (6 manieren)
  • Wat zijn macro's, hoe ze te gebruiken, waar Visual Basic-code in te voegen?
  • Nuttige informatie in de statusbalk van Microsoft Excel

Laat een reactie achter