tartalom
Néha nagyon hosszú időbe telik, amíg kitalál néhány dolgot. Ám amikor MÁR feltalálták, utólag nyilvánvalónak, sőt banálisnak tűnnek. A „mi, lehetséges volt?” sorozatból.
Az első verzióktól kezdve a Microsoft Excel ablakának alján lévő állapotsor hagyományosan megjelenítette a kiválasztott cellák összesítését:
Igény szerint akár jobb gombbal is rákattinthattunk ezekre az eredményekre, és a helyi menüből kiválaszthatjuk, hogy pontosan mely funkciókat szeretnénk látni:
Nemrég pedig a Microsoft fejlesztői a legújabb Excel-frissítésekben egy egyszerű, de ötletes funkciót adtak hozzá – ha most ezekre az eredményekre kattint, a rendszer a vágólapra másolja őket!
Szépség.
De mi van azokkal, akiknek még nincs (vagy már?) ilyen verziója az Excelből? Ebben segíthetnek az egyszerű makrók.
A kijelölt cellák összegének másolása a vágólapra makró segítségével
Megnyitás a lapon fejlesztő (Fejlesztő) szerkesztő Visual Basic vagy használja ezt a billentyűkódot más+F11. Új üres modul beszúrása a menün keresztül Beszúrás – Modul és másold oda a következő kódot:
Sub SumSelected() If TypeName(Selection) <> "Range" then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.SumP Endboard(Selection)
Logikája egyszerű:
- Először jön a „védelem a bolondtól” – ellenőrizzük, hogy pontosan mi van kiemelve. Ha nem cellák vannak kijelölve (hanem például egy diagram), akkor lépjen ki a makróból.
- Ezután használja a parancsot Getobject létrehozunk egy új adatobjektumot, ahol a kiválasztott cellák összege később kerül tárolásra. A hosszú és érthetetlen alfanumerikus kód valójában egy hivatkozás arra a Windows rendszerleíró ágra, ahol a könyvtár található. A Microsoft Forms 2.0 objektumtár, amely ilyen objektumokat hozhat létre. Néha ezt a trükköt is hívják implicit késői kötés. Ha nem használja, akkor a menün keresztül linket kell tennie erre a könyvtárra a fájlban Eszközök — Referenciák.
- A kijelölt cellák összege parancsnak számít WorksheetFunction.Sum(kijelölés), majd az így kapott összeg a paranccsal a vágólapra kerül PutInClipboard
A könnyebb használat érdekében ezt a makrót természetesen a gomb segítségével hozzárendelheti egy billentyűparancshoz makrók lap fejlesztő (Fejlesztő – Makrók).
Ha pedig látni szeretné, hogy pontosan mit másoltak át a makró futtatása után, bekapcsolhatja a Vágólap panelt a megfelelő csoport jobb alsó sarkában található kis nyíl segítségével. A fő (Itthon) tab:
Nem csak az összeg
Ha a banális mennyiségen kívül mást is szeretne, akkor az objektum által biztosított bármely funkciót használhatja MunkalapFunkció:
Például van:
- Sum – összeg
- Átlag – számtani átlag
- Szám – számokkal ellátott cellák száma
- CountA – a kitöltött cellák száma
- CountBlank – az üres cellák száma
- Min – minimális érték
- Max – maximális érték
- Medián – medián (központi érték)
- … Stb.
Mi a teendő, ha sorok vagy oszlopok el vannak rejtve (manuálisan vagy szűrővel) a kiválasztott tartományban? Annak érdekében, hogy ne vegyük figyelembe őket az összegekben, kissé módosítanunk kell a kódunkat, hozzáadva az objektumhoz Kiválasztás ingatlan SpecialCells(xlCellTypeVisible):
Sub SumVisible() If TypeName(Selection) <> "Tartomány" Akkor lépjen ki a Sub-ból GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Special.Cells)Tells(xpecial.Cells) PutInClipboard vége End Sub
Ebben az esetben a teljes függvény kiszámítása csak a látható cellákra vonatkozik.
Ha élő képletre van szüksége
Ha megálmodod, kitalálhatsz olyan forgatókönyveket, amikor nem egy számot (konstanst), hanem egy élő képletet érdemes bemásolni a pufferbe, amely kiszámolja a kiválasztott cellákhoz szükséges összesítést. Ebben az esetben a képletet töredékekből kell összeragasztania, hozzáadva a dollárjelek eltávolítását, és a vesszőt (amelyet a VBA-ban több kiválasztott tartomány címei elválasztóként használnak) pontosvesszővel helyettesítve:
Sub SumFormula() If TypeName(Selection) <> "Tartomány" Akkor lépjen ki a részből a GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Replace(Replace. Cím, ",", ";"), "$", "") & ")" .PutInClipboard Vége az end-al
Összegzés további feltételekkel
És végül, a teljesen mániákusok számára írhat egy makrót, amely nem az összes kiválasztott cellát összegzi, hanem csak azokat, amelyek megfelelnek az adott feltételeknek. Így például egy makró úgy fog kinézni, hogy a kiválasztott cellák összegét a pufferbe helyezi, ha az értékük nagyobb, mint 5, és ugyanakkor bármilyen színnel meg vannak töltve:
Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Ezután lépjen ki a Sub-ból minden egyes kijelölésben lévő cella esetén If cell.Value > 5 És cell.Interior.ColorIndex <> xlNone then If myRange is Nothing then Set myRange = cell Else Set myRange = Union(sajatTartomány, cella) End If End If Next cell With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange EndP With EndInC) .
Könnyen elképzelhető, hogy a feltételek abszolút bármilyen - cellaformátumig - és mennyiségben beállíthatók (beleértve a logikai operátorok vagy vagy és) összekapcsolását is. A képzeletnek bőven van mozgástere.
- Képletek konvertálása értékekké (6 mód)
- Mik azok a makrók, hogyan kell használni őket, hova kell beszúrni a Visual Basic kódot
- Hasznos információk a Microsoft Excel állapotsorában