Kopeerige valitud lahtrite summa lõikelauale

Mõnikord võtab mõne asja väljamõtlemine väga kaua aega. Aga kui need on JUBA leiutatud, tunduvad nad tagantjärele ilmsed ja isegi banaalsed. Sarjast “Mis, see oli võimalik?”.

Alates esimestest versioonidest kuvas Microsoft Exceli akna allosas olekuribal tavapäraselt valitud lahtrite kogusummad:

Kopeerige valitud lahtrite summa lõikelauale

Soovi korral oli neil tulemustel võimalik isegi paremklõpsata ja valida kontekstimenüüst täpselt, milliseid funktsioone me näha tahame:

Kopeerige valitud lahtrite summa lõikelauale

Ja just hiljuti lisasid Microsofti arendajad viimastesse Exceli värskendustesse lihtsa, kuid geniaalse funktsiooni – nüüd, kui klõpsate nendel tulemustel, kopeeritakse need lõikepuhvrisse!

Kopeerige valitud lahtrite summa lõikelauale

Ilu. 

Kuidas on aga lood nendega, kellel sellist Exceli versiooni veel (või juba?) pole? Siin võivad abiks olla lihtsad makrod.

Valitud lahtrite summa kopeerimine lõikelauale makro abil

Ava vahekaardil arendaja (Arendaja) toimetaja Visual Basic või kasutage seda kiirklahvi muu+F11. Sisestage menüü kaudu uus tühi moodul Sisesta – moodul ja kopeerige sinna järgmine kood:

Sub SumSelected() Kui TypeName(Selection) <> "Range" Seejärel välju alamfunktsiooniga GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.SumP Endboard(Selection)  

Selle loogika on lihtne:

  • Kõigepealt tuleb “kaitse lolli eest” – kontrollime, mis täpselt esile tõstetakse. Kui valitud pole mitte lahtrid (vaid näiteks diagramm), siis välju makrost.
  • Seejärel kasutage käsku Getobject loome uue andmeobjekti, kuhu hiljem salvestatakse meie valitud lahtrite summa. Pikk ja arusaamatu tähtnumbriline kood on tegelikult link Windowsi registriharule, kus raamatukogu asub Microsoft Forms 2.0 objektiteek, millega saab selliseid objekte luua. Mõnikord nimetatakse seda nippi ka kaudne hiline sidumine. Kui te seda ei kasuta, peate menüü kaudu failis selle teegi juurde viima Tööriistad — viited.
  • Valitud lahtrite summat peetakse käsuks WorksheetFunction.Sum(Valik), ja seejärel paigutatakse saadud summa käsuga lõikepuhvrisse PutInClipboard

Kasutamise hõlbustamiseks saate loomulikult määrata selle makro kiirklahvile, kasutades nuppu Makrod tab arendaja (Arendaja – makrod).

Ja kui soovite näha, mis pärast makro käivitamist täpselt kopeeriti, saate lõikelaua paneeli sisse lülitada, kasutades väikest noolt vastava grupi paremas alanurgas. Põhiline (Kodu) tab:

Kopeerige valitud lahtrite summa lõikelauale

Mitte ainult summa

Kui soovite lisaks banaalsele summale midagi muud, saate kasutada mis tahes funktsioone, mida objekt meile pakub Töölehe funktsioon:

Kopeerige valitud lahtrite summa lõikelauale

Näiteks on olemas:

  • Summa – summa
  • Keskmine – aritmeetiline keskmine
  • Count – arvudega lahtrite arv
  • CountA – täidetud lahtrite arv
  • CountBlank – tühjade lahtrite arv
  • Min – minimaalne väärtus
  • Max – maksimaalne väärtus
  • Mediaan – mediaan (keskväärtus)
  • … Jne.

Sealhulgas filtrid ja peidetud ridaveerud

Mis siis, kui read või veerud on valitud vahemikus peidetud (käsitsi või filtri abil)? Et neid summades mitte arvesse võtta, peame oma koodi veidi muutma, lisades sellele objektile Valik kinnisvara SpecialCells (xlCellTypeVisible):

Sub SumVisible() If TypeName(Selection) <> "Range" Seejärel välju alamribast käsuga GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Special.Cellsy) PutInClipboard End koos End Sub  

Sel juhul rakendatakse mis tahes kogufunktsiooni arvutamist ainult nähtavatele lahtritele.

Kui vajate elavat valemit

Kui unistate, võite välja mõelda stsenaariume, millal on parem kopeerida puhvrisse mitte arv (konstant), vaid elav valem, mis arvutab välja valitud lahtrite kogusummad. Sel juhul peate valemi fragmentidest liimima, lisades sellele dollarimärkide eemaldamise ja asendades koma (mida kasutatakse VBA-s mitme valitud vahemiku aadresside eraldajana) semikooloniga:

Sub SumFormula() Kui TypeName(Selection) <> "Range" siis välju Sub GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Replace(Asenda. Aadress, ",", ";"), "$", "") & ")" .PutInClipboard Lõpeta alamlõpuga  

Summeerimine koos lisatingimustega

Ja lõpuks, täiesti maniakkide jaoks saate kirjutada makro, mis ei võta kokku mitte kõik valitud lahtrid, vaid ainult need, mis vastavad antud tingimustele. Näiteks näeb makro välja selline, mis paneb valitud lahtrite summa puhvrisse, kui nende väärtused on suuremad kui 5 ja samal ajal on need täidetud mis tahes värviga:

 Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Seejärel välju alam iga valikus oleva lahtri jaoks If cell.Value > 5 Ja cell.Interior.ColorIndex <> xlNone then If myRange is Nothing, siis määrake myRange = cell Else Set myRange = Union(minuRange, cell) End If End If Next cell With GetObject("Uus:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) EndP With EndInC) .  

Nagu võite kergesti ette kujutada, saab tingimusi seada absoluutselt mis tahes – kuni lahtrivorminguteni – ja mis tahes koguses (sealhulgas sidudes need omavahel loogiliste operaatoritega või või ja). Fantaasiale on palju ruumi.

  • Teisenda valemid väärtusteks (6 võimalust)
  • Mis on makrod, kuidas neid kasutada, kuhu Visual Basicu kood sisestada
  • Kasulik teave Microsoft Exceli olekuribal

Jäta vastus