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.
Nálam vegyesen fordul elő - mármint cells és range - mivel elég sokszor oszlopszámot kapok vissza és akkor már kényelmesebb a cells(sor,oszlopszám), mint az oszlopot még betűvé is alakítani. A betűs verzió akkor játszik általában, ha cella címből tudok kiindulni.
Ezért mostanában rátértem arra, hogy cella tartalom/érték helyett inkább magával a cellával (tartománnyal) dolgozom, amiből több mindent ki lehet nyerni, ha szükséges és talán egy kicsit jobban el lehet kerülni a futási hiba keletkezését.
Én viszont nagyobb programban szívesebben paraméterezek. Tehát a "W" az nálam a program elején deklarált beszélő public oszlopnév. Ha például filmcímekkel dolgoznék, és az első 3 oszlop tartalma a sorszám, a rendező és a cím lenne, akkor ssz="A", rendezo="B" és filmcim="C", és onnan kezdve a névvel hivatkozom rájuk. És ha évek múlva hozzá kell nyúlni a programhoz, akkor véletlenül sem tudom eltéveszteni az oszlopnevet. De néha kitüntetett sorok számát is paraméterezem. Ha például többsoros a fejléc, és a 6. az első tényleges adatsor, akkor annak is neve van: elsoadatsor, így nem probléma, hogy a ciklusokat melyik sortól kezdjem szervezni. Sőt, ha egyszer be kellene szúrni a fejlécbe még egy sort, akkor sem kell végigbogarásznom a programot, hogy fordul elő a 6-os szám, mint első sor, amit így 7-re kell javítani.
Így aztán néha a program fejlécében több tucat public változó van deklarálva, és egy - az elején meghívott - függvényben pedig ezek deklarációinak felsorolása (lehetnének konstansok is, de bizonyos okokból az Excelben jobban szeretem a public-ot)
Viszont mostantól át fogok térni én is a cells(sor, oszlopnév) formára, mert az megspórolja a jelenleg használt oszlopszámmá alakító függvényem meghívását.
Egy ideje szívesebben használom a cells(sor, "W") formátumot – ha fixen, nem változóval hivatkozom az oszlopra –, mintha a W helyett 23-at írnék. Könnyebb visszakeresni, miről is van szó.
És szerintem nem is célszerű pusztán a dátum számjegyeit használni fájlnév gyanánt. pontosabban nem szerencsés azzal kezdeni. Célszerű legalább egy szövegkaraktert elétenni. Konkrét exceles példát ugyan nem tudok hozni, hogy zavarokat okozhat-e de valahogy régesrégi gyakorlat, hogy megnevezéseket általában nem kezdünk számjeggyel. Úgy tudom, hogy biológiában az állat- és növényneveknél ez kötelező előírás, személyneveknél, de más tulajdonneveknél sem szokás. A királyoknál is római szám, azaz betű volt a kezdet :-) Szóval kerülendőnek gondolom itt is.
Hát nem feltétlenül bőbeszédű a Help. De a cells-nek ezt a tulajdonságát valami miatt én kezdettől fogva tudtam és használtam, azt már ne kérdezd meg,hogy honnan, mert ha megkövezel akkor sem tudom megmondani. Nehéz is volt megszokni, hogy a Range-ben a betűszám (oszlop-sor), viszont a cells-ben a szám,betű (sor,oszlop) a sorrend. Sokszor összekevertem, néha még ma is. De ha betűd már van, akkor miért nem használod inkább a Range-et, sokkal egyszerűbb a Range("Betű" & sorszáma), mint átalakítgatni a betűt számmá.:))
Szerintem a fájlnévhez nem használhatod fel egy az egyben a dátumformátumot, mivel abban olyan karakterek vannak, amelyeket nem lehet ott használni. Azokat át kell alakítani, pl. a replace függvénnyel a pontok helyére tehetsz aláhúzást, stb.(Illetve ez nyilván dátumformátum függő, vagy használhatod a számalakját is a dátumnak, hiszen a dátumot is számként kezeli az Excel).
Hogyan lehet egy dátum változóhoz hozzáadni pontosan egy évet pl: 2013.01.01 helyett 2014.01.01 legyen. Ezt egy datdátum változóban tárolom ezt szeretném valahogyan növelni egy évvel.
A második kérdésem ehhez kapcsolódik:
Meg lehet valahogy oldani, hogy ez az új dátum legyen a makró által elmentett új fájl neve is egyeben?
És a probléma megoldva..bizonyára a szövegszámok angol formátuma ami gondot okozott...maga a pontok cseréje vesszőre nem oldotta meg automatikussan , de utána Delila javaslata vagy Érték képlet már pozítiv eredménnyel zárult.
A makro nyelve független a területi beállításoktól, internacionalista. Azt írtad, hogy az utolsó sort már meg tudod találni, erre írtam, hogy annak a sorszámához egyet hozzáadva megkapod a következő cellát a sorban.
A cellakereső makró ügyében PImre 23712-es hozzászólására gondoltam, utólag írtam is, hogy bocs mindkettőjük felé.
Igen, csak éppen azt nem gondoltam, hogy a keresés megőrzi az utolsó makróban végrehajtott keresés paramétereit a következő kézi keresésnél.
Egyébként egyre több ilyen elemi felfedezésem van. Például jó egy órája fedeztem fel a cells() függvény egyik újdonságát. Hosszú ideje használom a cells(sor, oszlop) formátumot, és mostanáig meg voltam győződve róla, hogy mindkét paraméternek numerikusnak kell lennie. Ezért ahol string formában áll rendelkezésemre az oszlop értéke, ott mindig átszámítottam azt sorszámra. De néhány hete egy helyen eltévesztettem. Akkor észre sem vettem, most döbentem meg, hogy mitől működik jól. Hát nem elfogadja mindkét változatot? És sajnos a cells() leírását nem találom a VBA helpben.
Ennél egy kicsit bonyolultabb a helyzet. Másik topikban - de lehet, hogy itt is - volt már errő szó és majdnem késhegyre menő vita alakult ki, hogyan találjuk meg az oszlop/sor utolsó celláját, amibe már írhatunk.
Ha folytonos a cellák kitöltése, akkor az End(xldown), illetve End(xltoright) +1 sor/oszlop (offset) megfelelő.
De ha vannak üres cellák közben, akkor ez már nem jó, hacsak nem a "lukakba" akarunk írni.
Ezért sokkal jobb és minden helyzetben használható a Jimmy által leírt mód. ahol a legutolsó sorból, oszlopból indulunk ki és visszafelé nézzük az első tele cellát az End(xlUp), illetve az End(xltoleft) móddal, majd erre jön a +1 sor v. oszlop.
Nem olyan bonyolult és kísérteties, mint amilyennek látszik.
A keresési feltételt úgy kell beírni, hogy "<>" & "szöveg".
Ha tehát a szöveged ="" azaz üres sztring, hogy fogod látni ezt a kifejezést: "<>" & ""? Kitaláltad: "<>". Tehát ez a két kifejezés az excelnél ugyanazt az eredményt adja, azaz nem üres feltételként értelmezi. De ugyanezt jelenti a "*" feltétel is, mivel a * a bármely karaktert helyettesítő "jóker".
Ennek ellentettje, a "=" pedig mit jelent? "Természetesen" azt, hogy üres(!) cellákat keresel.
Viszont amit te írtál be:"<>""" az a nem egyenlő két db idézőjel feltételt jelenti, olyan pedig ugye nem sok cella van/volt az oszlopban.
(Kísérletezéshez javaslom a függvény beírása után a szerkesztőlécen az fx-re kattintva előjövő párbeszéd ablakot, amibe beírhatod a különböző paramétereket és azonnal látod az eredményt.)
Nem egészen a te kérdésedre a válasz (arra Fferi tökéletes választ adott), de azért mégiscsak a kérdéssel kapcsolatos. Én, ha egy táblázat utolsó sorát akarom meghatározni makró nélkül, az alábbi függvényt szoktam használni (ha a táblázat az A oszloppal kezdődik, ha a választott kezdőcellától a táblázat végéig nincs üres cella az oszlopban, utána viszont csak üres cella van):
=darabteli(a10:a10000;"<>")+sor(a10)-1
A problémám e képlettel csak annyi, hogy nem értem a "<>" feltételt. Eredetileg nem ezt akartam beírni, de véletlenül így sikerült. És müködik. Amit meg akartam volna, azaz az "<>""", meg nem a táblázat utolsó sorát adja :))).
Megmagyarázná valaki az első feltételt? Mármint azt, hogy az excel szerint mivel nem egyenlő a nem egyenlő?