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.
Az 1:1 a teljes első sorra hivatkozik, és így akkor is működik a képlet, ha a munkalap Excel >=2010-ben van megnyitva (XFD az utolsó oszlop), vagy korábbiban (asszem II az utolsó).
A B4 értéke 2014-01-01, a munkalap neve Medical. Azért ilyen bonyolult, mert a felhasználónak hónapról hónapra odébb kell másolnia a képletet, de ennél többet nem lehet tőle elvárni (pl. dátumcsere a képletben).
Ha leveszem az INDIRECT függvényt (tehát csak a különböző értékek és karakterláncok összefűzése marad), annak ez az eredménye:
Ha ezt kikopizom, beillesztem értékként és elé teszek egy = jelet, akkor működik, ergo megvan a hivatkozott munkafüzet és munkalap, értelmes a cellahivatkozás és van benne érték. Ha a fenti karaktersort becsomagolom egy INDIRECT-be, megint csak #REF! az eredmény. Mi lehet a hivatkozásban, amit az INDIRECT nem tud megemészteni?
Excel 14.0.7116.5000 (64 bit), Office Pro Plus 2010, Vista x64
- Excel konfigurációban átállítod a decimal separatort
Default:
Felhasználói beállítás
- Operációs rendszerben átállítod
- a számokat CStr utasítással átkonvertálod stringgé és azon hajtod végre a műveletet. Ekkor a szám felhasználásakos VAL utasítással visszakonvertálod.
Mint írtam, a probléma abból adódik, hogy a számformátumban a VBA a tizedespontot használja, míg a cellákban a magyar beállításnak megfelelő tizedesvessző kell, hogy megjelenjen. Ezért a makróból a számban levő pontot nem tudja vesszőre cserélni értelmesen. Addig működik a csere, amíg nem írod ki a cellába.(Engem is ez vezetett félre az első válaszomban.)
Viszont a val a pontot értelmezni tudja és ennek megfelelően a jó számértéket írja ki a cellába a magyar formázásnak megfelelően vesszővel.
Beírod a számokat az A oszlopba, melléjük a B1 és B2 cellába, amit fFeri javasolt, a B2 cellát lemásolod a szükséges sorig.
A tartományban állva Ctrl+r bill. kombinációra a két kitöltött oszlopod – az Ecxeled verziójától függően – tartománnyá, vagy listává alakul. A kettő ugyanaz, csak a megnevezésük más.
Most már beírhatod a C1 és C2 képletét.
Mikor bővíted az A oszlopot új cellával, a B képletét automatikusan lemásolja, és ennek megfelelően változik a C1 és C2 értéke.
Egyenlőre úgy néz ki, hogy nem találunk olyan beépített képlet(eke)t, amellyel megoldható lenne a feladat.
Viszont semmi sem gátolja meg szerintem, hogy a segédoszlopodat előre kitöltsd a képlettel. Az általam javasolt megoldással ez nem fogja befolyásolni az eredmény helyességét:
Feltételezés:
A számok az A oszlopban vannak.
A segédoszlop a B oszlop.
Az eredmény a C1 és C2 cellába kerül.
B1 cella képlete: =HA(ÜRES(A1);0;HA(A1>0;1;-1)) vagy =Előjel(A1)
B2 cella képlete: =HA(ÜRES(A2);0;HA(A2>0;HA(A1>0;B1+1;1);HA(A1<0;B1-1;-1))) és ezt a képletet másold(húzd) végig a B oszlopon (akár teljesen végig, de ha van információd, hogy hány sor lesz, akkor attól valamivel lejjebb).
A C1 cella képlete: =Max(B:B)
A C2 cella képlete: =Min(B:B)*-1
Természetesen megoldható, hogy a segédoszlopok ne legyenek láthatóak (elrejthetők), illetve az is hogy ne azon a munkalapon legyenek, amelyikre beolvasod az adatokat.
Ebben az esetben a képletekben a munkalap nevét is be kell írni (pl. Munka2!A1)
A képlet helyes működéséhez még az szükséges, hogy az A oszlop csak a beolvasott számok, illetve üres cellák legyenek.
Remélem, sikerült érthetően leírnom, próbáld ki, hátha így megfelel.
Köszönöm mindenkinek az idejét, amit a problémámra fordítottatok!
Meg kell még emésztenem az írottakat, mert nem igazán dolgozom excellel (ilyen szinten).
Segédoszloppal nekem is sikerült, de mivel ez "automatikusan" töltődő tábla lenne, az nem megoldás, hogy segédoszlopot használok, mert akkor ki "húzza" a képleteket a beírt sorok után? :-)
Persze ha van olyan beállítás ,vagy lehetőség, hogy ha egy új sor íródik be a táblába, akkor a segédoszlop is kitöltődjön (a képlettel) vele együtt, akkor az is jó lenne.
A makróktól azért tartok egy kicsit, mert mi van, ha letiltják őket?
Set md = ActiveSheet.UsedRange.Find(what:=".", lookat:=xlPart, LookIn:=xlValues) mdcim = md.Address Do While Not md Is Nothing md.Value = Val(md.Value) Set md = ActiveSheet.UsedRange.Find(what:=".", lookat:=xlPart, LookIn:=xlValues, after:=md) If md.Address = mdcim Then Exit Do Loop
end sub
Az a probléma, hogy az excel a makrókban csak a pontot ismeri fel tizedes vessző jelölőnek. A val függvény is így működik. Amikor a cella értéket átalakítod a val függvénnyel, automatikusan a magyar beállítású formátum fog előjönni a cellában.
A makró - mint kiderült - nálam is "hepciáskodik" és nem működik helyesen, viszont a "kézi" keres - cserél igen. Ha bekapcsoltam a makrórögzítőt a "kézi" keres-cserélnél és a kapott makrót ráengedtem, akkor szintén nem működött. Olyan, mintha a pontot nem vesszőre, hanem üres sztringre cserélné.
Van pont, nem képlettel számolódik. Amúgy a területi beállításoknál minden alapértelmezetten van: tizedes-->vessző. Ha ráállok, akkor is ugyan azt az értéket adja ki felül. Sajnos nekem sem sikerült sehogy sem rájönnöm a problémára, ezért eg kicsit farmucibb megoldást találtam ki ÖSSZEFŰZ képlettel.
A macro igy már lefut, de ugyan az a gond, mint ami a kiindulásnál volt. Valamiért az istenért sem akarja kicserélni a pontot vesszőre.
Nem lehet, hogy azzal lehet gondja, hogy a pont után túl sok számjegy van. Más sheetekben, ahol pl 302.43, 11.43 stb vannak, tehát kevesebb számjegy a pont után, ott nincs gond az átalakítással.