Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Megszokás... A dupla negatív átváltja a TRUE/FALSE értékeket számmá. Én mindíg be szoktam rakni a képletekbe, mert lusta vagyok megjegyezni, hogy mikor kell meg mikor nem :-)
A tartomány elnevezéseket már használtam máskor is, itt most nem jutott eszembe. A képlet elején a 2 kötőjel (--) miért van? Én nem tettem bele és működik.
Adott ez a valószínűleg hosszú képlet! Ez így működik, gyönyörűen adja az eredményt, de jó hülyén néz ki.
Negyedév adatait szerettem volna összegezni, de a hónapokat nem tudtam egyszerűbben meghatározni, pedig SQLkerdes segített, de az általa leírtak (11544-45) nem működnek.
Az Index fórum kedvenceim között láttam, hogy ebben a topikban a te hozzászólásod az utolsó, de amikor idejöttem, akkor nem láttam a hozzászólást magát. Ilyenkor segít, ha ez ember posztol egy kommentet, az "előcsalogatja" a - valamilyen technikai okból - láthatatlan hozzászólást.
A te problémáddal az a baj, hogy: - nem lehet előre megmondani max hány számla kombinációjából jön ki az elutalt összeg, viszont ilyet leprogramozni nem lehet. A megoldás amit én választottam az volt, hogy feltételeztem, hogy 6-nál nem nagyobb ez a szám. Minél nagyobb ez a szám, annál bonyibb megírni a kódot. - továbbá, minél nagyobb a fenti szám, annál többször fog előjönni ugyanaz a "megoldás" különböző variációkban (100+400, 400+100, etc.).
Szóval nem egyszerű összerittyenteni egy ilyen kódot, ezért is van, hogy nem nagyon tolonganak a jelentkezők... És nem fogok hazudni, most hogy amit eddig csináltam elszállt, nehéz újra nekiülni a másik gépen elszállt file-ok visszaállítása helyett :-(
Köszönöm szépen a segítséget és a javaslatokat! Igen, valóban igaz, a FOR-ba nem jó információ meghatározó részt tenni, nem is szoktam, most valamiért a gyors próba után úgy maradt ;-)
Ez a kód pld kiszinezi az autoszűrt cellákat az A oszlopban
Sub Macro1()
Dim myrange, workrange As Range
Set myrange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
For Each workrange In myrange workrange.Interior.ColorIndex = 15 Next
End Sub
Kiszinezés helyett akár ki is olvashatod mindegyik cella sorának számát és ezt felhasználva már bármit csinálhatsz az adott sorban. Mondjuk úgy is tudsz bármit csinálni az adott sorban, hogy az OFFSET-et használod és a műveleti cellát a workrange cellától jobbra v. balra x darab cellával elmozgatod. Élek a gyanúperrel, hogy az OFFSET-es megoldás gyorsabb, mint a workrange cella sorának meghatározása és utána ez alapján műveletezés.
Pld: Csinálsz egy Range object-et ami csak bizonyos cellákat tartalmaz (mivel autoszűrve van a cucc, a te konkrét esetedben nyilván a látható cellák érdekelnek):
Set myrange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
(Ez pld. xl2007-ben gyakorlatilag a [HOME / FIND & SELECT / GO TO SPECIAL] VBA változata)
Ezután egy FOR Each Range in MyRange ... NEXT ciklusban megcsinálod amit akarsz.
Előnye akkor van ennek a megközelítésnek, ha nagyon sok sor van kiszűrve. Vegyük a lenti példádat. Ha van összesen 1 millió sorod amiből 20 db maradt meg az autoszűrés után, akkor a te lenti kódod mind az 1 millió sort végigjárja, kiértékeli, stb.
A fenti megoldás csak a 20 darab ténylegesen látható sorral fog törődni.
Köszi, de amint írtam, több ezer sorból van autoszűrővel kiválasztva több különböző szűrőbeállítással az eredmény (több különböző sor). Nekem tulajdonképpen a kiválasztott sorokon kellene végigmenni, mert egy következő művelethez ezen sorok különböző celláinak értékeire van szükségem. Ja, és az autószűrővel történt kiválasztást is makró végzi.
"Alternatívaként egy vektorváltozóba beteheted az autoszűrés eredményeként megmaradt számokat (Special Cells, Visible) és ezen szaladsz végig egy FOR NEXT ciklussal."
Én fordítva csinálnám. Nyilván van valami feltételed az autoszűrőben, pld .value>0 (pozitív számok). A ciklust megcsinálnám minden számra, de a cikluson belülre tennék egy IF-et ami kiértékeli a szűrési feltételt. Ha a feltétel igaz, megcsinálja amit kell, ha nem akkor bármi action nélkül kidob a Next-hez.
Alternatívaként egy vektorváltozóba beteheted az autoszűrés eredményeként megmaradt számokat (Special Cells, Visible) és ezen szaladsz végig egy FOR NEXT ciklussal.
A kérdésem az lenne, hogyan lehet egy autoszűrővel szűrt állományon egy ciklussal végigmenni úgy, hogy csak a szűrt sorok értékeit szeretném vizsgálni. Pl. egy több ezer soros állományból a szűrés eredményeként látható a 2.; 12.; 35.; 50.; 135. sor és csak ezeket szertném vizsgálni.