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.
Kihasználva, hogy SQLkerdes még nem szerezte meg a világuralmat (#14850-es hsz.), egy másik megoldást javaslok. Ebben egy függvénnyel megkapod az utolsó szót.
Szóköz nélküli szövegnél a teljes szót írja ki.
Function UtoSzo(szoveg As String) As String Dim sor% For sor% = Len(szoveg) To 1 Step -1 If Mid(szoveg$, sor%, 1) = " " Then UtoSzo = Right(szoveg, Len(szoveg) - sor%) Exit Function End If Next UtoSzo = szoveg End Function
' Returns the nth element from a string, ' using a specified separator character Dim x As Variant x = Split(str, sepChar) If n > 0 And n - 1 <= UBound(x) Then ExtractElement = x(n - 1) Else ExtractElement = "" End If End Function
Function WordCount(txt) As Long ' Returns the number of words in a string Dim x As Variant txt = Application.Trim(txt) x = Split(txt, " ") WordCount = UBound(x) + 1 End Function
A cella tartalmát felbontod betűkre egy MID tömbfüggvény alkalmazásával.
Minden betűre megvizsgálod, hogy az szóköz-e (IGEN=1, NEM=0), ezt az eredményt megszorzod az adott betű sorszámával és ezeknek a szorzatoknak a maximumát keresed egy MAX függvénnyel.
A kapott eredmény az utolsó szót megelőző szóköz pozíciója. Innen már csak egy sima RIGHT függvény.
Ha vannak a cellatartalom végén szóközök akkor az egész fenti cuccot nem a cella tartalmára, hanem a cella TRIM-melt tartalmára végzed el.
Hogyan lehet egy tetszőleges hosszúságú és db szóból álló cella utolsó szavát kiszedni?
Ha pl csak 3, esetleg 4-5 szóból álló celláról van szó, akkor a LEN, FIND, RIGHT segítségével ezt meg tudom oldani, ha tudom mennyi a maximális szó mennyiség.
De hogyan oldható ez meg ha nem tudom mennyi lehet a maximális szó a cellában?
Azt szereteném az exceltől kérni makróban, hogy egy megadott folderban lévő összes munkafüzetet nyisson ki, majd mindenek az első lapját másolja egy master fájlba.
De nem akar működni.
Hol rontottam el szerintetek?
Köszi a segítséget!!
--------
Sub MergeSheets()
Dim wbMaster As Workbook Dim NumbSht As Integer Dim BegSht As Integer
El kellene döntened, hogy a bemenő adatod az radián, vagy fok, amennyiben radián, akkor a képlet jó, amit kelan összefűzött, amennyiben fok, akkor a képletből töröld ki az összes "fok" szót!
Azt kell mondjam excelben ez sem halálos probléma.
Ha a worksheet-ek neve egységesítve van (pld 2011+PONT+SZÓKÖZ+HÓNAPTELJESNEVE), akkor még egy durva kinézetű OFFSET-tel is meg lehet csinálni.
Ha a worksheetek nevét nem lehet valamilyen logikai lánc alapján előállítani akkor meg ott van régi barátunk az UDF.
A 2011. január 5-e viszont valszeg szíven döfi a rendszert, mert ahogy látom az egy teljesen más file-ban van (mármint a 2010 decemberi adat). Bár... ;-)
Így néz ki a táblázat. Amint látjátok az első fülre egy összesítőt tettem, ami gyakorlatilag ugyanez a táblázat csak leegyszerűsítve, ebbe kellene az utolsó 20 nap eredménye. DE jogos a kérdés, mi van ha február 5-én szeretném megtudni... itt kezdődik a baj. A táblázatom egy évre van bontva ahogy a képen látszik, tehát pl febr 5-én január 15-ig kellene hogy visszaszámoljon, viszont a hónapok különböző hosszúságúak... pfff. :(
Szerintem ez nem jó, mert csak a hónap utolsó 20 napját összesíti.
A megoldásba be kell építeni a TODAY() függvényből vett adott napi napot és abból levonni 20-at (ha több mint 20, egyébként 1-től kezdeni az összesítést).
A megoldás az OFFSET függvény használata, amit úgy paraméterezel be, hogy egy dinamikusan változó tartományt adjon vissza. Az OFFSET-tel "létrehozott" tartományt elnevezed (named range) és a Chartod bemeneti adata ez a Név lesz.
Vigyázz, van egy trükk (bug) amikor a chart bemeneti adatának név hivatkozást használsz, szépen megmutatja a videóban (kell a név elé a munkalap neve).
Sok sikert. Ha van kérdésed a videó után, vágd hozzánk nyugodtan.