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.
0. Elég jól tudok VBA-ban (is) programozni, tehát nem azért mondom :)
1. Szinte soha nem írok makrót, ha valamit meg lehet sima Excel fügvényekkel is oldani. (és főleg nem javaslok mások használatára ilyen megoldás :) )
Fő indokok, amik hosszú évek alatt ülepedtek:
Kompatibiltás, Excel verziók két-három évente jönnek-mennek, ugyanaz a VBA-kód akár Visual Basic, akár komponensek, akár biztonsági változások miatt nem marad működőképes
Mellékhatások lekezelése, a példában pl. megváltozik a valamelyik munkalap neve. Ilyen esetben VBA csak akkor működik rendesen, ha programozó erre odafigyelt, pl. a függvény kódjában szerepel az Application.Volatile sor. A hibakezeléstől kezdve elég sok ilyen példát lehet mondani.
Sajnos, a Visual Basic nyelv elég "pongyola", előnye, hogy gyorsan lehet benne programot írni csekély programozási tudással, de a rendesen működő kód előállítása nagy figyelmet igényel
3. VBA programozásnak ott van értelme
Nincs rá beépített Excel módszer, vagy függvény
Automatizálni kell (példádban pl. egyszerre végigmenni az összes fájlodon, megcsinálni rá az összesítő munkalapot, és így visszamenteni)
4. A kész megoldást lemásolni, akár ha VBA kódot, akár munkalapot másolod le, ugyanannyi idő. De rajtad múlik, hogy a különböző megoldásokból mit hasznosítasz a későbbiekben. A topik "törzslakói" nem azért írunk be ilyen-olyan megoldásokat, hogy kötelezően azt kelljen használni, és csak az az egyetlen jó megoldás, hanem a különböző problémákból, megoldásokból lehessen tanulni.
5. Ha azonban csak a Ctrl+C- Ctrl+V esett le, akkor legtisztább az lenne, ha Jimmy-nek küldesz egy sört, vagy más általa kedvelt italt. Amerikai freelancer portálokon ilyen mélységű feladatokért 10-20 dollárt szoktak fizetni.
Egy üzletnek van egy excel táblája amiben az összes árú rögzítve különböző adatival (besz ár, eladási ár, utolsó vásárlás, stb). Ebből a táblázatból szeretnék csinálni egy leltározásra alkalmas táblázatot úgy hogy rögzítek egy makrót ami átvariálja az oszlopokat, kitöröl néhány a leltár szempontából felesleges munkalapot stb, majd mentem mondjuk letrá_datum.xls néven. Viszont ahhoz hogy a leltárt ki tudja számolni hivatkozni kellene az előző leltárkor készített ugyanilyen leltár táblázatára (ami egy külön file -ba lenne).
A kérdésem az, hogy meg lehet e valahogy oldani hogy egy mezőbe beírom az előző leltár file nevét és azt a megfelelő cellákban lévő hivatkozások file részébe behelyetesítené. Pl: =[leltár_elozo.xls]Aru!$B$17 hivatkozásnál magától behelyetesítse a "leltár_elozo.xls" file nevet.
1. Egy új munkafüzetben hozz létre egy Összesítő nevű munkalapot.
2. Hozd be a névkezelőt pl. Ctrl+F3 és add hozza egy új nevet pl. Munkalapnevek, a hatókörhöz az Összesítő munkalapot, a hivatkozáshoz a következő képletet:
A2-t lehúzod annyi sorra lefelé, amennyi munkalapod van, ugyanígy a B3 cellát is.
A 2. sor ami Összesítő munkalapnevet tartalmazza, akár el is rejtheted, ha akarod.
Egy érdekes trükk a VÉL() függvény, a VÉL() minden változásra frissül, így ha átneveznek egy munkalapot, akkor azonnal az új név jelenik meg a cellában.
4. Mentse le a munkafüzetet mondjuk ÖsszesítőAlap.xls névvel.
Használata:
1. Megnyitod ÖsszesítőAlap.xls és az a fájl, ahová összesítést akarsz
2. Az ÖsszesítőAlap.xls jobb egérgomb az Összesítő munkalapfülre Másolás vagy áthelyezés menüpont
A melyik munkafüzetbe kiválasztod a célt, az első munkalap elé legyen beillesztve és Legyen másolat legyen bepipálva
3. Az új helyen az aktulális munkalapnevek jelennek meg a darabszámokkal, esetleg a képletet itt még utána kell húzni fel, vagy lefelé. De ez már csak pár másodperc.:)
A pivot még ezt is tudja :) húzd bele a cikkszám listát az érték területre a kimutatásban.
Ha esetleg nem darabszámot számolna (hanem pl összeget ) akkor gördítsd le a kis nyilat a listád mellett és a mezőbeállításokban válaszd ki a darab függvényt, és máris mutatja a darabszámot :)
Ezer hála! Ez nagyon egyszerű és nagyon jó is! :) Még egy olyan kérdésem lenne, hogy esetleg ezeket meg lehetne számolni a cikkszámokat hogy naponta mennyi készült el belőle mert már most pár ezer sorbol áll amit nem szívesen számolok meg egyessével! :D
Rákerestem az Excel topikba írt hozzászólásaidban az "sql" karaktersorozatra, és csak abban az egyben fordul elő, amire most épp válaszolok. Lehet, hogy leírtad valahol, hogy sql-ben dolgozol, de nem ebben a topikban, és nem ehhez a feladathoz kapcsolódva. Igaz, egy 15 hónappal ezelőtti hozzászólásodban írtad, hogy "adatbáziskezelésben gondolkoztam", de ezt valamiért nem jutott eszembe összekapcsolni a jelenlegi kérdéseddel.
A kérdéseddel pedig az a gondom, hogy pongyolán fogalmazol. Te érted, hogy mit akarsz, és azt gondolod, hogy mindenki érti, pedig nem. Ott van pl. a 17980-as, az indító felvetés. Nincs benne leírva, hogy mit is szeretnél pontosan. Csak annyi, hogy "kezelni a problémát", amit az ünnepnapok okoznak. Azt én kapásból félreértettem, mert azt hittem, hogy pusztán munkanapokat és munkaszüneti napokat kell megkülönböztetni, és erre van egy jól bevált módszerem. Akkor te kijavítottál, hogy nem ez kell, de továbbra sem írtad le, hogy mi.
Most azt gondolom, hogy talán egy adott napra vonatkozó nyitvatartási időt akarod visszakapni, figyelembe véve az esetleges munkanap-áthelyezéseket és ünnepnapokat. Ez mondjuk logikus lenne, sőt, talán ez az egyetlen logikus kimenete az általad csepegtetett információnak, de szerintem célravezetőbb lenne a kérdéseket explicit módon leírni, és nem ránk bízni, hogy rakjuk össze, ahogy tudjuk.
Aztán leírtad, hogy egy lista kell, amelyben ki vannak gyűjtve a problémás napok, és mellettük (gondolom) az aznapra érvényes nyitvatartási rend.
Mi kell ennél több? Ez gyakorlatilag megoldás, már csak implementálni kell. Vagy mi hiányzik még?
Sub izé() Dim ws As Worksheet, newWs As Worksheet, rng As Range Set newWs = ThisWorkbook.Worksheets.Add For Each ws In ThisWorkbook.Worksheets If ws.Name <> newWs.Name Then Set rng = newWs.Range("A" & Rows.Count).End(xlUp).Offset(1) rng = ws.Name rng.Offset(, 1) = Application.WorksheetFunction.CountA(ws.Range("A:A")) - 1 End If Next End Sub
Nem értem miért probléma a 40 lap. Kijelölöd mind a 40-et, és az egyikbe beirod a képletet. És akkor ott lesz mindegyiken. Majd kreálsz egy összesítö képletet és bemásolod valamelyik cellába. És kész.
van egy file amiben van a 40 lap, te azt tennéd, hogy egyesével becopyzgatod a számolást, utána, egyesével belinkelgetnéd a 40 féle nevű lapról a cellahivatkozást ?
vagy lenne egy makród, amit a file ba bemásolsz és kész ?
3 ilyen filet kapok egy héten, KÉRLEK HIDD EL, hogy így sokkal egyszerűbb lenne.
Köszönöm az eddigi hozzászólásaidat. (kérlek ne ird le mégegyszer, hogy egyesével kéne ezt megoldani, köszi) :)
Szerintem nem lassú, és makróval nem is próbálkoznék.
Amúgy most is kénytelen vagy egyesével megnyitni, ha tudni akarod, hány sor van benük, nem? Messze gyorsabb összesítéssel megcsinálni, de ezek szerint valami más is van a háttérben.
Tehát akkor nem oldható meg makróval az alábbi probléma ?!
ezt a módszert én is tudom, de ez nem jó megoldás, mert nagyon lassú ezért szeretném ha valaki válaszolna a kérdésre, hogy meg lehet e oldani makróval ?
Nem igazán értem a problémádat. Igen, megnyitod a 40 lapot egyesével, legalsó sor első oszlopába bemásolod a függvényt, és irsz egy összesítőt, ami minden egyes lap első oszlop utolsó sor eredményét összegzi.
Én leirtam, hogy csak sql-ben dolgoztam, abban lenne megoldásom, de kapcsoló tábla kell hozzá.
Érdekel, hogy excelben van-e erre megoldás.
A másik példánál is azt válaszoltátok, hogy lényegében az excel erre nem jó, belső adatbázisa se jó, külső adatbázisra kell csatlakozni, és abból tudtok elemezni pivot táblával. Hát, ha már megvan a külső adatbázis, akkor abban sokkal egyszerűbb megirni a lekérdezéseket, mint excelhez biztositani az állandó hozzáférést és pivot táblákkal szórakozni.
A következő a szitu: Kapok egy közel 40 Sheet et tartalmazó excel filet, amiben változó mennyiségű adat van.
Az általad említett módszer (ami alapban jó) de lássuk be nagyon macerás egy makróhoz képest. MInden egyes lapra, bemásolgatni a kódot, és még összesítő sincs :)
Szóval továbbra is köszönöm annak aki megoldást talál !
Gyakorlatilag erre találták ki a pivot (kimutatás) táblát.
Persze lehetne mondjuk SZUMHATÖBB függvénnyel számoltatni, de mindig deffiniálni kellene a megszámolandó értékeket, a pivot meg megcsinálja a fejléc nevéből.
Hogyan tudnám megoldani egy egyszerű statisztika készítést.
Van három oszlopom
Dátum Idő Cikkszám
06/18/12 8:32:07 0123456789 Dátum Idő Cikkszám
06/18/12 8:35:07 0123456789 Dátum Idő Cikkszám
06/18/12 8:38:07 9876543210
Olyan függvényre lenne szükségem ami megmondja, hogy 18-án a 012345678 termékből legyártottak 2db-ot a 9876543210-ból pedig egy darabot. Erre létezik előre definiált függvény vagy valahogy nekem kellene egyet írni?
Lehet olyan makrót írni ami tetszőleges számú és nevű lapokon (egy file-on belül) megszámolja, hogy mondjuk minden lapon az A oszlopban hány cellában van valami (szám vagy betű mindegy, csak nem üres cella) beírva. Úgy is mondhatnám, hogy hány sor van az adott lapon :).
A sok lapos (kb 40 db) file adott, mindenféle lapnévvel ebben kellene megszámolni a sorokat, és folyamatosan bővül.
Sajna nem értek a makróhoz, nagyon szépen megköszönöm, ha valaki tud segíteni !!!
Esetelg olyat is lehet, hogy egy üres lapra, egymás alá beírja a sheet nevét és mellé, hogy hány sort tartalmaz az adott lap, és egészből levonni 1 et, mert a fejléc nem játszik :) ?