Hogyan írjam meg az alábbi makrót?
excelbe kéne megírnom a következőt: Töltse fel A1:A10 tartomány celláit tetszőleges számokkal majd írjon makrót amely gombnyomásra indul, és a B1 es cellába kiírja hogy a kitöltött tartományban mennyi a 10 nél kisebb számok átlaga.
nem tudom hogyan kell légyszíves valaki írja le köszi :)





Iszonyú primitív, 2 perc guglizással megoldható.
Mi okoz benne problémát?





Fontos lehet, melyik Excel-t használod (2003-as vagy régebbi, 2007-es, 2010-es, 2013-as stb.)
Nálam 2007-es van, az újabbakban van sok új funkció.
Az átlagnál gyakorlottabb felhasználónak tekintem magam, de így is jóval 2 perc fölött végeztem, mivel makrókat nem használok, a szintaktikát meg C64-nél használtam utoljára, aztán ugye ezt a szöveget is be kellett írni.
Kezdem is:
Tetszőleges számokra a véletlenszám függvényt ajánlom:
=VÉL() de a gond vele az, hogy 0-1 közötti törtszámot ad, ezt az intervallumot általában szorzással növelik:
=VÉL()*20 ez így 0-20 közötti szám lesz, de kerekítéssel szebb lenne:
=KEREKÍTÉS(VÉL()*20;0) így a törtrész számjegyeinek száma 0.
Ezután már csak át kell húzni/másolni a többi cellába.
KIEGÉSZÍTÉS:
2010-estől van új függvény: =VÉLETLEN.KÖZÖTT(0;20) ami ugyanazt adja.
Makró előtt egy gyors kitérő:
Ha függvényekkel kellene megcsinálni, akkor mondjuk elsőre a B1 cellába ezt írnám: =ÁTLAGHA(A1:A10;"<10") ez annyit jelent, hogy az A1-A10 cellatartományból átlagolja a 10-nél kisebb értékeket. Mi van ha nincsen 10-nél kisebb? Hibaüzenetet ad. Ezért kicsit ki lehet egészíteni a DARABTELI(A1:A10;"<10") függvénnyel, ami a 10-nél kisebb értékeket számolja meg az A1-A10 cellatartományban. A két említett függvényt a HA feltétellel kötöttem össze, így a vége: =HA(DARABTELI(A1:A10;"<10");ÁTLAGHA(A1:A10;"<10");0) vagyis HA a DARABTELI függvény talál 10-nél kisebb értéke(ke)t akkor az ÁTLAGHA függvény kiszámolja, ha pedig nem, akkor 0-t ír be.
Na ezek alapján lássuk a makrót:
Nézet fül > Makrók menüpont > Makrónévnek beírod pl. "Atlag" > Létrehozás.
A "gombnyomásra" nem volt egyértelmű. Szimpla billentyűkombinációt jelent-e, vagy ki kell rajzoltatni egy gombot amire ráttantitva lefut?
1. Billentyűkombinációval:
A megjelenő ablakba írd be így:
Sub Atlag()
If (WorksheetFunction.CountIf(Range("A1:A10"), "<10") > 0) Then
Worksheets(1).Cells(1, 2) = WorksheetFunction.AverageIf(Range("A1:A10"), "<10")
Else
Worksheets(1).Cells(1, 2) = 0
End If
End Sub
Rövid magyarázat: If=HA, WorksheetFunction.CountIf=DARABTELI, WorksheetFunction.AverageIf=ÁTLAGHA megfelelője, a Worksheets(1).Cells(1,2) az első munkafüzet 1-es sor, 2-es oszlopának celláját jelenti, vagyis a B1-et, végül a Range egy cellatartományt ad meg.
Végül a billentyűkombináció beállítása:
Nézet > Makrók > makró kijelölése > Egyebek > Billentyűparancsnál kell megadni.
2. Rajzolt gomb:
A makró kódjának ablakában Insert > UserForm. A megjelenő ablakba rajzolni kell egy parancsgombot (CommandButton a Toolbox kisablakban), érdemes a feliratát átírni (Caption mező a Properties kisablakban, a balra alsó sarokban), esetleg a betűméretét is változtathatod (Font mező ugyanarra). Ha kész akkor duplán kattins a megrajzolt gombra és a megjelenő ablakba másold át a begépelt makó kódját hasonlóan az előzőhöz:
Private Sub CommandButton1_Click()
If (WorksheetFunction.CountIf(Range("A1:A10"), "<10") > 0) Then
Worksheets(1).Cells(1, 2) = WorksheetFunction.AverageIf(Range("A1:A10"), "<10")
Else
Worksheets(1).Cells(1, 2) = 0
End If
End Sub
Ezután a Nézet > Makrók > makró kijelölése > Indításra megjelenik a parancsgomb, amire klikkelve lefut az átlagszámítás.
FONTOS:
A makró futásakor újragenerálódnak a véletlenszámok, így a kiszámolt átlag már nem lesz szinkronban a látható értékekkel.
Erre már nem volt időm, de ha nem érkezik más válasz, majd megnézem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!