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.
Még annyit hozzátennék, hogy ahol 0-k vannak a forrásoszlopban, ott a 0 első előfordulásakor a cellákat eltolva adja az eredményt, aztán a továbbiakban a 0 helyénél nem ír ki semmit, üresen hagyja azt a sort, függetlenül attól, hogy a B1 sorba beírtam-e 0-t a többi vizsgált szám mellé vagy sem.
Végülis ez nem baj, mert a 0-kat nem muszáj kijeleznie, vagy legfeljebb megszámolom. Vagy kicselezem, és átírom a 0-kat másik számra és úgy vizsgálom meg, aztán visszaírom.
Hogyan lehet azt megoldani, hogy csak a kijelölt tartományban végezze el a makrót? Mert ha csak úgy elindítom, a munkafüzet többi részét felülirja (elcseszi), ahova pedig nem is kéne írnia.
Most azt csinálom, hogy egy külön excel táblába kimásolom csak a forrásoszlopot, és ott futtatom le a makrót. Aztán visszamásolom a kapott eredményt.
Kipróbáltam 20.000 db, 5 féle adattal. Az én lassúcska gépemen 49 sec alatt végzett vele. Ne felejtsd el az adatok fölé B2-től kezdve jobbra beírni a különböző értékedet.
Sub valami() Application.ScreenUpdating = False For oszlop = 2 To ActiveSheet.UsedRange.Columns.Count For sor = 2 To ActiveSheet.UsedRange.Rows.Count sz = Cells(sor, 1) If sz = Cells(1, oszlop) And f = 0 Then Cells(sor, oszlop) = sor - 1: f = 1 End If If Cells(sor, oszlop) = "" And oszlop - 1 = sz Then Cells(sor, oszlop).Select felso = Cells(sor, oszlop).End(xlUp).Row Cells(sor, oszlop) = sor - felso End If Next f = 0 Next
'Összes előfordulás másolása a B oszlopba For sor = 2 To ActiveSheet.UsedRange.Rows.Count Cells(sor, 1).Select oszlop = Selection.End(xlToRight).Column Cells(sor, 2) = Cells(sor, oszlop) Next
'Első sor, és C:F oszlopok törlése Rows("1:1").Select Selection.Delete Shift:=xlUp Columns("C:F").Select Selection.Delete Shift:=xlToLeft
Range("A1").Select Application.ScreenUpdating = True End Sub
Viszont ez előrefelé számolja a sorrendet, szóval előbb meg kell fordítanod a sorrendet...majd vissza...a függvényt meg value formájában kell lementeni...
Sub valami() For oszlop = 2 To ActiveSheet.UsedRange.Columns.Count For sor = 2 To ActiveSheet.UsedRange.Rows.Count sz = Cells(sor, 1) If sz = Cells(1, oszlop) And f = 0 Then Cells(sor, oszlop) = sor - 1: f = 1 End If Next f = 0 Next For oszlop = 2 To ActiveSheet.UsedRange.Columns.Count For sor = 2 To ActiveSheet.UsedRange.Rows.Count sz = Cells(sor, 1) If Cells(sor, oszlop) = "" And oszlop - 1 = sz Then Cells(sor, oszlop).Select felso = Cells(sor, oszlop).End(xlUp).Row Cells(sor, oszlop) = sor - felso End If Next Next End Sub
A törlést szeretném elkerülni, mert akkor már egyszerűbb ha én megszámolom és beírom manuálisan, vagyis időben kb ugyanannyi.
Sokszor nem kell a jövőben csinálnom, de jelenleg kb 20ezer cellát kéne így megvizsgálni. És manuálisan kicsit sokáig tartana, bár elkezdtem, de háromszáznál abbahagytam :) Jobb lenne valami frappánsabb, gyorsabb megoldás.
Amit beraktál képet, ott tényleg valami bibi van a számolást illetően.
De az a baj, hogy azért nem 100%-os ez a megoldás...
És mi a lényeg?
Hogy csupán függvénnyel 100%-ig automatikusan megoldjuk, semmi törlés stb..., vagy hogy csak simán "kész legyen" :-)))...szóval, hogy csak egyszer kell ilyesmit csinálnod, vagy sokszor majd a jövőben?
És az pl lehetséges, hogy utólag filterrel töröld azokat a sorszámokat, amik pl nem az egyesre vonatkoznak?
Azt tudom hogyan sorszámozz, ha van külön 1-es, 2-es stb oszlopod, de az a baj, hogy csak úgy tudom megoldni, hogy legyen érték a nem egyesek mellett is...
Köszönöm az együttérzést és a segíteni akarást! Nem szeretnék senkit se lefoglalni, ha van fontosabb, dolga is. De ha szívesen foglalkozol vele, azt nagyon szépen köszönöm!
Az eredmény lehet külön-külön oszlopban is, tehát ha 5 számot vizsgálunk az A oszlopban akkor B-ben az 1-esek, C-ben a 2-esek, D-ben a 3-asok, E-ben a 4-esek, F-ben az 5-ösök... ha így hamarabb van rá függvény. Ilyenkor üres cellákkal szeretném feltölteni (meghagyni) az oszlopot, ahol nincs találat.
Nem találtam függvényt, de biztos van rá valami ügyesség :)
Szóval egy oszlopban vannak számok, pl 1-től 5-ig. A mellette lévő cellában szeretném megjeleníteni, hogy hány cella múlva jelenik meg megint az a szám. Már az első cellától kéne számolni, hogy mikor jelenik meg (de ha csak a keresett szám első előfordulásától számolja az is jó)
Példa: A oszlop a számok 1-5 között, B oszlop az eredmény
Vegyünk egy függvényt a 3. lapon, amely a 2. lapról vesz adatot. Például:
=SZUM(Munka2!C4:D14)
A cél az, hogy a 2. munkalap neve ne egy fix dolog legyen, hanem szintén paraméter. Ezt ugye az INDIREKT függvénnyel lehet megoldani. Ha az aktuális munkalap A1 cellájában van a 2. munkalap neve (tehát A1 = "Munka2"), akkor a fenti példa így módosul:
=SZUM(INDIREKT("'" & A1 & "'!C4:D14"))
Tegyük fel, hogy a 3. lapod tele van olyan képletekkel, ami a fenti módon hivatkozik a 2. lapra: az A1 cellából veszi a lap nevét. Ha ezt a 3. lapot lemásolod, és így létrejön a 4. lap, csak annyi dolgod van, hogy ezen a 4. lapon átírod az A1 cella értékét Munka3-ra, és máris az összes képlet a 3. lapra fog hivatkozni.
Ha pl. a harmadik lapot átmásolom negyediknek, mitől írodnak át automatikusan a második lapra vonatkozó cella hívatkozások a harmadik lapra vonatkozóra?
Lenne egy problémám amihez egy kis segítség kellene:
Van egy elég nagy mennyiségű lekért adathalmazom (főkönyvi karton több ezer sor), és elképzelhető, hogy vannak kétszer szereplő tételek benne amiket szeretnék kiszűrni.
Van rá bármilyen ötletek, hogy ezt hogyan tudnám megcsinálni? A legegyszerűbb A-Zig sorba rakom és átnézem ilyen mennyiségnél túl időigényes amivel nem állok éppen túl jól :P
Esetleg azt be tudom állítani, hogy az autószűrő bekapcsolása után kiírja, hogy melyik szűrés esetében hány találat van?