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.
Ja! Köszi tényleg minden segítséget, viszont ez a makró gondolom csak Excel kompatibilis nem? Próbáltam Libre Officeban is megnyitni de ott nem működött. Nem reklamálásként mondom persze, csak én ezt a funkciót sose használtam a táblázatkezelőkben. Viszont arra gondoltam, hogy ha Excel makrót át lehet exe-re fordítani, akkor akár egy kimeneti szövegfájlba is tudna dolgozni, azt meg a Word is jobban kezelhetné helyesírásilag. Persze az értelmes szavak kiválogatása még ott is kérdés maradna. Na nem kotnyeleskedek inkább csak eszembe jutott ez-az. :)
A sortörés cellán belül opció hosszú mondatokra megoldja szerintem mert ott automatikusan az adott 1 sor magasságát beállítja magának. De ilyen számlázósdit nem Accessel szoktak csinálni?
Pimre,
Teljesen igazad van, a kék szóban nincs 2 é. Ezt jól benéztem. :)
"Milyen megoldás létezik arra, hogy soronként különböző cellaszéllességeket tudjak beállítani? "
Legjobb tudomásom szerint az excel celláinak szélességét /és magasságát/ nem lehet egyedi méretre állítani, csak az egész oszlop/sor méretét.
De ahhoz, hogy "űrlapszerűen nézzen ki", nem kell a szélességet állítani szerintem. A cella szegélyeket szabadon állítgathatod és így a két-három cellába átnyúló nevek úgy néznek ki, mintha egy cellában lennének (a két/három cellát keretezed egyben, a közte levő elválasztóvonalat meg "eltünteted").
Ezen kívül az oszlop és sorfejléceket (A, B, ill. 1,2 stb.) is el lehet tüntetni az excel beállításainál.
Ha ezek nem adnak megfelelő "látványt", akkor nem marad más hátra, mint saját űrlapot csinálni a számodra megfelelő elrendezéssel.
Nem találtam se keresőben se súgóban a problémámra megoldást, szeretnék egy olyan excel táblát létrehozni ami hasonlóan néz ki mint a számlázóprogramok által jól ismert felosztás:
-Felül kiállító és megrendelő külön cella,
-alatta dátumok külön cellák,
-alatta megnevezés,mennyiség, mennyiségi egység, nettó ár stb.
Cella egyesítéssel borzalom, minden több mondatos megnevezésnél cellát kellene egyesítgetnem, de ha a cella szélességét húzom szét akkor a felső sor a kiállító/megrendelő arányosítottan középen szétosztottt része esik szét.
Milyen megoldás létezik arra, hogy soronként különböző cellaszéllességeket tudjak beállítani?
Igazad van, ezek szerint nem tökéletes a megoldás. Holnap megnézem, hogy maradhatott ki ez a lehetőség. Nyilván javítani kell az algoritmust.
Ezen felül átgondolom, hogyan lehetne függőlegesen rendezni az eredményeket. Ott néhány tízezer variációt is létre lehet hozni egy oszlopban. Szerintem ehhez is elég lesz 1-3 nap.
Szia, egy kicsit kései válasz, de hátha segít. A feladatot nemhogy lehetetlen makró nélkül megoldani, hanem még makróval is nagyon nehéz. De mivel tetszett a feladat, megpróbáltam. És végül sikerült.
Az általad küldött képernyőhöz írtam a programot, ami automatikusan lefut, ha beírsz egy új szót. Itt a program:
A képernyődön pirossal írt szövegedet áttettem alulra, így az egyes általad írt darabszámokhoz kapcsolódóan megjelennek a hozzá tartozó variációk. Persze csak akkor annyi, ha nincs betű ismétlődés. Mert például az "alma" szóból nem lehet kirakni 24 db különbözőt, csak 12 db-ot. Az a betű ismétlődése miatt. Ha az ismétlődőket is látni szeretnéd (tehát a 2 db a-t nem tekinted azonosnak, akkor Alt+f11-re megjelenik a program, és annak az 5. sorában a "ismetlodoiskell As Boolean = False" szövegben a False helyett írj True-t.
A megjelenő variációk fölé sorszámokat írtam, hogy könnyebben tudd ellenőrizni azok számát.
Természetesen ezzel a kiírási módszerrel legfeljebb 5 karakteres szavakat tudsz értékelni, mert a hatbetűshöz már 720 elem kellene, ami nem fér el vízszintesen a táblázatban. Persze, ha kell meg tudjuk oldani függőlegesen is, úgy tovább lehet menni.
Egy kis szakmai nyalánkság: A program amikor megkapja feldolgozásra a stringet, akkor először permutálja a teljes szót, majd ismétlés nélküli kombinációval megkeresi az ennél eggyel, kettővel stb. kevesebb betűt tartalmazó stringeket, és mindegyiket permutálja. Ehhez a számítástechnika egyik legszebb alkalmazási területét hívja segítségül, a rekurzív függvényhívást, azaz amikor egy függvény saját magát hívja meg.
A kombinációs és permutációs ciklusok megvalósítása nem saját kútfőből történt. Az elvet tudtam, de a konkrét megvalósításhoz segítség kellett. Innen vettem: http://www.ne.jp/asahi/math.edu/ami/myprog/jk_eng.htm. Az itt megadott fájlt letöltöttem, a változóneveket magyarítottam, és a programot a feladatunkhoz igazítottam. És élveztem. Jó kis kihívás volt.
Félreértettél. Nem meggyőzni akartalak, csupán egy másik megoldást mutatni a problémára. Ha nem neked, másnak. Ebben a topikban előfordul néha, hogy hamarabb megszületik a válasz, mint ahogy felmerül a kérdés. Annyit még elmondanék, nem annyira neked, inkább csak a téma lekerekítése miatt, hogy éppen az ilyen naplószerű táblák kezelésében van némi tapasztalatom. Meggyőződésem, hogy az Excel egyik nagy erőssége a kimutatás, aminek a kedvéért érdemes sok felad kiindulását naplószerűvé alakítani. Kényelmetlen frissíteni? Gondoskodni kell róla, hogy ne legyen az.
Oké, igyekszem észben tartani. Ha legközelebb szükség lesz rá, kipróbálom. Ezt most már megoldottam másképp, ráadásul a kolleginának, aki használni fogja, jobban esik az automatikus frissülés, mint ha neki kellene mindig frissíteni a kimutatást.
Lehet. Én mégis innen közelíteném meg. Úgy értettem a kérdést, hogy egy adott névhez tartozó legnagyobb dátumot-, és a hozzá tartozó megjegyzést keresed. Ennek pedig semmi akadálya. A kimutatás celláira hivatkozni lehet, akár FKERES függvénnyel is.
Ha a másik táblában be vannak drótozva a nevek, akkor is megtalálható a keresett sor.
(Persze lehet, hogy azt a táblát másképpen képzelem, mint te.)
A KIMUTATÁSADATOT.VESZ függvény többféleképpen is megkerülhető, ha kell.
Szerintem az index - hol.van függvénypáros a kimutatások esetében is "csodákra képes". Én nem szoktam használni a kimutatásadatot.vesz függvényt (csak a makrórögzítés akarja "rámerőltetni" mindig...).
Ó, én nagyon szeretem a kimutatásokat, csak nem ebben az esetben. Itt ugyanis a kapott adatokat még további képletek dolgozzák fel, amelyeket a KIMUTATÁSADATOT.VESZ függvény használatának kényszerűsége szükségtelenül körülményessé és olvashatatlanná tesz.
Igen, igen, ez jogos, csak törekszünk az eleganciára, amiért viszont a segédoszlopok használata kerülendő. Meg az, mint említetted, bevisz egy újabb hibaforrást a rendszerbe.
Példának a "Munka1" munkalapon lévő tagolások engedélyezéséhez az alábbi kódot kell betenni a ThisWorkbook eseményei közé:
Private Sub Workbook_Open() ThisWorkbook.Sheets("Munka1").EnableOutlining = True ThisWorkbook.Sheets("Munka1").Protect Password:="jelszo", userinterfaceonly:=True End Sub
Ha a felhasználó engedélyezi a makrók futását a tábla megnyitásakor, akkor a védett "Munka1" lapon tudja használni a már létező tagolásokat. Azokat módosítani, vagy újakat létrehozni továbbra sem tud.
Termézsetesen arra vigyázni kell, hogy az eredeti adatbázis ne legyen redundáns, ha ugyanaz a név és dátum többször is előfordulhat, akkor egy másik oszlopban egy darabhatöbb függvénnyel ellenőrzini kell, hogy mennyi rekord teljesíti a feltételt és csak akkor engedélyezni a fenti képletet, ha az eredmény 1
Mivel ez is olyan probléma, ami adatbázis-kezelőben csuklóból megoldható, afelé keresném a megoldást is, tehát legyen a soroknak egy elsődleges kulcsuk. Vagy egy növekvő sorszám egy rejtett oszlopban, vagy (feltéve, hogy egy ember egy nap csak egyszer) egy név & dátum összetétel ugyancsak rejtett oszlopban. Erre már könnyen lehet indexholvannal keresni. A nehézség, hogy figyelni kell a rejtett oszlopok kitöltésére is.
- a B oszlop dátumokat, hogy ki mikor volt üzemorvosi vizsgálaton
- a C oszlop az üzemorvosi vizsgálathoz kapcsolódó esetleges megjegyzéseket.
Ezt a táblázatot naplószerűen vezetjük, tehát az új sorok mindig jönnek a meglévők alá.
Egy másik munkalapon (Munka2-n) van egyfajta kigyűjtés: melyik ember mikor utoljára orvosnál. Más szóval, ha a Munka1 A oszlopából kiválasztok egy nevet, az ahhoz tartozó legkésőbbi dátum a B oszlopból. Ez eddig megvan sima beépített függvények segítségével. Amivel gondom van, az az, hogy hogyan tudnám a C oszlop vonatkozó sorának tartalmát is kinyerni. Van erre valami ötlet?
UDF-fel természetesen meg tudnám oldani, de az most nem jó, beépített függvényekkel kellene.
Szerintem csak makróval - feloldod a lapvédelmet, megcsinálod a tagolást, majd visszazárod a lapvédelmet. Esetleg makróból csinálsz tagolás szerű soreltüntetéseket + gombocskákat. A lapvédelem bekapcsolásakor megadhatod, hogy lehet-e formázni a sorokat, oszlopokat.
Az If ActiveCell.Vallue=ActiveCell.Offset(-1,0)Value Then-nél Syntax errort mutat.
A második Value elől valami megette a pontot. Helyesen:
ActiveCell.Vallue=ActiveCell.Offset(-1,0).Value Then
A B és A oszlop celláit a benne lévő értékektől függetlenül ugyanúgy kellene összevonja, mint a C celláit.
Itt könnyen adatvesztés lehet mert a cellák összevonása esetén csak a tartomány bal felső cellájának értéke marad meg. A C oszlopnál ez nem gond hiszen ot feltétel, hogy azonos legyen a cellaérték. Ha ez nem okoz gondot akkor próbáld ki ezt:
Sub osszevon() Application.ScreenUpdating = False Application.DisplayAlerts = False
Cells(Range("C" & Rows.Count).End(xlUp).Row, 3).Select Do While Not ActiveCell.Row = 1 If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row - 1, 3)).Merge Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row - 1, 2)).Merge Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row - 1, 1)).Merge End If ActiveCell.Offset(-1, 0).Select Loop
Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub