VBA-val ismerkedőknek feladvány, problémával küzdőknek lehetséges megoldás

2016. április 15. - Office Guru

Kisebb kitekintés és más területeken való kalandozás után a mai posztban térjünk vissza a VBA-hoz, amelyet legalább alapszinten mindenkinek célszerű megismernie, aki sokat dolgozik Excelben, hiszen nem kell programozónak lenni ahhoz, hogy mondjuk egy állandóan elvégzett Pivot-táblás copy-paste műveletet automatizálni tudjunk.

Szóval a mai kérdés a következő kis tábla köré összpontosul:

tabla01.jpgTegyük fel, hogy kirándultunk egy nagyobbat az országban, felkerestünk néhány települést és az ezeken a helyeken megvásárolt dolgokról vezettünk egy kis Excel-táblázatot, de arra már nem figyeltünk, hogy mivel jelöltük az egyes cellákban, hogy mit vásároltunk, tehát szöveg, betű vagy éppen szám egyaránt található a táblában. A kérés annak meghatározása lenne, hogy a termékek egységárát figyelembe véve, pontosan mennyit költöttünk, ha a cellákba beírt érték nem számít, csak az, hogy írtunk-e be valamit vagy sem - értelemszerűen ha írtunk valamit, azt tekintsük egynek.

A feladvány jópár úton megoldható, de VBA-ban sem tartozik a nehéz feladatok közé, ezért aki még csak az érdeklődő fázisban tart, ő mindenképpen próbálja saját maga megoldani.

Alt + F11 billentyűkombinációval ugorjunk át a VBA-editorba és kezdjünk is neki Szamitas() nevű szubrutinunk összedobásának, amelyet most már biztosan a változók deklarálásával kezdünk. Tekintve, hogy tartományról van szó és ciklusra lesz szükségünk, célszerű a tartománynak is létrehozni egy változót (én ezt most rng néven Range típussal meg is teszem) illetve kell egy másik változó, amelyben a kalkulációnk eredményét tároljuk a ciklus során (én ezt a megszokott i néven Integer típussal alkottam meg). Szóval megvannak a változóink, az rng névre hallgatót fel is tudjuk tölteni táblázatunk paramétereivel.

tabla02.jpgHangsúlyozom, egyszerű feladványról van szó, tehát aki érdeklődik VBA-ismeretek iránt, az mindenképpen kapcsolódjon be és saját maga fejezze be a megoldást - a saját verziójában.

Szóval most jön a ciklusunk, amelyet én általában simán szövegként gondolok végig (egy-két írónak volt hasonló módon megírt oktatási anyaga), azaz most minden egyes cellát nézzen meg a ciklusunk a tartományban (For Each cell in rng) és ha a cella (If Cell.Value) nem üres (cell.Value <> "") akkor (Then) ezt a cellát tegye az aktív cellánkká (cell.Activate). Majd ezután a fentebb deklarált i változó legyen egyenlő a korábban benne lévő értékkel, hozzáadva a most aktív cellánk oszlopának második sorában szereplő értéket (i = i + Cells(2, ActiveCell.Column) - persze itt is simán elkerülhetjük a konstans sorszám használatát, ha akarjuk. Ezután zárjuk le az If feltételvizsgálatot és ugorjunk a következő cellára a tartományban.

tabla03.jpgInnen már csak az van hátra, hogy kiírassuk az eredményt a képernyőre egy MsgBox segítségével, illetve kiürítsük i változónkat és bezárjuk a szubrutint:

tabla04.jpgÉs ezután már tuningolhatjuk, ahogy akarjuk, innen könnyen be tudjuk állítani akár azt is, hogy ha szám van, akkor ne csak egyszer számolja az egységárat, hanem a számmal szorozza meg, de akár kitölthetjük az üres cellákat is, gombhoz is hozzárendelhetjük, de akárhogy is teszünk, a fentinek meg is van szépen az eredménye:

tabla05.jpg

Szövegként a kód:

Sub Szamitas()
Dim rng As Range
Dim i As Integer
Set rng = Range("B3:D8")

For Each cell In rng
If cell.Value <> "" Then
cell.Activate
i = i + Cells(2, ActiveCell.Column)
End If
Next
MsgBox i
i = 0
End Sub

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr968631446

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.