Kopiera summan av markerade celler till Urklipp

Ibland tar det väldigt lång tid att komma på vissa saker. Men när de REDAN har uppfunnits verkar de i efterhand självklara och till och med banala. Från serien "vad, det var möjligt?".

Från de allra första versionerna visade statusfältet längst ned i Microsoft Excel-fönstret traditionellt summor för valda celler:

Kopiera summan av markerade celler till Urklipp

Om så önskas var det till och med möjligt att högerklicka på dessa resultat och välja från snabbmenyn exakt vilka funktioner vi vill se:

Kopiera summan av markerade celler till Urklipp

Och alldeles nyligen, i de senaste Excel-uppdateringarna, lade Microsoft-utvecklare till en enkel men genialisk funktion – nu när du klickar på dessa resultat kopieras de till urklippet!

Kopiera summan av markerade celler till Urklipp

Skönhet. 

Men hur är det med de som ännu inte (eller redan?) har en sådan version av Excel? Det är här enkla makron kan hjälpa.

Kopiera summan av markerade celler till Urklipp med hjälp av ett makro

Öppna i flik utvecklare (Utvecklaren) redaktör Visual Basic eller använd denna kortkommando andra+F11. Infoga ny tom modul via menyn Infoga – Modul och kopiera följande kod dit:

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

Dess logik är enkel:

  • Först kommer "skyddet från dåren" - vi kontrollerar exakt vad som är markerat. Om inte celler är markerade (men till exempel ett diagram) avslutar du makrot.
  • Använd sedan kommandot Getobjekt vi skapar ett nytt dataobjekt där vår summa av valda celler kommer att lagras senare. En lång och obegriplig alfanumerisk kod är i själva verket en länk till Windows registergren där biblioteket finns Microsoft Forms 2.0-objektbibliotek, som kan skapa sådana objekt. Ibland kallas detta trick också implicit sen bindning. Om du inte använder det, måste du göra en länk till detta bibliotek i filen via menyn Verktyg — Referenser.
  • Summan av de markerade cellerna anses vara ett kommando ArbetsbladFunction.Sum(Utval), och sedan placeras den resulterande mängden på urklippet med kommandot PutInClipboard

För att underlätta användningen kan du naturligtvis tilldela detta makro till en kortkommando med knappen Makron fliken utvecklare (Utvecklare – Makron).

Och om du vill se exakt vad som kopierades efter att ha kört makrot, kan du aktivera panelen Urklipp med den lilla pilen i det nedre högra hörnet av motsvarande grupp på Den huvudsakliga (Hem) flik:

Kopiera summan av markerade celler till Urklipp

Inte bara beloppet

Om du, förutom den banala mängden, vill ha något annat, kan du använda någon av de funktioner som objektet ger oss Arbetsblad Funktion:

Kopiera summan av markerade celler till Urklipp

Till exempel finns det:

  • Summa – summa
  • Medelvärde – aritmetiskt medelvärde
  • Antal – antal celler med siffror
  • CountA – antal fyllda celler
  • CountBlank – antal tomma celler
  • Min – lägsta värde
  • Max – maxvärde
  • Median – median (centralt värde)
  • … Etc.

Inklusive filter och dolda radkolumner

Vad händer om rader eller kolumner är dolda (manuellt eller av ett filter) i det valda intervallet? För att inte ta hänsyn till dem i summan måste vi ändra vår kod något genom att lägga till objektet Urval egenskapen SpecialCells(xlCellTypeVisible):

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

I det här fallet kommer beräkningen av en total funktion endast att tillämpas på synliga celler.

Om du behöver en levande formel

Om du drömmer upp kan du komma på scenarier när det är bättre att inte kopiera ett tal (konstant), utan en levande formel till bufferten, som beräknar totalsummorna vi behöver för de valda cellerna. I det här fallet måste du limma formeln från fragment, lägga till borttagningen av dollartecken och ersätta kommatecken (som används som en separator mellan adresser för flera valda intervall i VBA) med ett semikolon:

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

Summering med ytterligare villkor

Och slutligen, för helt galningar, kan du skriva ett makro som inte kommer att summera alla valda celler, utan bara de som uppfyller de givna villkoren. Så, till exempel, kommer ett makro att se ut så som lägger summan av valda celler i bufferten, om deras värden är större än 5 och samtidigt är de fyllda med valfri färg:

 Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Then Exit Sub For Every cell In Selection If cell.Value > 5 And cell.Interior.ColorIndex <> xlNone Then If myRange Is Nothing Then Set myRange = cell Else Set myRange = Union(myRange, cell) End If End If Next cell With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) .PutIn Sublipboard  

Som du lätt kan föreställa dig kan villkor ställas in i absolut alla - upp till cellformat - och i vilken mängd som helst (inklusive genom att länka dem med logiska operatorer eller eller och). Det finns mycket utrymme för fantasi.

  • Konvertera formler till värden (6 sätt)
  • Vad är makron, hur man använder dem, var man infogar Visual Basic-kod
  • Användbar information i statusfältet i Microsoft Excel

Kommentera uppropet