Cuprins
Uneori este nevoie de foarte mult timp pentru a veni cu unele lucruri. Dar când au fost DEJA inventate, după fapt par evidente și chiar banale. Din seria „ce, a fost posibil?”.
Încă de la primele versiuni, bara de stare din partea de jos a ferestrei Microsoft Excel afișa în mod tradițional totalurile pentru celulele selectate:
Dacă se dorește, a fost chiar posibil să facem clic dreapta pe aceste rezultate și să selectăm din meniul contextual exact ce funcții vrem să vedem:
Și recent, în cele mai recente actualizări Excel, dezvoltatorii Microsoft au adăugat o funcție simplă, dar ingenioasă - acum, când dați clic pe aceste rezultate, acestea sunt copiate în clipboard!
Frumuseţe.
Dar cum rămâne cu cei care nu au încă (sau deja?) o astfel de versiune de Excel? Aici pot fi utile macrocomenzile simple.
Copierea sumei celulelor selectate în Clipboard folosind o macrocomandă
Deschideți în filă dezvoltator (Dezvoltator) editor Visual Basic sau utilizați această comandă rapidă de la tastatură Alt+F11. Introduceți un nou modul gol prin meniu Inserare – Modul și copiați următorul cod acolo:
Sub SumSelected() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection) .EndtInd Subboard
Logica lui este simplă:
- Mai întâi vine „protecția față de prost” – verificăm exact ce este evidențiat. Dacă nu sunt selectate celule (dar, de exemplu, o diagramă), atunci ieșiți din macrocomandă.
- Apoi, folosind comanda Getobject creăm un nou obiect de date în care suma celulelor selectate va fi stocată ulterior. Un cod alfanumeric lung și de neînțeles este, de fapt, o legătură către ramura de registru Windows în care se află biblioteca Biblioteca de obiecte Microsoft Forms 2.0, care poate crea astfel de obiecte. Uneori se mai numește și acest truc legare tardivă implicită. Dacă nu îl utilizați, atunci ar trebui să faceți un link către această bibliotecă în fișier prin meniu Instrumente — Referințe.
- Suma celulelor selectate este considerată o comandă WorksheetFunction.Sum(Selectare), iar apoi suma rezultată este plasată în clipboard cu comanda PutInClipboard
Pentru ușurință în utilizare, puteți, desigur, să atribuiți această macrocomandă unei comenzi rapide de la tastatură folosind butonul Macrocomenzi fila dezvoltator (Dezvoltator – Macrocomenzi).
Și dacă doriți să vedeți ce anume a fost copiat după rularea macrocomenzii, puteți activa panoul Clipboard folosind săgeata mică din colțul din dreapta jos al grupului corespunzător pe Principalul (Acasă) Fila:
Nu doar suma
Daca, pe langa suma banala, iti doresti si altceva, atunci poti folosi oricare dintre functiile pe care ni le ofera obiectul Funcție Fișă de lucru:
De exemplu, există:
- Sumă – sumă
- Medie – medie aritmetică
- Număr – numărul de celule cu numere
- CountA – numărul de celule umplute
- CountBlank – numărul de celule goale
- Min – valoare minimă
- Max – valoare maximă
- Mediană – mediană (valoare centrală)
- ... etc.
Ce se întâmplă dacă rândurile sau coloanele sunt ascunse (manual sau printr-un filtru) în intervalul selectat? Pentru a nu le lua în considerare în totaluri, va trebui să ne modificăm ușor codul adăugând la obiect Selecţie proprietate SpecialCells(xlCellTypeVisible):
Sub SumVisible() Dacă TypeName(Selection) <> "Range" Apoi Ieșiți Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection.SpecialCell)Tellsypex PutInClipboard End With End Sub
În acest caz, calculul oricărei funcții totale va fi aplicat numai celulelor vizibile.
Dacă ai nevoie de o formulă vie
Dacă visezi, poți veni cu scenarii când este mai bine să copiați nu un număr (constant), ci o formulă vie în tampon, care calculează totalurile de care avem nevoie pentru celulele selectate. În acest caz, va trebui să lipiți formula din fragmente, adăugând la aceasta eliminarea semnelor dolarului și înlocuind virgula (care este folosită ca separator între adresele mai multor intervale selectate în VBA) cu punct și virgulă:
Sub SumFormula() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ("(" & Replace.(Selectare). Adresă, ",", ";"), "$", "") & ")" .PutInClipboard End With End Sub
Însumare cu condiții suplimentare
Și, în sfârșit, pentru complet maniaci, puteți scrie o macrocomandă care să însumeze nu toate celulele selectate, ci doar pe cele care îndeplinesc condițiile date. Așadar, de exemplu, o macrocomandă va arăta așa cum pune suma celulelor selectate în Buffer, dacă valorile lor sunt mai mari de 5 și, în același timp, sunt umplute cu orice culoare:
Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Apoi Ieșire Sub pentru fiecare celulă din Selecție Dacă cell.Value > 5 Și cell.Interior.ColorIndex <> xlNone Atunci dacă myRange este Nimic, Setați 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) .PutInClipboard Sub
După cum vă puteți imagina cu ușurință, condițiile pot fi setate absolut orice – până la formate de celule – și în orice cantitate (inclusiv prin legarea lor împreună cu operatori logici sau sau și). Există mult loc pentru imaginație.
- Conversia formulelor în valori (6 moduri)
- Ce sunt macrocomenzile, cum să le folosești, unde să inserezi codul Visual Basic
- Informații utile în bara de stare a Microsoft Excel