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.
- 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.
Range("A1:A5").replace(mit,mire), vagy akár sheets("Munka1").usedrange.replace(mit, mire).
Figyelem, ez nem a normál replace, hanem a range.replace, ahol nem kell megmondani, hogy miben cseréljen (illetve az adott range értékeit mindet végignézi), csak azt, hogy mit mire kell cserélni.
Makróban akarok kicserélni karaktert egy számból, hogy a következő legyen: 1.4235 --> 1,4235
tehát a pontot vesszőre. A gondom, hogy míg ha kézzel az excelben csinálom,akkor gond nélkül kicseréli, addig a makroban nem tudja behelyezni a vesszőt és a következő eredmény lesz: 1.4535 --> 14535
Segítsetek már, mert nem bírom feltörni ezt a diót. (Még mindig a tegnapi feladaton törpölök.)
A példában H2-től indul a pozitív és negatív számok sora lefelé. Az alábbi tömbképlet megmondja, hogy egy pozitív szám után hányadik szám lesz a következő negatív érték (feltételezve, hogy 500-nál hosszabb pozitív sorozatok nem fordulnak elő).
{=HOL.VAN(0;OFSZET(H1;SOR(A1:A2000);0;500;1);-1)}
A képlet eredménye ez:
1 3
1 2
1 1
-1 #HIÁNYZIK
1 2
1 1
-2 #HIÁNYZIK
-2 #HIÁNYZIK
-1 #HIÁNYZIK
-1 #HIÁNYZIK
-1 #HIÁNYZIK
1 4
1 3
1 2
1 1
-1 #HIÁNYZIK
Jól láthatóan a jobb oldali oszlopból a legnagyobb számot kellene kiválasztani, az lenne a végeredmény, de nem megy. A
nem működik, mert a #HIÁNYZIK értéket nem tudja kezelni. A MAX helyett a NAGY sem megy, és ha beleteszek valami hibaellenőrző függvényt, pl. HA(HIBÁS(kif1);0;kif1) , akkor is rossz érték jön ki. Van valakinek ötlete?
Az alábbi függvényt Jimmy ihlette, amikor tbandó kérdésére megírta a tömbfüggvény alapot (24493).
Az eredményt egy 2x2-es tartományba írja ki, tömbformában kell bevinni .
Function szamszamol(ByRef rng As Range) As Variant Dim posmax As Long, posx As Long, negmax As Long, negx As Long, cl As Range Dim szamos(2, 2) As Variant posmax = 0 negmax = 0 posx = 0 negx = 0 For Each cl In rng.Cells If cl.Value > 0 Then posx = posx + 1 negmax = WorksheetFunction.Max(negmax, negx) negx = 0 Else posmax = WorksheetFunction.Max(posmax, posx) posx = 0 negx = negx + 1 End If Next szamos(1, 1) = "Legtöbb egymás utáni pozitív szám:" szamos(1, 2) = "Legtöbb egymás utáni negatív szám:" szamos(2, 1) = WorksheetFunction.Max(posmax, posx) szamos(2, 2) = WorksheetFunction.Max(negmax, negx) szamszamol = WorksheetFunction.Transpose(szamos) End Function
Nyilván többféle megoldása van a feladatnak. Kérdés, hogy megéri-e felkutatni az összeset, ha már van egy, ami működik.
Csak azért küldtem be a sajátomat, mert mire Delila megírta az övét, már az enyém is készen volt. Meg azért, mert jelentősnek gondoltam a sebességbeli különbséget. Most már csak az hatna meg, ha valaki makró nélkül, csak a beépített függvényekkel megoldaná, mert nekem nem sikerült.
Pont ebben a pillanatban végeztem a saját megoldásom tesztelésével. Nekem is csak udf megoldásom van, alapjaiban ugyanaz, mint a Tiéd, csak egy jelentős különbség van, amitől némileg gyorsabb lesz a lefutás. Hátránya viszont, hogy csak 65536 sorig működik.
A kérdező pedig nem írta le, hogy mi van akkor, ha a szám nulla.
Function MaxNegative(Rng As Range) As Long Dim Arr, i As Long, CountX As Long, MaxX As Long Arr = Application.Transpose(Intersect(Rng, Rng.Parent.UsedRange).Value) For i = LBound(Arr) To UBound(Arr) If Arr(i) > 0 Then CountX = 0 ElseIf Arr(i) < 0 Then CountX = CountX + 1 If CountX > MaxX Then MaxX = CountX End If Next MaxNegative = MaxX End Function
Function MaxPositive(Rng As Range) As Long Dim Arr, i As Long, CountX As Long, MaxX As Long Arr = Application.Transpose(Rng.Value) For i = LBound(Arr) To UBound(Arr) If Arr(i) < 0 Then CountX = 0 ElseIf Arr(i) > 0 Then CountX = CountX + 1 If CountX > MaxX Then MaxX = CountX End If Next MaxPositive = MaxX End Function
Function HányPoz(ter As Range) Dim Db, darab As Long For Each Db In ter If Db > 0 Then darab = darab + 1: If darab > HányPoz Then HányPoz = darab Else darab = 0 End If Next End Function
Function HányNeg(ter As Range) Dim Db, darab As Long For Each Db In ter If Db < 0 Then darab = darab + 1: If darab > HányNeg Then HányNeg = darab Else darab = 0 End If Next End Function
Így van, csak ekkor nem kell állandóan átkapcsolni a VBA-ra.
Viszont csinálhatod úgy is, hogy nem function-nak, hanem sub-nak írod meg és csak egy változónak adod az Activesheet.Usedrange.Address értékét, de nem csinálsz vele semmit tovább.
Valahogy így:
Sub hh() d = ActiveSheet.UsedRange.Address End Sub
Akkor a makróhoz rendelhetsz egy billentyűt és ezzel egyszerűen resetelheted a Ctrl+End számára a területet.
Igen, ez működik. Bár a mechanizmust nem értem, hogy miért javul meg a vba-s parancs futtatása után. Ez u.az elvileg mint amit a 24466-ban írtál (köszönöm), csak ebben a udf-ben a volatile átszámolja az egészet újra.
Azért vicces, hogy egy integrált funkció működését ilyen trükkel kell úgymond visszaállítani. Mintha szándékosan nem arra programozták volna - amire egyébként a felhasználó szeretné használni.
Ismerem a lehetőségeket makróval egy tartomány jobb alsó sarkának megkeresésére, de ezzel sokkal egyszerűbb lenne - így sajnos nem atombiztos.
Most még gyorsan kipróbáltam, hogy ha a d tömböt Variant típusúként deklarálod, (Dim d(1 To 3) As Variant) akkor még az is elérhető, hogy az egyik output szám, a másik szöveg, a harmadik meg pl. Boolean, stb.
Azért, mert próbálkoztam, és az első kísérleteimnél valami olyan hibaüzenetet kaptam, amiből arra gondoltam, hogy talán nem látszik a függvény, vagy ilyesmi. Tudom, hogy nincs különbség, a public és a semmi között, mert alapértelmezésben public minden, hacsak másképp nem rendelkezel. De azért beleírtam, hátha. Aztán persze kiderült, hogy nem ez a baj, és továbbléptem, a public meg bent maradt.
Jimmy! Nagyon köszönöm. Idáig ugyanis úgy oldottam meg a többeredményes függvényeimet, hogy ahány részeredmény kellett belőlük, annyiszor futtattam eltérő neveken, amikben csak a kimenet változott, de ez jelentősen lassította a nagyobb táblázatok kiszámítását. Szóval sokat segítettél a formulákkal. Egy kérdésem lenne csak velük kapcsolatban. Miért Public-ként deklaráltad őket? Milyen előnye van a Public-os fgv deklarálásnak a simához képest. Kipróbáltam ugyanis sima deklarációval is a fgv-ket, ugyanúgy futottak.
Amit a korábbi hozzászólásomban (24471) javasoltam, az alábbiak szerint módosítom (így már lesz hibajelzés).
Function területe() Application.Volatile 'MsgBox "Munkalap használt területe: " & ActiveSheet.UsedRange.Address területe = ActiveSheet.UsedRange.Address End Function
Ha beirod pl. az A1 cellába a képletet =területe(), akkor az mindig a munkalap által aktuálisan használt tartomány címét fogja mutatni.
Ha a példádban szereplő cellát törlöd, akkor azonnal változik a cella értéke és a Ctrl+End is helyesen működik.
A tömbképletes problémakör kapcsán jutott eszembe az a kérdés, hogy lehet-e olyan udf függvényt csinálni, ami több eredményt is hajlandó kiírni? Hasonlatosan mondjuk a Lin.Ill-hez, amivel több korrelációs paraméter is kiíratható. Hogy lehet ilyen függvényt csinálni?
2010-ben az ofszet helyett eltolás a függvény neve.
A darab2 függvény az oszlopban bármilyen adattal kitöltött mezők darabszámát adja, ezért kevesebb adatot mutat az érvényesítés, ha üres cellák is vannak az utolsó kitöltött cella fölött.
Jobb megoldás, ha kijelölöd a jelenlegi A1:A22 tartományt, a Ctrl+r tartománnyá alakítja. Még mindig kijelölve a szerkesztőléc bal oldalán, ahol a kiválasztott cella címe látszik, megadod a nevet, és ezt írod be (illetve választod ki F3-mal) az érvényesítésben.
Egyébként érdekes, mert a listák forrástartományai mindenhol tartalmaznak üres sorokat, cellákat, aztán van, ahol működik az üres cellák mellőzése kapcsoló, van ahol nem (pl.: szolggk lap, in lap).
"ehelyett lehetne az ofszetes névadás, vagy még jobb a tartományt táblázattá alakítani. Mindkét esetben a bővítés, törlés után a tartomány követi az oszlopban lévő adatok darabszámát."
A második mondatot értem, tetszik is a lehetőség. Az első mondat értelmében viszont nem vagyok biztos, lehetne azt egy kicsit bővebben? :)
Mondjuk pont a szolggk annyira nem fontos, mert az éles táblában van tizenpár szolgálati kocsi, viszonylag konstans állomány, de van olyan segédtábla, ahol hasznos a bővítési lehetőség.
Volt itt szó a tartományok rugalmasságáról. Pl. a szolgálati gk. érvényesítése most egy halom üres (meg nem nevezett) gk-t is felhoz, ehelyett lehetne az ofszetes névadás, vagy még jobb a tartományt táblázattá alakítani. Mindkét esetben a bővítés, törlés után a tartomány követi az oszlopban lévő adatok darabszámát.
Az adatérvényesítés "érdekesen" működik a 2010-ben. Lehetséges közvetlenül hivatkozni más munkalapon levő tartományra is, míg a korábbi verziókban ez nem így volt.
Ezen a fórumon is volt már erről szó, most hirtelen nem találom mikor.
Azt hiszem az a megoldás, hogy az érvényesítési tartományt el kell nevezni és névvel kell hivatkozni rá az adott cella érvényesítési szabályában.
Ismét egy érdekességgel jönnék. Nem volt még energiám kiszedegetni a nemnyilvános részeket, így mintafájl nincs, de belefutottam egy egészen érdekes jelenségbe. Adott egy soklapos excel-tábla, tulképp egy kitöltendő űrlap az egész egy nagy rakás képlettel és legördülős-kiválasztós menükkel súlyosbítva. Kiküldetés-elrendelő alapvetően. Úgy műxik, hogy beleírod, hogy ki megy, hová megy, mivel megy (saját, kocsi, repülő, tengeralattjáró), mennyi útielőleget vesz fel, hol fog megszállni, stb. Ez idáig két munkalap. Ezt a táblázat összesíti, átemeli egy elszámolásos lapra és ad egy összeget, hogy mennyibe fog kerülni az út. Két további munkalapon lehet rögzíteni a valósan felmerült költségeket (magánszemélynél, partnerszervezetnél), majd ezt is átveszi az elszámolásos lapra, kivonja a felvett előlegből a valós költséget és megadja, hogy kell-e még valamit fizetnie annak, aki utazott, vagy jár még neki vissza zsé, esetleg nulszás. Eddig faszányosan működik is minden, számol ahogy kell.
Viszont, ami érdekes, az adatérvényesítős legördülő menük nem minden gépen működnek. Eredetileg 2010-es excelben készült a tábla és addig minden szép is, amíg 2010-zel is van megnyitva (mondjuk hálózati meghajtóról). Abban a pillanatban, ahogy 2007-essel próbáljuk megnyitni, egyszerűen nyoma vész az összes legördülőnek. Kipróbáltam fordítva is, visszaépítettem az adatérvényesítéseket 2007-ben. Így a 2007-ben már működik és ha 2010-ben megnyitom, ott is. Viszont probléma itt is akad, mert ha rámentek a fájlra a 2010-ben, akkor a 2007-ben ugyanazt a fájlt visszanyitva ismét nem működnek a legördülők.
Function területe() Application.Volatile MsgBox "A munkalap által használt terület: " & ActiveSheet.UsedRange.Address 'ActiveCell.Value = ActiveSheet.UsedRange.Address End Function
Ezután egy tetszőleges cellába (én az A1-be írtam be) írd be: =területe()
Minden alkalommal, amikor beírsz egy cellába, akkor kiírja munkalap által használt terület címét egy üzenetben.
Ha törlöd a legutolsó celládat a javasolt tesztedben, látni fogod, hogy már nincs benne a területben és a Ctrl+End is jól működik utána.
Ha nem akarod hogy üzengessen, akkor cseréld fel a kommentelt sorokat:
Function területe() Application.Volatile 'MsgBox "A munkalap által használt terület: " & ActiveSheet.UsedRange.Address ActiveCell.Value = ActiveSheet.UsedRange.Address End Function
Ekkor nehezményezni fogja, hogy körkörös a hivatkozás, erre mond azt, hogy OK.
Most nem üzenget tovább, de a Ctrl+End jól fog működni. Igaz, a függvényt tartalmazó cellában az érték hiba jelenik meg, de ez ne zavarjon.
Vagyis az ÉS függvény nem soronként hasonlítja össze a két tömböt, hanem a két tömb elemeinek unióján végez el egy logikai ÉS műveletet, és eredményül egyetlen értéket ad vissza.
Ahhoz, hogy a DARAB függvény össze tudjon számolni dolgokat, ahhoz neki egy tartomány vagy tömb kell bemenő paraméternek.
Tehát arra volna szükség, hogy az
ÉS(a1:a20>b1:b20;b1:b20>0)
képlet eredménye egy tömb legyen. Na ez az, ami nem teljesül.
Miért nem?
Teszteljük a részeket egyenként. Kijelölöm D1:D20-at, beírom az alábbi képletet:
{=A1:A20>B1:B20}
D1:D20-ban megjelenik a helyes eredmény-tömb. Tehát a sima reláció-vizsgálat tömböt ad ki.
Gondolom, ezek után a másik összehasonlítás is működni fog, de azért letesztelem azt is.
Kijelölöm E1:E20-at, és beleírom: {=B1:B20>0}
E1:E20-ban megjelenik a helyes eredmény-tömb.
Kijelölöm most a G1:G20-at, és beírom: {=ÉS(D1:D20;E1:E20)}
Hát ez nem pont azt hozza, amire számítok. Ha terv szerint működne, akkor
D1-et E1-gyel hasonlítaná, és az eredmény menne G1-be
D2-et E2-vel hasonlítaná, és az eredmény menne G2-be
stb.
Ehelyett mindenhol HAMIS értéket látok.
Aztán próbálkozok még egy kicsit az értékek módosítgatásával, és arra jutok, hogy G1:G20-ban az összes cella értéke mindig ugyanaz, ha az egyik változik, akkor változik a többi is. IGAZ értéket csak úgy tudok beletenni, ha D1:E20 tartományban minden cella értéke IGAZ.
Vagyis az ÉS függvény nem soronként hasonlítja össze a két tömböt, hanem a két tömb elemeinek unióján végez el egy logikai ÉS műveletet.
Nekem nem sikerült az ÉS-t bemenő paraméternek sem elfogadtatni. Felraknál rá egy példát?
Másfelől nem értem azt sem, hogy miért fontos az, hogy ÉS nem ad tömböt eredménynek. Milyen eredménytömbre gondolsz? Én nem látom hogy milyen tömbben kéne az eredménynek megjelennie.
2010-es. Tényleg nem megy nálam - illetve sokan leírják a problémát sok helyen. Erre ajánl az ms egy ingyenes excel bővítményt, ami ezt kitakarítja. (Nekem nem tetszett...)
Viszont ha több "üres" cella is van az értékes adatok és a "lastcell" között, akkor bizony az adott sorokat és oszlopokat fizikailag törölni kell - persze az adattartományon kívüli területre értem.
Segít a nyomtatási kép is (pl. activesheet.printpreview a makróban) és ha jó amit látsz, akkor ki is nyomtatható (sőt előtte beállíthatod amit nem jól látsz.
Másrészt viszont a Pagesetup.Printarea tulajdonságot is lehet állítani ám.
A PDF nyomtató alatt a PDF Creatort érted? Mert az rajta van a gépemen, de mivel más okból volt fontos feltelepítenem, így eszembe se jutott, hogy próbanyomtatásra is alkalmas lehet. Köszi a tanácsot.
Ez talán analóg az xllastcell gyakran meglepő eredményeivel, amit ha jól emlékszem, itt is kitárgyaltunk. És úgy dereng, hogy a normál halandók szerinti eredményért nem az r30 cella tartalmát kell törölni, hanem magát 30. sort. Esetleg elég lehet csak az r30 cella delete-je.
A rejtett tartományok közül idáig csak a Nyomtatási terület elnevezésű szívatott meg jó párszor. És mivel ritkán nyomtatok, még ma sem vágom igazán, hogyan lehet elkerülni, hogy esetenként ne pazaroljak el egy csomó papírt, míg végül sikerül :))).
Nem csak az autoszűrő, hanem az advanced/irányított/speciális szűrő is "fixálja/módosítja" a szűrt tartományt. Emlékezz vissza, ha egy szűrés (nem auto) után ismét szűrni szeretnél, az excel a párbeszéd ablakban felajánlja a szűrendő tartományt és a szűrő tartományt is. Szerintem itt is inkább az irányított szűrő volt a hibás (mivel van kritérium tartomány is).
A megoldásra részben véletlenül, részben tudatosan jöttem rá, illetve régebbi emlékeimet idéztem fel.
A véletlen: meg akartam nézni, hogy a szűrés is úgy viselkedik-e mint a rendezés és kiderült hogy nem. Aztán az is kiderült, hogy a szűrés után a rendezés is "helyre jött".
A neveket már előtte megnéztem, utána pedig láttam, hogy módosul a FilterDatabase-hez tartozó tartomány.
A rejtett név azt jelenti, hogy a névkezelőben nem jelenik meg a név és a hozzá tartozó tartomány, mivel ennek a tartalmát és hivatkozását csak a rendszer változtathatja meg a műveleteken keresztül (built-in name az angol verzióban, de nevezheted akár rendszer által kreált névnek is), azaz read-only a tartalma. Miért pont a FilterDatabase ilyen? Talán Redmond tudja....
Szerintem máskor is találkozhattál volna a jelenséggel. Itt azért tűnt fel, mert valami miatt - pl. sorok beszúrás - nem az adattábla első sorában kezdődött az excel szerinti adatlista. (Talán "játszottál" az irányított szűrővel valamit esetleg és nem az egész táblát használtad, csak egy részét.)
Egyébként az alábbi módon megnézheted a többi Filterdatabase-t is:
for each nm in activeworkbook.Names:?nm.name,nm.referstorange.address(external:=true):next
Ezzel láthatod, hogy az egyes munkalapokon hol volt az utolsó szűrőzött "adatállomány" helye.
Üdv.
Ps.
Egyébként, ha adatot akarsz beolvasni MS Query-vel Excel munkafüzetből és beállítod, hogy látsszanak a rendszertáblák is, ott is láthatod pl. a FilterDatabase -t is.
Kösz. Bravúros megoldás, sosem jöttem volna rá. Én csak odáig jutottam mint Eredő Vektor javasolja itt fölötted, hogy átmásoltam a táblázatot egy új füzetbe, ahol már normálisan müködödött. Mindazonáltal nem értem ezt az autószűrős fixálást. Milliószor használtam már az autószűrőt és még sosem csinált semmi galibát. (Vagy csak nem vettem észre?) Ezt a lapot egy 7 lapos füzetből vettem át, amelyben néhány lapon használtam ugyan az autószűrőt, de érdekes módon azokon a lapokon a rendezési utasítás normálisan jelöli ki a táblázatokat, egyedül ez a lap a gubancos.
És végül 2 kérdés:
Honnan tudtad, hogy a szűrő bekapcs/kikapcs resetálja Filterdatabase-t? Mert én még ha meg is találtam volna a fixálást, akkor sem tudtam volna megszüntetni.
Mi az hogy rejtett név? Még sosem hallottam ilyenről?
Ha megnézed a munkalap által használtnak tekintett tartomány címét VBA -ban (pl. activesheet.usedrange.address), a Ctrl+End ugyanennek a tartománynak az utolsó cellájára ugrik.
Attól, hogy te egy cellát üresnek látsz, még nem biztos, hogy az excel szerint is az. Pl. nemrég volt éppen ezen a fórumon egy jelenség, amikor üres(nek látszó) cellákat "helytelenül" rendezett. Ott az derült ki, hogy egy kifejezés eredményeként "" (azaz üres sztring) "csücsült" a cellában, ami semmi más módon nem volt kideríthető, csak az üres függvénnyel.
Ugyanígy a formázott cella is, ha nem látszik is valami miatt a formázása (pl. csak a tartalma van törölve), akkor is a használt tartomány részét képezi.
Tehát ha a Ctrl+End nem oda ugrik, ahová szerinted kellene, gyanakodj, hogy ott nem üres cellák vannak valahol, csak annak látszanak. (Nyilván, ha úgy gondolod, hogy ott nem "kell" adatnak lennie, töröld a "gyanús" sorokat/oszlopokat és helyreáll a "rend".)
Ha nem bug, akkor valami lehet ott az első négy sorban, amit nem látsz - de felülbírálja a sorbarendezés tartományát...
Ennél az esetnél is az lehet a metodika, mint amikor nyomsz egy ctrl+end-et - és "Kenyába" ugrik a kurzor. (Általánosságban beszélve, nem ennél a munkafüzetnél) A valójában használt tartomány környékét törölheted bárhogy - nem az utolsó kitöltött cellára fog ugrani - mert a cellákban maradnak olyan információk amiket nem látsz, de "Ő" igen.
Viszont ha az egészet átmásolom egy szűz munkalapra, akkor meggyógyul. A fent leírt jelenség is - és a Tiéd is.
Van egy táblázatom. Sorba akarom rendezni. Belépek a táblázatba. Majd: Adatok/Rendezés és ekkor a legnagyobb meglepetésemre a rendezendő tartománynak nem a teljes táblázatot jelöli ki ahogy illenék neki, hanem a 4. sorától kezdi. Hogyan lehetne az elállítódást resetálni?
A manuális táblázatkijelölés: oké, de a rákövetkező automatikus megint a 4.sortól kezdi.
A táblázatbeli 'activecell.currentregion.select' szintén korrekt kijelölést ad.
Új füzet nyitás: Normális kijelölés. Tehát a problémás füzetben sikerült valamit elállítanom. Esetleg valakinek valami ötlete, hogy mit? De fontosabb lenne a resetálás módja.
Ötleteket szeretnék kérni arra, hogy mit írjak az alábbi vba kódhoz vagy mit írjak át, hogy a makró által készített mappát a megadott névvel BIZTOSAN a D:EZOVERZUMsz mappába mentse?
Néha gondol egyet és a C: Dokumentumokba menti el. Nem értem miért.
Az excelben a következőket kellene végigcsinálnod:
Az eredeti adataidat másold át egy új munkalapra (legyen ez a Munka2) és a másolaton dolgozz - de lesz még egy harmadik munkalap is mindjárt, úgy gondolom.
Én a neveket és a közterület megnevezését biztosan összeraknám egy oszlopba, ezért írtam, hogy lesz harmadik munkalap:
legyen ez a Munka3, a továbbiakban ide dolgozunk: (A képleteket először a második sorba írd be végig és utána húzd le, ameddig adatod van a Munka2-ben.)
pl. Munka3 A2 cellába: = Munka2!A2 & " " & Munka2!B2. Ezt a képletet végighúzod az A oszlopon.
Munka3 B oszlop üresen marad!
Munka3 C oszlop = Munka2!$C$1 végig az egész oszlopon
Munka3 D2 cella = Munka2!C2 végig az egész oszlopon
Munka3 E oszlop =Munka2!$D$1 végig az egész oszlopon
Munka3 F2 cella =Munka2!D2 végi az egész oszlopon
és így tovább.
Ennek az eredménye, hogy minden adat előtt ott lesz a fejléce az előző oszlopban (ha jól csináltad, figyelj a $ jelekre).
Ha ezt végicsináltad az egész táblázattal, akkor formázd meg:
Első oszlop félkövér, a fejlécekkel teli oszlopok dőlt betű. (Ezeket egyszerre is ki tudod jelölni a ctrl-t nyomva tartva lépegetve csak a fejléc oszlopokon végig.)
Kijelölöd a táblázatot, kezdőlap - formátum - automatikus oszlopszélesség, másolás.
Most lényegében megvan a word listád. Még szépítheted: a tabulátorjelet másra cserélheted, de vigyázz, az címsorokban is van tabulátorjel (Ha bekapcsolod a bekezdésjel megjelenítést, akkor láthatod.)
Szerintem megcsinálni gyorsabb, mint leírni volt. (Pláne, hogy az első leírásomat elküldte a semmibe a blogmotor és kezdhettem előlről).
Az első sor félkövér még megoldható olyan módon, hogy az Excelben megformázod, majd a beillesztésnél a HTML formátumot választod.
Utána kijelölöd a táblázatot és megkeresed a szöveggé alakítást (nekem a táblázateszközök - elrendezésben van).
Ezután már "játszhatod" a keres-cserél műveleteket, ahogyan az előbb írtam.
Azt még nem tudom, hogy a fejrovatokat hogyan lehetne átvariálni, de ezt szerintem excelben sokkal könnyebb, még dolgozom egy kicsit rajta, hátha sikerül gyorsan.
Lenne egy nagy gondom, amit meg kellene oldanom sürgősen.
Van egy excel táblázat, melynek adatait (sorait) Word oszloppá kellene alakítani.
Tudom van egy olyan, hogy Irányított beillesztés s transzponálás, de majdnem 3000 adatot kellene áttenni egyenként. Hogy lehetne ezt gyorsan "automatizálva" megoldani?
Hála neked, sikerült visszahozni a magasság beállításával. Köszönöm a segítséget!
Most bennthagyok egy makrót, ami a magasságot visszaállítja, így ha később megint elveszne, akkor könnyen tudom majd javítani. Nem akarok telhetetlen lenni, ez így már működőképes, de ha esetleg van arra ötlet, hogy hogyan lehet ezt a problémát a jövőben elkerülni, azt is szívesen fogadnám.
Igen, azt írta, hogy látszik. szóval elvileg ott kéne lennie. Hogy "elbújt-e" valahol azt már csekkoltam. Most a mérettel lehetne szórakozni. Mivel nem látom amgát a vezérlőt, jól gondolom, hoyg a méretét is csak egy másik makróval tudnám állítani?
Van egy olyan ötletem, hogy egy makróval kijelölném az "elveszett" vezérlőt és bemásolnám egy adott cellához. Ezzel elvileg azt akarnám ellenőrizni, hogy tuti itt van-e valahol.
Megírtam a makrót hozzá, de sajnos nem hoz eredményt. Mit gondolsz, nem lenne célszerű ebben az irányban keresni a megoldást? Esetleg másolás helyett mozgatással?
Ha azt mondja, hogy látszik, akkor két dolog lehet:
- vagy a méretével van gond,
- vagy "elbújt" valami mögé.
Nézd meg lsz. a top, a width és a height tulajdonságokat is, illetve adj ki rá egy bringtofront parancsot. Ha soronkénti végrehajtást csinálsz, akkor ezt az msgbox után van értelme megpróbálni.
Ha nem látszik, akkor a visible tulajdonságot állítsd true-ra.
Így már lefutott, köszönöm. Annyi derült ki, hogy elvileg valóban itt kellene, hogy legyen (ahogy az a makróim felsorolásában is benne van), a képernyőn mégsem látszik....
Már a többi képet is odébb húzogattam, hogy megnézzem, nem rejtőzik-e valameylik mögött, de sajnos nem.
Én is úgy gondolom, hogy ez nem excel probléma, Köszönöm az ötletet, derengett, hogy volt dátum szeparátor XP-ben, de nem találom a megadott helyen. Nincs a Dátum tab-en ilyen mező. Az ötletet köszönöm, keresgélek ezen a nyomon a neten.
Küldök képet a Terület és Nyelv jelzett párbeszédpaneljéről.
Elvileg nem törlök sorokat, csak elfedek. A munkalapon belül több helyen is rejtek el sorokat, ahol csak sima képek vannak. Elvileg ezzel a beállítással a kép is eltűnik, különben csak lejjebb tolná az adott objektuomot és így örökké látható maradna, hiába rejtenék el sorokat.
Az általad írt makrót beillesztettem úgy, ahogy van, de sajnos hibaüzenetet kaptam.
Ez nem biztos, hogy Excel probléma. Nézd meg a Windowsod Területi és nyelvi beállításait. Ezen belül a Testreszabás->Dátum fül alatt, hogy mi van beállítva Dátum elválasztónak.
Nálam az alapértelmezés pont. Akkor elfogadja a pontot, a vonást és a / jelet is az Excel. Kipróbáltam, átírtam vonásra, attól kezdve a pontot nem fogadta el az Excel.
Ezzel végignézheted az aktív munkalapon levő shape-eket és megnézheted a típusukat.
Természetesen a makró bővíthető, hogy egy adott munkalapra írja ki shapek adatait.
Hátha ezzel kiderül, hová lettek a vezérlőid.
Üdv.
Ps. Nem tudom, hogy jó-e az "Áthelyezés és átméretezés a cellákkal együtt" beállítás. Mi van, ha azért tűnik el a vezérlőd, mert az adott cellát törölték?
Nerm vagyok kezdő Excel programozó. Ki látott már ilyet?
A gépemen a
Sub cccc() MsgBox (Year("2012.12.12")) End Sub
Type mismatch hibával elszáll, míg
Sub cccc() MsgBox (Year("2012-12-12")) End Sub
jól lefut, visszaadja a 2012-es értéket.
Magyar WIN7 az op. rendszer, angol Office 2007-tel van kombinálva. A windows rövid dátum formátuma: éééé. HH. nn. Próbáltam más gépeken, ott mind a kettő jól fut le.
Szervusztok! Egy kétnyelvű Excel 2010 Home and Buisniess-t használok. Adott egy xlsm kiterjesztásű fájlom, amiben sok számítás és adat mellett makrók is vannak. Az egyik munkalapom kezelőfelületként működik. Ebben többféle Active-X vezérlőt is használok. Sajnos már sokadszorra fordul elő az, hogy bizonyos vezérlőim eltűnnek a munkalapomról. Egyszerűen nem jelennek meg, viszont a makróimat végignézve mégis megtalálom őket. Azaz úgy tűnik, hogy csak a vezérlők megjelenítése veszik el, a mögöttes tartalom megmarad.
Volt már, hogy valahol a százezredik sor környékén megtaláltam a vezérlőt, holott a problémás vezérlőim jellemzőin belül, az objektum elhelyezésénél már beállítottam, hogy: "Áthelyezés és átméretezés a cellákkal együtt"
Sajnos az utóbbi négy alkalommal, mikor a hiba előjött, már nem találtam meg sehol. Így egy korábbi biztonsági mentésemet kellett visszahoznom és az azóta történt változtatásaimat újra be kellett írnom.
Érdeklődöm, hogy tapasztalt-e már más is hasonlót, van-e megoldási javaslat? Annak is örülnék, ha valahogy meg lehetne keresni ilyenkor az "elveszett" vezérlőket. Azzal még csak-csak együtt tudnék élni, hogy utána a helyükre kll igazítanom.
// Egyéb megjegyzések a hibához:
- Létrehoztam a vezérlőket újra és megpróbáltam átnevezni a régire. -> Nem engedi, mert már léteznek a vezérlők az adott névvel.
- Ha a hiba előjön, akkor az folyamatosan fennáll. Azaz pendrivera kimentve másik gépen megnyitva szintén nem látszanak a vezérlők. (Sem egynyelvű Sem kétnyelvű excellel.)
- A hiba nem jön elő állandóan. Legutóbb pl. egy hetet dolgoztam a fájllal és csak most bukott ki.
- A mentés verziója elvileg minden esetben makróbarát Excel-munkafüzet, azaz xlsm.
- A munkalapon többször rejtek el vagy teszek láthatóvá sorokat. Az összeset felfedve sem találom a vezérlőket.
- Kipróbáltam, hogy eltűnnek-e a vezérlők esetleg akkor, ha a hozzájuk tartozó sorok el vannak rejtve és ekkor mentem a fájlt. Újra megnyitva a fájlt, majd ismét felfedve az adott sorokat, a vezérlőm látszik.
Van egy katalógus szerű. A sorokban vannak felsorolva a különböző "egyedek" és az oszlopokban a tulajdonságaik.
Bővíteném az oszlopokat , hogy milyen kategóriába esik az "egyed" és ami fontos szempont, hogy szűrni is lehessen utána.
De van olyan egyed, amihez több kategóriát is megadnék. Ha egy cellába írok több tulajdonságot, akkor nehéz lesz így szűrni, mert "AAA, BBB"- lenne a cellában. És ha én AAA-ra szűrök, akkor nem kerül bele az AAA, BBB.
Viszont ha külön oszlopba teszem a BBB-t, akkor már 2 oszloppal kell zsonglőrködni, ami megintcsak nem ad szűréskor megfelelő találatot. De szívem szerint külön oszlopba tenném a második kategóriát az áttekinthetőség miatt, hogy egy cellába ne legyen 1-nél több jellemző.
Egy körülbelüli példa (oszlop1: egyed, oszlop2: kategória1, oszlop3: kategória2):
X, hegesztés, munkavédelem
y, vegyipar
z, gépipar
v, gépipar, munkavédelem
w, munkavédelem, munkaszervezés
Ha tehát a munkavédelemre akarok szűrni és az oszlop2-ben ezt állítom be, akkor csak a w lesz a találat. Ha az oszlop3-ban, akkor x,v.
De olyan nem lesz, hogy x,v,w legyen a találat.
Van valami jó ötletek, hogyan lehetne ezt elrendezni? És Excel 2002-t használok.
Ha a Riport munkalap az aktív - onnan indítod a makrót - akkor jónak kell lennie az első sornak is (már ha az AA3 cellában valóban egy cella címe van). De ha az M3 cellában van az érték, akkor az M3 legyen az AA3 helyett.
A select-ek pedig teljesen feleslegesek. (Az activesheet.pictures.paste.select-ről meg inkább nem mondanék véleményt.)
Nézd meg légy szíves, mit javasoltam a korábbi hozzászólásomban a Paste után a kép helyretételére.
Sajna. Egyébként ha lehet kérni mondjuk a referenciacella a Riport lap m3 mezőjében van. Erről a lapról indítva és ide érkezve elegánsabb lenne. Filenevet azért nem írtam mert a file nyitva van a Riport lapon.
Bocsi, a riport cellabán egy math fv-nyel kijön, hogy a háttér lap 242. sorában van. Az oszlop generálisan B. Egy cellában ="B"&k3 Így jön ki az m3 cellában, hogy a kétdéses kép a háttér lap B242 cellájában van. Ezt az értéken akarom változóként beírni a macroba, hisz csak innentől macro.
Köszi, épp az a gondom, hogy a B242 egy keresőfv alapján jön ki és ez mindig más. Ezt kéne változtatni a macroban. Ez lehet B121 is, attől függ, hogy milyen termékkód került a riport lapra. Ez alapján kéne a macroban, mint a lap egyik ceellájában kiszámolt értéket használni a macroban. Remélem nem volt túl homályos.
Lehet neked annyira trivi, hogy bonyolultabbra számítasz.
Már addig menne a dolog, hogy online ki tudom számolni holvan a kép a háttér lapon. "Csak annyi kellene", hogy ez alapján pl B242 megtalálja egy macro a háttér lapon a cellát B242 és ezt tudjam a vágólapra felmásolni. Innen visszakocogok a kimutatás megfelelő cellájába és egy paste as a bitmap-pal ki is tenné. A baj, hogy online megkapott hivatkozást nem tudok beépíteni a macroba.
Én úgy csinálnám, hogy elnevezném a képeket, a számokhoz az elnevezést társítanám és az alapján lehetne átmásolni a képet.
Ez azért lenne könnyebb, mert cella cím alapján a képet (rectangle, shape) nagyon bonyolult megtalálni, név alapján viszont igen egyszerű.
Csak egyszer kell az elnevezést megcsinálni és még az is makrósítható - de a másik oldalról:
Mész végig a képeken, a hozzá tartozó cella (topleftcell) címe alapján megnézed a balra mellette levő cella tartalmát és az alapján adsz neki nevet, pl.
Addig jutottam, hogy van egy riport lap, ahol a szám szerint keres fv-nyel ki tudom keresni, hogy a kép a háttér lap B oszlopának hanyas sorában van. Pl B242.
Azt akarom , hogy egymakro olvassa be ezt a számot, ez alapján álljon rá a háttér lap cellájára.másolja, menjen vissza a riport lap megfelő cellájába, itt illessze be képként. Ezután olvasson be egy mási cellt és vay 10-szer ismételje meg.
Az aktuális cella sorára a következőképpen hivatkozhatsz:
activecell.row
De az általad végzendő műveletekhez nem kell a select. Ezt csak a makrórögzítő szereti használni.
Nézd meg, hogy konkrétan melyik cellában álltál, amikor a makrórögzítő elindult. (Ha nem ott álltál, akkor kell lennie a makróban egy ilyen sornak : range("A1").select - A1 helyett egy cella cím van.)
"Egyébként nincs mód akárhogy arra, hogy az A oszlopban van egy csomó számom egymás alatt."
Erre egészen biztosan van mód. Nekem már sikerült.
"Mellete a B oszlopban Rectacleként vannak a termékek képei."
Mi az a Rectacle?
"Van-e olyam macro lehetőség..."
Van olyam.
"Egy ilnyen macro kellene. Tud vki segíteni?"
Tudna, de szerintem tökre nem érthető, hogy mit akarsz. Megvárhatjuk, hogy hátha valaki nálam jobban megérti, vagy megpróbálhatod szabatosan leírni a feladatot, munkalapnevekkel, tartománycímekkel, stb., és akkor talán én is hozzá tudok szólni.
Igen, az üres függvényt nem próbáltam. De a kérdésed a maradványról rávezetett a megoldásra.
Azt, hogy minek a maradványi ezek a cellák, csak sejtem, már nem emlékeztem pontosan, mert sok kézi vacakolással alakítgattam a táblázatot. De itt az lehetett, hogy eredetileg képlet volt benne, amit később irányított beillesztéssel értékké alakítottam. Ezt most sikerült is rekonstruálnom a teszttáblában.
Tehát ha az A1 cellába a következő képletet írom: =HA(D1=1;"1";""), és a D1-ben nem 1 áll, akkor az eredmény "" string a cellában. Ha pedig ezt értékké alakítom, akkor a cella az üres függvényre hamis értéket ad, holott semmi nem látszik.
Már csak az a kérdés, hogy lehet-e ezt a tényt tesztelni valahogy?
Sajnos nálam az égvilágon semmi különbség nem látszik. És nem is tudok olyan eszközről, amely az esetleges formátumkódokat kimutatná. Mindenesetre készítettem egy miniatűr tesztfájlt, ami mutatja a problémámat: http://data.hu/get/7482425/Ures_cella_teszteles.xls
Ha ebben az állapotában rendeztetem a munkalapot a tesztoszlop szerint, akkor a megnyitáskori képet adja. Ha az első csoport valamelyik üresnek látszó cellájában megnyomom a DEL gombot, akkor az újrarendezés után átkerül a hátsó csoportba. Feltételezem, hogy ezek a valódi üresek. De hogy mi lehet, az első csoportban levő cellákban, az számomra továbbra is rejtély.
Az a sejtésem, hogy azokban a cellákban formázási kódok maradtak ott. Pl. egy aposztróf - ami ugye azt jelenti, hogy a cellában levő számot szövegként kell kezelni -, amit egyébként nem látsz a cellában, csak akkor ha éppen kiválasztod.
Van-e olyam macro lehetőség, hogy egy lap megadot celláiból kivéve a számokat egy másik lapon megkeresi a számot egy háttér tárba, mellé lép és az ott talált képet másolja és beviszi a beviteli riport lap 3 oszloppal mellette lévő helyre másolja. Majd tovább lép és egy másik kódszámot tartalmazó számra lép. Közben az jutott eszembe, hogy még macro mélkül egy segéd oszlopban a képek helye match fv-nyel meghatározható. "Már" csak az a feladat hogy ha 0-nál nagyobb számot talál egy cellában egy másik lapról a hely száma sszerint kikereshető cellában lévő Rectacle bemásolható. Egy ilnyen macro kellene. Tud vki segíteni?
Köszi, legalább ezt is tudom. Egyébként nincs mód akárhogy arra, hogy az A oszlopban van egy csomó számom egymás alatt. Mondjuk ezek a termékszámok. Van 1-2 ezer. Mellete a B oszlopban Rectacleként vannak a termékek képei. A feladvány az, hogy ezt, mint háttér adatbázist alkalmazva egy másik lapon ha meghívok kb 10 termékszámot mellé kerülne a termékek képe.
Megint egy alapokat érintő kérdésem van. Rendszeresen tapasztalom, hogy ha kézből kiadok egy rendezési parancsot (mondjuk növekvő sorrendben), akkor az egyformán üresnek látszó cellák egyik felét a szöveget tartalmazó cellák elé, másik felét mögé teszi. A sejtésem az, hogy valamiképp megkülönbözteti azokat, ahol már volt korábban adat, és ahol nem.
Igazából csak bosszantó, mert többnyire nem számítok rá. Meg tudom oldani, de érdekelne az oka. Próbáltam tesztelni, pl. =A1="" teszttel, illetve ugyanezzel a szintaxissal a hátratetteknél. Nem volt különbség. Az eredmény IGAZ volt. Próbáltam ellenőrizni, hogy nincs-e valami rejtett karakter ott, de az =kód(A1) szintaxis mindkét esetben #ÉRTÉK! eredményt adott.
Aztán kijelöltem a lista elején álló cellákat, és megnyomtam a DEL gombot, amivel ürítettem őket (az egyébként üres cellákat). Az újabb rendezés után már annak rendje és módja szerint hátramentek a társaikhoz.
Próbáld a kép szerint összeállítani. A B2:E10 tartomány formátuma h:ss, az időket összegző D11:E11-é [h]:mm.
Mivel magyar Excelem van, a képletek is így szerepelnek. Az órát és percet tudod angolul, az IDŐÉRTÉK megfelelője a timevalue, HA helyett if-et írj, SZUM helyett pedig sum-ot.
A G oszlop értékeit még felszorozhatod az egyéni órabérrel.
Köszi szépen a kitartó segítséget!:)) és bocsánat, hogy nem vagyok világos.
Arra a példára (8+12+11+10+9+13=63 óra ebből 2+1+3 =6 túlóra.), amit írtál valóban szuper Delila képlete. A baj, hogy a helyzet más:
XY timesheetje
május 5.
1. projecten dolgozott 2 órát
2. project 4 óra
3. 1 óra
4. 5 óra
összesen 13 óra és ebből 3 a túlóra. Tehát Delila képletére végig nullát kapok, mivel az egyes értékek egyike sem haladja meg a 10-et. Csak az összértékük több mint 10, tehát nekem 3at kellene hogy kiírjon (, amit utána én még megszoroznék 1,3-mal). Azaz a Te példádban nem 6 lenne a túlóra, hanem 53 azaz az érték, ami nekem kéne (de nyilván ez lehetetlen, mivel egy nap 24 órából áll).
Az idézőjelek közé tett szöveget az excel nem értelmezi sehogyan sem, (kevés kivételtől eltekintve) pontosan úgy írja ki, ahogyan az idézőjelek közé beírtad - azaz az angol excel is képes a magyar szöveget kiírni. Oda tehát (mármint az idézőjelek közé) azt írsz amit akarsz. De ha az eredményt még szoroztatni akarod valamivel, akkor célszerű nem szöveget írni, hanem 0 értéket. (Azaz a " szöveg" helyett 0 kell.)
Másrészt:
Nem tudom, hogy jól értem-e, de ha túlórákat szeretnél számolni, akkor a következőre gondolok:
Túlóra akkor van, ha egy adott napon 10 óránál többet dolgoztak.
A túlórákat úgy lehet összesíteni, hogy a 10 óra fölötti időket kell összeadni.
Példa szerűen:
1. nap 8 óra nincs túlóra
2. nap 12 óra 2 túlóra
3. nap 11 óra 1 túlóra
4. nap 10 óra nincs túlóra
5. nap 9 óra nincs túlóra
6. nap 13 óra 3 túlóra
Elszámolás: összesen 8+12+11+10+9+13=63 óra ebből 2+1+3 =6 túlóra.
Ezt a számot pedig (ami a második! verziónak felel meg) pontosan megmondja neked Delila képlete.
Ha nem jól értelmeztem, akkor írd le légy szíves a Te verziódat.
Nagyon köszönöm mindenkinek a segítséget!:) Az 1-es sorszámú a kérdésem, ha minden igaz. (Röviden egyébként ehhez kell: órabér táblázat, ahol a 10 fölött túlórának minősülő órákat 1,3-as szorzóval számoljuk. Ehhez kéne nekem egy külön cellában az túlórák száma, amely képletet kiegészítenék egy 1,3-as szorzóval. A ledolgozott órákat a dolgozók írják be projekt szerint. Azt szeretném, ha a túlórákat rögtön az egyes oszlopok alján egy külön cella észlelné és számolná. Csatoltam a táblázatot.) "A számok összege kevesebb, mint 10" ehelyett mit írjak angolul, amit tud értelmezni az excel?
ha egy tartományban levő számok összege nagyobb mint 10, akkor írja ki a tartományban levő számok összegét 10-el csökkentve? Ebben az esetben a képlet: =ha(szum(A1:A20)>10;szum(A1:A20)-10;"A számok összege kevesebb, mint 10")
ha egy tartományban levő számok összege nagyobb mint 10, akkor írja ki a tartományban levő 10 -nél nagyobb számok 10 fölötti részének összegét? Erre jó Delila képlete.
ha egy tartományban levő számok összege nagyobb mint 10, akkor írja ki a tartományban levő számok összegét, úgy hogy minden 10-nél nagyobb számból az összegzéskor vonjon le 10-et. Ebben az esetben =ha(szum(A1:A20)>10;szum(A1:A20)-darabteli(A1:A20;">10")*10;"A számok összege kevesebb, mint 10")
A képlet, amit Delila adott, teljesíti az általad 24322-ben megfogalmazott kritériumokat. Legalábbis azok egyik lehetséges értelmezési módját. Ha esetleg egy példán keresztül egyértelműen megvilágítanád, hogy mit is szeretnél, biztosan kapnál teljesen jó választ is.
Köszi. De ez nagyon nem akar összejönni. ugyanúgy csak akkor írja ki az értéket, ha az egyes cellákban nagyobb érték van 10-nél. Azokat aztán szépen összeadja... angol excelem van, nem tudom milyen üzenetet kell a string helyére (ezt írtam: the overall sum is not more then 10, de gondolom ez nem jó). Valamiért nem működik ez a dolog, pedig nme tűnik olyan bonyinak.. köszi azért.
Igen, a szívás az, amikor az egyszerűsítést "ész nélkül" csinálom. Mert az utóiratban szereplő hol.van helyett akartam egyszerűbb sor függvényt javasolni.
Így aztán persze "ugrott" a sor értéke.
Mondjuk úgy is lehet javítani. ha sor()-4 -et írunk be.
A Vkeres($C$1;$A$3:$K$11;sor();hamis) mint keresés is jó kell legyen.
Kipróbáltam az általad javasolt képletet és nálam valamiért eltolta az eredményt. Nem az azonos sorban lévő cellákból másolta ki az eredményt, hanem a 4 cellával lentebbiről. Próbáltam rájönni mi a gond vele de nem ment.
Készítettem róla képet és ezen a linken megtekinthető
Van egy árlistám amiben termékek és árak szerepelnek. A probléma az, hogy a termékeket egyes vevők más áron kapják meg (V1-V5). Olyan függvényt keresek amivel a "Vevő ár" alatt található cellák a "C1" cellába beírt vevőkód alapján az ahhoz tartozó vevő árait jelenítenék meg. Ha netán a vevő nem kapna kedvezményt (cella üres) akkor automatikusan "Alap ár"-at használjon a "Vevő ár"-hoz.
Fkeres függvényt próbáltam használni de gyorsan beláttam, hogy az nem megy, mivel az oszlop változó.
Számomra fontos lenne a gyors megoldás, ezért előre is nagyon köszönöm a segítséget.
Köszönöm, a javaslatod (#24318) megoldotta az én problémámat. Egyébként egy elnézéssel kezdem. Nem a find függvényre gondoltam, hanem a find methodra. Csak a szintaxisa miatt (zárójelben kell megadni a paramétereket) neveztem tévesen függvénynek. Szóval adatállományban akartam keresni, ahol a keresendő nevek némelyike wildcard karaktereket is tartalmaz.
A wildcard karakterek megkeresésével nem volt gondom. Hiszen nem a tartományban, csak a keresőkifejezésben kell ellenőriznem, hogy van(nak)-e wildcard karakter(ek). Szerencsére az instr() függvény literalként kezeli a wildcardokat, így nem volt gond eléjük tildét tenni. És így már jó eredményt adott a keresés.
Igen, a VBA replace függvény valóban megtalálja és kicseréli pl. a * vagy a ? karaktereket, ha tudod, hogy melyik cellában van. De a feladat éppen az, hogy azokat a cellákat kell megtalálni, ahol ez a karakter előfordul, vagyis végig kellene menni a tartomány összes celláján, ami azért elég hosszadalmas is lehet.
A range.find és range.replace viszont a tilde-vel "előfogatolva" megtalálja / kicseréli ezeket a karaktereket is.
Egy makrot akarok irni, amit megnyit sorban fájlokat, azok bizonyos részét bemásolja egy másik fájlba majd bezáródik, ezután indul újra a ciklus. A gondom az, hogy amikor a beillesztés részhez érne a makro akkor a következő hibaüzenetet dobja fel:
"Object doesn't support this property or method"
Ha kézzel akarnám akkor viszont beillesztené az adatokat. Alább láthatjátok a kódot
Sub beolvaso_makro()
Dim y As Integer
Dim x As Integer
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
y = 2
For x = 1 To y
Workbooks.Open Filename:="D:/Modells/modell" & x & ".xlsx"
Köszi! Majdnem, de így csak akkor írja ki a felesleget, ha az egyes cellában lévő érték meghaladja a 10et. Nekem az kéne hogy ha az A1:A20 szummája meghaladja a 10et akkor a 10 fölötti értékek szummája íródjék ki.. Előre is köszi a segítséget!
A következőre várnék sürgős választ, valószínűleg tök szimpla a megoldás: Excelben azt szeretném elérni, hogy akkor adja össze a cellákat, ha a tartományban lévő cellák összege meghaladja a 10-et. Tehát, nem az kell nekem, hogy azokat a cellákat adja össze, amiknek az értéke meghaladja a 10-et. és még jobb lenne, ha a 10 fölötti "felesleget" adná csak ki a képletezett cellában. Remélem, értelmezhető, amit írtam.. :)
És van valami szakmai oka, amiért nem a \ karaktert használják, vagy csak a szokásos beteges mániájuk, hogy a világ összes szabványát/szokását lerombolják, és a saját verziójukat próbálják a világra kényszeríteni helyettük?
"Microsoft Excel uses the tilde (~) as a marker to indicate that the next character is a literal. When you use the Find and Replace dialog box to find or replace a character such as a tilde (~), an asterisk (*), or a question mark (?), you must add a tilde (~) before the character in the Find what box.
Note If you want to find or replace a tilde in a worksheet, you must type a double tilde (~~) in the Find what box."
Van-e mód arra, hogy a find függvény a wildcard karaktereket annak tekintse, ami, és ne wildcardnak? Tudom, hogy helytelen ilyen karaktereket tenni egy stringbe, de sajnos van amikor készen kapom, és a program nem tudja elmagyarázni a delikvensnek, hogy ilyet ne használjon. Ugyanakkor adott helyzetben szeretném megtalálni azt a stringet, ami ilyet tartalmaz, én más hasonlót.
Keresve rátaláltam egy "matchwildcards=True" beállításra, de úgy látom, hogy a help nem ismeri, és ha van is, az nem a find függvény része.
Segitségeteket szeretném kérni egy kis excel problémám akadt.
Megjedzem kezdö vagyok.
Készitettem egy táblázatot ami az egész évi munka orát számolja (alap óra + túlora),ez az időbank miatt kell mivel már 2 hónapja nem dolgozunk de alapfizetés van és majd az egész 2 hónapot be kell dolgozni. Na most elég jól sikerült az egész de nem tudok rájönni, hogy a szabadságot hogy tudná kiszámolni, mivel megadtam egy cellában hogy 24 szabadnap van és azt is megoldottam hogy ha valamelyik hónap egyik napja 0 val van megadva (szoval nem 8 óra vagy 12 vagy akármi) akkor az szabadság, még ez is megy levont 1 et hanem ha még egy napot 0 val jelölök akkor ö megint 24 böl von ki 1-et.
Kérdésem: milyen formulával tudnám megoldani, hogy akármennyi 0 irok mindég 1 el kevesebb legyen?
Hát lehetne még variálni, pl. programból megnyitsz egy word doksit és abba szépen belerakod a copypicture-rel kivett képeket. Utána meg beleírod a word doksiba a képek közé a szöveget.
sub wordbe
dim wrd as object
Range("A1:B8").CopyPicture xlScreen, xlBitmap Set wrd = CreateObject("Word.Application") wrd.Visible = True wrd.documents.Add wrd.documents(1).Range(0).Paste wrd.documents(1).SaveAs filename wrd.Quit End Sub
A word doksit addig tartod nyitva, amíg van bemásolni valód.
De ha külön-külön rögtön jpg-ben akarod látni, akkor a chart a jó megoldás, mert az direktben tudod képfájlba menteni.
Köszönöm szépen! Az a helyzet, hogy én is találtam ilyen "chart-os" megoldást, de gondoltam, hátha ismer valaki valami frappánsabbat is. Mindegy, ez működik.
A kritérium tábla fejléce üres marad, alatta a kritérium pedig: =közép('az első szám hivatkozása';9;1)="3"
Ez a képlet igaz v. hamis eredményt ad.
Az Adatok>Rendezés Szűrés>Irányított szűrést kiválasztva, a lista tartománynak megadjuk a szűrendő táblát (fejléccel együtt), a kritérium tartománynak pedig, a két cellát (felső üres, alsó tartalmazza a képletet), majd OK.
2.
Feltételes formázást ua-zal a képlettel csináljuk mint a kritérium tartománynál.
Esetleg kísérletezhetsz a File/Nyomtatás/ MS Office Documents Image Writer-rel. Tif fileban ment. Kijelölhető a tartomány és meghatározható a képméret. Babrásnak igérkezik, de hátha összejön.
Tudna valaki segíteni abban, hogyan lehet makróval egy adott tartományt (egy kis táblázatot) képként elmenteni? Pl. a Range("A1:I18") tartományt hogy lehet elmenteni valamilyen képformátumban?
Hogy ez mennyire úgy van ahogy írod, elmesélek egy összehasonlítást:
Mivel egy 3000 soros 730 oszlopnyi excel függvényeket tartalmazó táblázatom áttekintése meglehetősen nehézkesnek bizonyult, ezért udf függvényekkel lecsökketettem 80 oszloposra, tehát, hogy csak a 80 célparaméter-oszlopot tartalmazta, a részeredmények segédoszlopait nem. A 730 oszlopos 26 MB-t foglalt el a winchesteren, a 80 oszlopos pedig 6-t. Jelentős megtakarítás.
De…. Amíg a 730 oszlopos a 1 másodpercen belül abszolválta a számításokat, addig a 80 oszloposnál ez másfél percig tartott. Ez még akkor is mellbevágó különbség, ha figyelembe vesszük, hogy az udf makróim eléggé sallangosak lehettek. Feltételezem, ha te csinálod a makrókat, akkor akár 1 perccel is gyorsabban végére jutna a számításoknak. De a különbség még így is nagyon jelentős lenne.
Igy van, az excel képességeit nem lehet makróval megverni, ezért én is a legnagyobb mértékig igyekszem kihasználni azokat.
Az előbbi esetnél speciel arra gondoltam, hogy a több száz/ezer soros szám átalakítást nyilván makróval sokkal-sokkal egyszerűbb és gyorsabb megcsinálni, mint a billentyűzetet verni. Aztán a rendezést,szűrést meg csinálja az excel a makróból meghívva a funkciót.
A százalékot direktben nem tudod az adatokra íratni, ahhoz külön "technika" kell (pl. másik diagram a százalékokból és átlátszóan ráhelyezni, feliratot direktben a grafikonra helyezni, stb.)
Viszont, ha a 100%-ig halmozott oszlopdiagramot választod diagram tipusként, akkor a tengelyen % jelenik meg, az adatokfeliratok pedig maradhatnak az értékek.
Ha meglevő diagramot alakítasz át, akkor valószínűleg a tengelyt is újra kell formáznod (számforma - %), hogy megfelelő legyen.
Viszont a fix hosszúságú számazonosítóknál a vezető nullákra is szükség van általában - ezt pedig számformátumban nem lehet megoldani, csak szövegként. (És akkor máris lehet "normálisan" keresni...)
Másrészt elég sok esetben betü-szám kombináció az azonosító.
Az előzményekhez kapcsolódva azt szeretném megkérdezni, hogyan lehetséges halmozott (excel 2007) oszlopdiagramnál az adatfeliratoknál a % értékeket is megjeleníteni, ill. azt, ha ez alapból nem lehetséges, hogy lehet ezeket valahogy megjeleníteni?
Egyszer láttam egy makrót, ami egy soksoros táblázaton elvégzett egy bizonyos műveletet. A makró részben a makrórögzítővel készült, és működött ugyan, de tele volt sallangokkal, több, mint egy percig futott, továbbá sokat kellett hozzá kézzel állítgatni bizonyos cellatartalmakat ahhoz, hogy jól működjön.
Na mondom, majd jövök én. Majd én tudományos alapon szépen megírom a makrót, nulláról kezdve, tizedére rövidítve a kód hosszát. Meg is írtam, gyönyörű volt, és fél óra alatt a feladat elvégzésének negyedéig jutott.....
Csak azért mondtam el, mert az Excel beépített műveletei (szűrés, sorbarendezés, képletek, stb.) nagyságrendekkel gyorsabbak, mint a VBA, és ez akkor jön ki igazán, amikor sok sor van.
Egy kicsit elgondolkodtam, hogyan lehetne a számokat is szűrni "szövegként" helyben. Excel 2010-ben az alábbi műveletekkel megoldható:
Kijelölöm a számokat tartalmazó tartományt (pl. A2:A40). Jobb egérgomb - Cellaformázás - szám fül - szöveg. Ezután a kijelölésen F2 - Entert nyomkodva végigmegyek.
Ennek hatására - de csak ennek hatására - a számokat szövegként tárolja az excel (ezt beállított hibakezelés esetén ki is jelzi a hibajelzésben).
Autoszűrő, majd az autoszűrő beállítása: szövegszűrő - egyenlő ????????3?? vagy ????????3*
Ekkor azok a számok maradnak meg, amelyeknek a 9. karaktere 3.
Ha később ismét azt szeretném, hogy az excel számként tárolja az adott területen levő értékeket, akkor a területet kijelölve a hibajelzésben kiválasztom az átalakítás számmá opciót (ez általános formátumra állítja vissza a cella formátumát), majd ha szüksége, akkor átállítom a cella formátumát számra.
Üdv.
P.S Végigcsinálni gyorsabb, mint elolvasni, de persze nem olyan gyors, mint a Te segédoszlopos megoldásod.
Kérlek segítsetek! Egyszerűen nem jövök rá, hogy hogyan lehet leszűrni a következőt:
Adott egy oszlop, amely soraiban 11 jegyű számok találhatóak, nekem le kellene szűrni azokat, melyek 9. számjegye "3". Sajnos a számok között nincs logikai kapcsolat.
És itt egy nagyon aranyos kis polémia bontakozott ki a moderátor és egy felhasználó között arról, hogy ez most bug, vagy feature.
Az Insert/Delete esetére nem találtam ilyen konkrét jelzést, de a tapasztalatom azt mutatja, hogy ugyanez a helyzet.
Az igazság az, hogy a makró elég nagy, akár órákig is lehet benne adatokat felvinni, módosítani, listázni, úgy hogy nem szívesen tenném, hogy az elején megszüntetem a védelmet, és a végén vissza. Annál is inkább, mert a biztonság kedvéért minden egyes érdemi módosítás (pl. egy rekord teljes felvitele) után mentem az állományt.
Ezért inkább azt teszem, hogy ahol ilyen problémás parancs adódik, ott kikapcsolom a védelmet, majd a végrehajtás után azonnal vissza. Nem szeretném, hogy úgy mentődjön véletlenül is az adatállomány, hogy nem védettek a munkalapok.
Kiderült, hogy nem a kód átalakításával volt a gond, hanem azzal, hogy időközben átírtam az adatlapok kezelését, és az érintett munkalapot védetté tettem. Hogy egy felhasználó ne tudjon esetleg akaratlanul belepiszkálni. A szándékos hülyeséget úgysem tudom megakadályozni, de nem is akarom.
És abba már beleszaladtam korábban, hogy védett munkalapokon hiába van beállítva a userinterfaceonly:=True kapcsoló, a program nem hajtja végre a Replace parancsot. Most kiderült, hogy az Insert/Delete is ebbe a körbe tartozik. És milyen bosszús leszek, ha később még órákat kell eltöltenem azzal, hogy mely parancsok viselkednek még hasonlóan. Szerinted vannak még ilyenek?
Hibakeresésnél én is ezt játszom. De mivel eddig nagy ívben kerülten a formokat - enélkül is elég jól elvoltam pár x évet - nem volt világos, hogyan kell átlépni a modal=true futtatás esetén a "más programok és ablakok nem láthatók, amíg a form be nem zárult" (hevenyészett fordítás) kitételt.
Mikor egy hibát akarok felfedezni, kijavítani, a Private Sub sorhoz beteszek a töréspontot. Formról indítok, és máris a makróban vagyok, ahol lépésenként tudok sorról sorra haladni. Ilyenkor bármit megadhatok az immediate ablakban.
korreláció parancsot csak úgy hajlandó végrehajtani, ha elötte bebillentyűzök egy kamu Adatelemzés parancsot. Például azt hogy Adat/Adatelemzés/Mégse. Ezután amíg be nem csukom az excelt normálisan csinálja korrelációkat, akárhány füzetben.
Gondoltam, a billentyüs inicializálást kiváltom egy sendkeys rutinnal. Sikerült is, de egy kicsit furcsán. Ugyanis 2x kell sendkeys rutint indítani. A második indítástól már megcsinálja a korrelációszámításokat. Az elsőnél vajon miért nem?
És elfelejtettem mondani, hogy nem csak immediate parancsokat lehet ilyenkor kiadni, hanem bele is lehet javítani a programba, ami azonnal érvényesül a még nem végrehajtott sorokon.
A tegnapi válaszom kicsit elhamarkodott volt. Ez a technika valóban működik, és szükség esetén alkalmazni is fogom. Természetesen a megfelelő óvatossággal. És köszönöm.
Köszönöm, kipróbáltam, és valóban jöttek az új gondok, szóval egyelőre letettem róla. Annál is inkább, mert még egyszer megnéztem Delila javaslatát, és azzal azt hiszem, mégiscsak meg lehet oldani a dolgot.
Az elsőt sikerült megoldani, de a második nem megy.
Izgalmasnak találom magam megfejteni, de a súgó csak olyan eseteket mutat, ahol a vizsgált cellák színeződnek át, nem egy azoktól független. Ha képletet kapok, hidd el, ki fogom elemezni, az a típus vagyok...
Köszönöm
2)
Az A7 cellában szereplő értéket szeretném pirosra színezni, ha a C7 től K7 celláig terjedő cellák bármelyikében 0-tól eltérő eredmény szerepel. Nem a vizsgált cellákat szeretném színezni, csak az A7-et.
Értettem a kérdésedet! Azt is értem, hogy kezdő vagy az excelben. Ezért van hozzá a help. Megírtuk, hogy merre felé keresgélj a helpben.
Mégegyszer:
SK javasolta a darabteli függvényt az első kérdésed megoldására. Ehhez (is) vannak példák a helpben.
Második kérdésedre jó a feltételes formázás. Erről is olvashatsz a helpben.
Sok-sok évvel ezelőtt, amikor elkezdtem excellel foglalkozni, még sehol nem volt internet, sőt még az excel se volt magyar, de a help akkor is ott volt már.
Sokkal hamarabb meg fogod érteni a működését, ha magad jársz utána, mintha készen kapsz - egyébként nem biztos, hogy jól működő - képleteket.
=E7*HA(H7="Gizi" vagy "karcsi" vagy "béla" stb (ezeket a neveket egy bővíthető oszlopban gyűjteném);-1;0)
Az E7 oszlopban szereplő érték -1 szeresét szeretném a cellába beszúrni, ha a H7 cellában a Gizi szöveg szerepel. Eddig ok, de ezt a képletet szeretném továbbfejleszteni, hogy a Gizi helyett egy oszlopban (legyen J oszlop) szereplő több (bármelyik, de nem 0) szövegre is megjelenjen az érték
2)
Az A7 cellában szereplő értéket szeretném pirosra színezni, ha a C7 től K7 celláig terjedő cellák bármelyikében 0-tól eltérő érték szerepel. Nem a vizsgált cellákat szeretném színezni, csak az A7-et.
Az E7 oszlopban szereplő érték -1 szeresét szeretném a cellába beszúrni, ha a H7 cellában a Gizi szöveg szerepel. Ezt a képletet szeretném továbbfejleszteni, hogy a Gizi helyett egy oszlopban (legyen J oszlop) szereplő több (bármelyik, de nem 0) szövegre is megjelenjen az érték
2)
Az A7 cellában szereplő értéket szeretném pirosra színezni, ha a C7 től K7 celláig terjedő cellák bármelyikében 0-tól eltérő érték szerepel.
A következőkben kérném a segítségeteket: van egy táblázatom, az A oszlopában terméktípusok (vmelyik többször, vmelyik csak egyszer fordul elő, a B oszlopban mindegyikhez egy összeg. A lényeg, hogy a C oszlopba szeretnék beszúrni egy függvényt, ami terméktípusonként a maximális szumma összeget mutatja minden sorban, valahogy így:
termék érték összeg
a 20 20
b 10 70
b 15 70
c 30 30
b 45 70
d 15 15
milyen függvénnyel, vagy annak kombinációjával lehetne ezt megoldani?
Már ha tudod az immediate ablakot használni, de nem, a userform nem engedi, mert vár arra, hogy valami történjen vele.
Ha modal = false , akkor viszont tudsz az immediate ablakban "dolgozni". Csak akkor a program nem vár arra, hogy kitöltsd a formot!!!
De miért kellene select??? Pláne, ha konkrétan tudod, mit szeretnél megnézni?
Javaslom a debug.print utasításokat a userformot használó függvényekbe a kritikus helyekre, akkor a form futása közben átváltva a VBA ablakra, láthatod az immediate-ban a kiiratásokat (persze nem árt megfelelő információt fűzni hozzá a kiiratásban), vagy akár utólag is megnézhető a "történet".
Szóba jöhet még az Msgbox használata megfelelő helyen a programban.
Esetleg a Ctrl+break -kel megállítás (vagy Stop a programban).
Az immediate ablakban kiadott sheets("Munka1").select, range("x1").select, és hasonlók megmutatják a kérdéses részt a füzetben, csak vigyázz, mert az lesz az aktuális pozíció. Érdemes visszaállni.
Program tesztelés közben az ember gyakran megnézi az aktuális, vagy valamely másik munkafüzetének az állapotát, ellenőrzi a benne végbement változásokat futás közben is. Userformokkal dolgozva viszont az a tapasztalatom, hogy abban a pillanatban, hogy a Form inicializálását befejezte a program, és felhasználói intézkedésre vár, onnan kezdve nem engedi megnézni a munkafüzeteket, ami néha nagyon kellemetlen. Csak a teszt félbehagyásával, a programból kilépve tudom megnézni az eredményt.
Szivesen. Én is sokat tanultam közben az érvényesítésről meg egyéb dolgokról is. (A legelső verzióm működött, de lényegesen bonyolultabb volt, úgyhogy "lemondtam róla".)
Egy újszülöttnek minden vicc új: Tegnap beleütköztem abba, hogy a sort method is azok közé tartozik, ahol nem elég ws.range(...).sort szintakszissal hivatkozni a rendezendő területre, hanem aktívnak is kell lennie, különben egy elég nehezen értelmezhető hibaüzenetet kapok ("Érvénytelen rendezési hivatkozás. Győződjön meg arról, hogy a hivatkozás a rendezni kívánt adatok közt szerepel, és hogy az első Rendezze mező nem ugyanaz, vagy nem üres.").
És logikusnak vettem, hogy a rendezendő területet tartalmazó munkalapnak kell aktívnak lennie. A gyakorlatban viszont úgy vettem észre, hogy elég volt, ha a munkafüzet aktív, ha a fenti szintaxissal rendezek. Jól látom?
Azért kérdezem, mert a help ugyan szóba hozza az aktív régiót (Sorts a PivotTable report, a range, or the active region if the specified range contains only one cell), de nem tisztázza pontosan, hogy minek kell aktívnak lennie az alkalmazás során.
Azért ez elég furcsa. A legkülönbözőbb op környezeteben, jó pár gépen futtattam, egyszer sem jelzett hibát. Minden műveletet hibátlanul végrehajtott. Ezen a gépen sem csak mióta Win 8.1 van rajta. Ezen is csak egy idő után. A nehézség abból adódott, hogy más hibát jelzett mint ami valójában volt. Ha kiszedtem a jelzett select utasítást amit nehezményezett akkor összeomlott a file, a hibakareső bezárta.
Egy kicsit foglalkoztam a munkafüzeteddel. A Munka1 munkalapon láthatod az eredményt.
Az első negyedév érvényesítéseit megcsináltam, a többi már gyerekjáték - másolás, irányított beillesztés - érvényesítést.
Így csak az SZ,B és az adott napi dátum írható be a cellába. Ha nem akarod, hogy a szombati/vasárnapi dátumhoz lehessen SZ és B-t írni, akkor az érvényesítés képletéből kiveszed ezeket (nyilván, akkor nem kell a vagy).
Az M oszlop az adott naptári sorban levő napokat fogadja el kezdő napnak. Az N oszlop az M oszlopban levő dátumtól az adott sorban levő utolsó dátumig fogad el értéket.
Az O oszlop viselkedése: Ha az L oszlopban van adat, azt írja be, ha nincs akkor az M-N oszlopban szereplő két időpont közé eső munkanapokat számolja ki. A szabadnapokat úgy számolja, hogy vasárnap az mindig szabad, a többi szabadnap (beleértve a nem dolgozós szombatokat is) az AA oszlopban van felsorolva.
Az O oszlop végére ís írtam képletet, az L oszlop végén levő képlethez hozzáadtam az O oszlop összegét is.
Köszönöm a szurkolást. Ha igaz, megtaláltam a hibát. Ez a file kb. 2 éve megy evvel a hibával és smmi nem utalt arra, hogy gond van. Kifelejtettem egy konvertálást ezért egy stringhez hozzáadtam integert.
Az hiszem találtam valami nagyon csúnya hibát. Most vizsgálom valóban ez okozza e a problémát. Csak az nem megy a fejembe, hogy miért csak egy gép mutatja ki. Sehol másutt nem omlott össze ettől a file.
A helyedben én leírnám a feladat lényegét és a szűkebb környezetet. És talán azt a függvényt, szubrutint, amelyikben a hiba jelentkezik. Nagy program esetén ilyenkor szoktam 1-2 órai munkával egy lecsupaszított tesztprogramot írni, amelyiken a hiba még jelentkezik, de nem tartalmazza a külvilág számára érdektelen részleteket.
OK,Ok. tisztában vagyok vele gondoltam valaki találkozott ezzel a gonddal.
Egyelőre a formban találtam egy hibát. Elfelejtettem egy numerikus változót átkonvertálni stringbe pedig előírásszerűen átkellet volna. csak Az érdekes az, hogy csak egy számítógépen száll el ez a file.
Hát igen, kettővel nekem is megy, csak nem érzem elegánsnak.
Persze, ha belegondolok, hogy a kézi irányított beillesztésnél sem lehet egyszerre több beállítást megadni, elképzelhető, hogy a program is ezt követi, és ott sem lehet. Persze egy With - End With közé beírva a felsorolást talán nem is néz ki olyan csúnyán.
Nem tudom, hogy lehet-e egy paranccsal, de kettővel igen: először kiadod az egyik paste(special) parancsot, a rákövetkező sorban a másikat. Ennek persze csak akkor van értelme, ha a két paste parancs nem üti egymást, eredményben különböznek egymástól.
Egy xlam bővítményt van értelme hálózati meghajtón elhelyezni? A cél az, hogy a "gazdagépek" ezt használják - tehát ne lokálisan. Ez azért lenne jó, mert szabadon tudnám módosítani, fejleszteni a felhasználók igénye szerint, nem kéne lokálisan vacakolni vele.
Akkor már csak egy (?) kérdésem maradt. Ha egyidejűleg szeretnék több tulajdonságot alkalmazni az átvételnél, pl.: Paste:=xlPasteColumnWidths és Paste:=xlPasteAllExceptBorders, akkor ezt meg tudom oldani egyetlen parancssorban?
Az iménti kérdésem azt hiszem sztornó. Végiggondoltam a dolgot, hát nem kell nekem egyetlen paranccsal elintéznem a dolgot. Külön parancsba teszem a copy részt, és külön sorban a
Sziasztok, gyomlálgatom a programomból a korábban használt select, copy paste parancsokat. És egy ponton elakadtam.
Amit korában úgy oldottam meg, hogy select, majd copy, azután célterület kiválasztás után
' Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, stb.
azt most wb.Range(...).Copy wbmásik.Range (...) szintaxissal. Eddig nincs is gondom, de a bemásolás beállításait (például xlPasteAllExceptBorders) sehogyan sem tudom belepréselni.
Szerintem vagy amiatt lehet probléma, hogy a B oszlopban szám van, vagy a lenyíló listában nem pontosan ugyanazok az értékek, mint a MF1-ben. A szóközök (vagy annak látszó egyéb karakterek) tudnak ám bonyolítani dolgokat.
Nézd meg lsz. hogy az A & B összefűzés hány betű és a MF2 lenyílókban levő összefűzés hány betű hosszú.
Azért ez elég necces, hiszen egy héten akár több nem összefüggő napot is ki lehet írni. Akkor mit írsz a kezdő és vég dátumhoz?
Továbbá mindkét cellát le kéne korlátozni az adott hét napjaira, ami azért elég melós (vagy egy jó makró kell hozzá). A naptárrészt pedig tele kellene képletezni az M,N oszlopkra hivatkozással, ezt szerintem csak makróval lehet megúszni .
Ráadásul, ha a naptárrészbe beírod az SZ vagy a B betűt, az adott dátum azonnal használhatatlanná válik egy olyan képlet számára, amiből dátumot szeretnél az M,N oszlopba beírni. Úgy látszik, ez megint csak makró.
Köszönöm szépen a segítségeket. Közben a nagyfőnök is rájött, hogy a színezés nagyon szép csak ő sem tud vele dolgozni ezért marad a "sürgős" "nagyon sürgős" drop-down list :D (amit aztán én feltétellel kiszínezek neki :D)
Lenne egy kérdésem:
Hogyan lehetne fkeres-nek több feltételt megadni. Vagy a következő dolgot kiíratni a MF2-re:
Munkafüzet1
A1: rendelészszám található
B1: egy poziciószám található
C1: terméknév található
Rendelésszámból lehet több azonos is. A rendelésszám+ poziciószám mondja meg végül mi a termék neve
Pl:
1,
A1:abc123(rendelés sz.)
B1:10(pozició) C1:kóla(termék név)
2,
A1:abc123(rendelés sz.)
B1:20(pozició)
C1: Ice tea(termék név)
Tehát mind a kettőnek ugyan az a rendelés száma így az sajnos nem lehet egyed ID-ként használni. Így ha abc12310-ről beszélek akkor az a kóla abc12320-nál meg Ice teát iszogatok
A Munkafüzet2-n pedig szeretném összedobni a listát két drop-down listből. Amint definiáltam a Rendelésszámot és a Poziciót elvileg meg tudom mondani mi a termék neve csak éppen függvényt nem tudok rá :D
A1-ben egy drop down listből kiválasztom a Rendelésszám-ot(pl Abc123)
B1-ben egy drop-down listből kiválasztom a Poziciószámot(pl 20)
C1-be a függvény kiírja a munkafüzet1-ről , hogy éppen Ice Tea-ról beszélek
Esetleg az M és N oszlopok automata kitöltésére van valakinek ötlete? Ezek elvileg azt a célt szolgálnák, hogy egy hosszabb szabi intervallum kezdő és záró dátumát megadják.
Az 1. verzió oldott meg nekem nemrég egy problémát. Szabadság tervező excel-táblát szerkesztettem, abban akartam azt megoldani, hogy a naptár része csak megadott formájú karakterláncot engedjen beírni.
A megengedett értékek:
- SZ
- B
- 2014.01.01-2015.01.02-ig terjedő dátum range
A dátumrange-re külön van megoldás, akkor viszont mást nem is enged, ebbe nem fér bele az "SZ" és a "B". Ha az "SZ" és a "B" van megadva egyéni értéknek, akkor meg a dátum nem megy. Maradt az a megoldás, hogy egy jó távoli oszlopban szépen felsoroltam az összes szóbajöhető értéket, majd annak a tartományát adtam meg adatérvényesítési feltételként.
Külön eljátszottam azzal is, hogy a táblázat képletezése védett legyen, viszont maradjanak szerkeszthető tartományok, hiszen az egésznek a lényege az, hogy ha a delikvens valahová "SZ"-t ír, akkor azt szabadság-igényként kezeli és kilistázza egy másik oszlopban.
Ebben teljesen igazad van. A HA függvény - esetleg többször használva - biztosan megoldja a problémát.
(Ráadásul én még ki is hagytam azt az esetet, amikor nem sárga,vagy piros a cella és így nem kellene benne szövegnek lennie - vagy törölni az előző szöveget -. Hiába, hamar munka ritkán jó.)
Hát szerintem nem cellaszín alapján kellene azokat az értékeket makróval beírni, hanem függvénnyel, ugyanazokat a feltételeket felhasználva, amelyek a színezés alapját adják.
Mellesleg, ha a színezés feltételes formázással ment, akkor sem tbando, sem Fferi makrója nem fog működni. De erre már biztosan rájöttél...
Ezt a makrót beírva egy modulba, elvégzi a kivánt feladatot. Hozzárendelheted egy billentyűkombinációhoz, vagy meghívhatod másik makróból.
Sub beiro() Const PIROS = 255, SARGA = 65535 Dim cl As Range For Each cl In ActiveSheet.UsedRange.Columns("D").Cells If cl.Offset(0, -1).Interior.Color = PIROS Then cl.Value = "Nagyon fontos" If cl.Offset(0, -1).Interior.Color = SARGA Then cl.Value = "Fontos" Next End Sub
Bemásolod ezt a makrófüggvényt egy vba modulba. Innenntől a =szini(cella) fgv. lekérdezi a cella kitöltő szinkódját. Amit aztán megadhatsz mint feltételt.
a C oszlopban változó szöveg van írva. Ez kaphat egy színt ami sárga vagy piros. És a D oszlopba odaíratom a sárgához, hogy "fontos" a piroshoz pedig "nagyon fontos". Ami meg nincs kiszínezve oda nem kerül semmi?
Ezt hívják adatérvényesítésnek. E 2010-ben adatok - érvényesítés címen találod meg.
Két lehetőséged van:
A munkalap egy részén felsorolod egymás alatt levő cellákban a választási lehetőséget, majd az adatérvényesítésnél kiválasztod a listát és forrásaként megjelölöd/kiválasztod az előbbi felsorolást.
Az adatérvényesítésnél a listát kiválasztva a forráshoz közvetlenül beírod a lista elemeit pontosvesszővel elválasztva.
T. Urak egy egyszerű (nem nekem) excel 2010 kérdésem van.
oszlopokbanban a megnevezés alatt ilyen cella jobboldalán lévő lenyíló menűben szeretnék választható adatokat elhelyezni. 2003as emlékeim szerint ilyen adatbázisféleképpen kell feltölteni de 2010ben nem találom sehol. hol? hogy?
Az alábbi kóddal tetszőleges word dokumentumba el tudod menteni a hivatkozást:
Sub hivatkozik() Dim hiv As Hyperlink, wd As Word.Application Set hiv = Sheets("Munka1").Hyperlinks.Add(anchor:=Range("A1"), Address:=eleresiutnev, TextToDisplay:="Ez egy link") 'MsgBox hiv.Address Set wd = CreateObject("Word.Application") wd.Visible = True wd.Documents.Add Sheets("Munka1").Range("A1").Copy wd.Documents(1).Range(0, 0).PasteExcelTable False, False, False wd.Documents(1).Saveas2 dokunev wd.Quit Application.CutCopyMode = False End Sub
Ez OK, csak neki azt kellene elérni, hogy egy e-mailben küldje el a megnyitandó linket VBA-ból. Az e-mailt kezelő Outlook pedig hanyagolja a szóközöket a linkben.
A DoEvents arra jó, hogy elvegye a vezérlést az exceltől és végrehajtson olyan feladatot, amit máshonnan pl. a billentyűzetről kapott, vagy kiírasson valamit, stb.
Pl. egy végtelen ciklust nem tudsz általában megállítani Ctrl+Break-kel. De ha benne van a ciklusban a DoEvents, akkor ez érzékeli a billentyűzetet és előbb-utóbb megáll. vagy egy formon ki akarod íratni a közbenső eredményeket, akkor abban is segít egy jó helyen levő DoEvents.
Vagyis, ha az excel nagyon el lenne "magával foglalva", akkor egy jó helyen levő DoEvents kibillenti ebből a helyzetből.
Üdv.
Ps. Sajnos nekem elfogytak az ötleteim, a "liba" viszont megmaradt ezek szerint. Fogalmam nincs, miért viselkedik veled így az excel...(Nem vesztetek össze jó alaposan mostanában :-))?)
Akkor más ötletem nincs, mint száműzni a szóközöket a mappák nevéből és aláhúzással helyettesíteni. (Mintha korábban lett volna is ilyen tiltás...)
Másik: jó alaposan megnézni az Outlook szabályait, hogyan lehet szóközös hivatkozást "megetetni" vele. Valami biztosan van a Helpben vagy valamelyik hasonló fórumon.
Sajnos ezek sem müködnek. De hagy kérdezzem, az mit jelent, hogy a DoEvents átadja a vezérlést az oprendszernek. Mikor szokták ezt használni? Honnan tudja az oprendszer, hogy miután megkapta a vezérlést mit csináljon?
Mi van, ha az egész elérési útvonalat aposztrófok (') közé teszed? Ez általában segíteni szokott az excelben és sql-ben is. Nem tudom Outlook mit szól hozzá, de egy próbát megér szerintem.
Sajnos nem jó. Vagyis jó, csak nem úgy, ahogy nekem kellene. Ha csak a fájl elérési útvonalát akarnám kiíratni, akkor elég lenne az Activeworkbook.Fullname parancs. De az a gond, hogy az elérési útvonalban van több mappa nevében is szóköz, így nem az egész útvonalat ismeri fel hivatkozásnak az outlook, hanem csak a szóközig.
"Az anyagigénylő elérési útvonala: \srv01vxyHasznos AnyagokIGÉNYELT ANYAGOKLabor_anyagigénylő 2014.02.16. 11 ó 46 p 22 mp.xlsm"
Szóval ennyi látható és a \srv01vxyHasznos mappát akarja megnyitni, de ilyen nincs.
Olyan kérdésem van, hogy vba-ban hogyan lehet olyan változót létrehozni, amely egy hiperhivatkozás? Egyik, céges szerveren lévő fájlra kellene mutatnia teljes elérési útvonallal.
Próbálkoztam úgy, hogy Dim hivatkozas as Hyperlink, de nem jött össze. Nem tudtam értéket adni neki.
Amúgy úgy jönne össze az értéke, hogy hivatkozas = utvonal & FN & ".xlsm"
A DoEvents sort csak beírnám a korrelációszámítást meghívó sor elé. Azt csinálja, hogy átadja a vezérlést az oprendszernek, majd ha elvégezte az ott levő feladatokat (vagy ha nincs mit), akkor vissza az excelnek.
Aztán arra is gondoltam, hogy felvenném makróval az adatelemzés meghívását. Utána ezt meghívnám a másik makró előtt (pl. rátenném egy billentyűkombinációra).
Az Analysis ToolPak VBA kikapcs/bekapcsot már kipróbáltam, hatástalan. Hogy mit kéne csinálni a Doevents-sel nem látom. A SendKeys-re én is gondoltam, de ott meg azt nem tudom, hogyan kéne rálépni a Menüszalagra, ahol aztán elugrálhatok az Adatelemzésig. De kösz a tanácsokat.
Van egy új fejlemény. Tehát az van, hogy a makró látszólag nem csinál semmit. De rájöttem, hogy elég ráklikkelni az Adatelemzésre, majd a Mégse gombra, és innentől normálisan fut a makró.
E fenti szimptómákból valaki talán rájön a hiba okára. És az elháríthatóságára. Én most azt próbálnám ki, ha tudnám hogyan kell, hogy makróval klikkelnék e 2 gombra.
Az excelem magyar, ATPVBAEN.xlam meg be volt kapcsolva. Amikor kikapcsoltam, hiányolta az 1004-es hibaüzenettel, amikor visszakapcsoltam, lefutott, de nem adta a korrelációs táblát, mig nem csináltam egy billentyüs Adatelemzéses feladatot. Utána végig oké volt amíg az excelből ki nem léptem. Ha nálad nem volt szűkség az Analysis Toolpak VBA billenytüs feladattal való inicializálására, akkor egyértelműen az én excelemmel van valami gubanc. Előbb utóbb rákényszerülök az újra húzására.
Első körben hibával kiakadt és az ATPVBAEN.xlam hiányára panaszkodott. Ha azt bekapcsoltam a bővítmény kezelővel, vagy a leírt parancsot bettem a makróba, akkor lefutott rendesen.
Ezért azt gondolom, nálad nincs bekapcsolva a bővítmény "Analyzis Toolpack - VBA".
Ezt megnézheted a bővítménykezelőben, mielőtt elindítod a makrót.
A válaszodból azt vettem ki, hogy behívtad filet. Próbáltad futtatni, és normálisan végig ment.
Vagy Run Time Error 1004-gyel kiakadt, de a ToolPak VBA bekapcs után megjavult.
Így volt?
Ezt fontos tudnom, mert ha igen, akkor nem az excellel van baj, hanem az én excelemmel. De hogy mi, az lehet hogy sosem derül ki. Az ATPVBAEN.xlam-t feltehetőleg látja, mert a makró hibaüzenet nélkül végig megy, csak látszólag nem csinál semmit, amíg nem csinálok manuálisan egy tetszőleges Adatelemzési feladatot. Még csak korrelációszámításnak sem kell lennie. Pl. teszteltem a mozgóátlaggal, ami már elég volt a makró hibátlan futásához.
Meg arra is rájöttem, hogyha csak a makrót tartalmazó füzetet zárom be, de az excelből nem lépek ki, akkor az újbóli filebehívás után szintén müködik a makró. De ha az excelből is kilépek, akkor a makró futásához már szükség lesz az ATPVBAEN manuális aktiválására.
Szóval elég gubancos. Ha van ötleted, örömmel tesztelném. Meg kérdem újra, nálad milyen lépések után futott le a makróm?
Egy mondat erejéig még visszatérve a feladatodhoz. Azzal ugye tisztában vagy, hogy az a bizonyos T103-as összegzésed nem csinál semmit az égvilágon? Se kéthetenkénti zárással, sem másképp. Mert Fferi ezért kérdezgette, hogy mire való, és nem a könyvelési titkaidra volt kíváncsi.
Azaz az Adatlapon a C10:K21 tartományt ( fejléc és számadatok ) elnevezi adatomb-nek, majd az oszlopok közti korrelációkat kiírja egy új lapra. OK. Lementem a füzetet, majd újra behívom. A makró hibaüzenet nélkül végig megy, de nem számolja ki a korrelácókat. Csinálok egy tetszöleges korrelációszámítást manuálisan, nem feltétlenül a makróban rögzített tartományon (Adatok/Adatelemzés/Korrelációszámítás/fejléccel-újlapra), majd futtatom a makrót, perfektül müködik, de csak míg le nem mentem. Az újbóli behívás után ismét kell egy manuális korrelációszámítás a makró működéséhez.
Egy netes tanács szerint a Tools-References-Atpvbaen.xls-t kéne aktiválni. Ezt meg nem találom.
Nincs oka tiltani, hiszen szintaktikailag helyes. Egyébként mindenki úgy hülye, ahogy akar. Kivéve az osztályozásnál. :-)
El tudok képzelni olyan teszthelyzetet, amikor egy összegből ideiglenesen kiveszem a tagokat, és csak egy marad, de nem szedem le a szumot, mert végül vissza akarom majd tenni a többi tagot.
Semmi különös, csak zavar a látványban, hogy ki van emelve az aktív cella. Harmonikusabb lenne a megjelenés a vastag kiemelés nélkül.
Egyébként meg sok mindent le lehet kapni az elsődleges kinézetből (sor- és oszlopazonosítók, munkalapfülek, stb.), ezért akár az is elképzelhetető (lenne), ha ezen is lenne egy-két feature a beállításokban.
Bocsánat, megkérdezném még egyszer, hátha most sikerül.
Azt szeretném megkérdezni, hogy az excelben az aktív cella vastag körvonalát el lehet-e valahogy tüntetni úgy, hogy közben az aktív cella aktív marad? (A beállítások között néztem, nem találtam, de lehet, hogy ott is be lehet ezt állítani. Ha makróval lehet, az is jó lenne.)
adott egy védett munkalap, ami tartalmaz 4-5 zárolt oszlopot és kb 10-15 oszlop nem zárolt, tehát módosítható oszlopot, még levédés előtt betettem 3 oszlopra szűrőt, hogy ha valaki megnyitja a fájlt tudjon szűrni kénye-kedve szerint, azt viszont nem tudom hol kell beállítani, hogy ezeket a szűrt eredményeket lehessen különböző módon rendezni is. Erre esetleg tudja valaki a megoldást?
Ami különösen bosszantó, hogy az Excel ezt megengedi. Bezzeg a =KÖZÉP(A1;2) képletnél követeli a harmadik argumentumot, holott tudhatná, hogy ilyenkor az ember a 2. karaktertől kezdve mindent szeretne az eredményben. (ráadásul programban a mid() függvény tudja ezt)
Bocs, megint lefoglalt a munka...T103... vagy máskor más cella = Kézipénztár nettó bevétel, kéthetenkénti zárással. Kis cég, kis foci... saját mini "könyvelői" excel-el, egyedi igény szerint alakítva.
Köszönöm, és most már legyen a fórum a további szakkérdéseké. Tényleg jó a fórum és szuper, hogy itt vagytok, akik segíteni tudtok!
Off: A napokban egy kiváló politikusunkkal (ilyen is van) volt egy beszélgetés. A kérdező azzal kezdte a beszélgetést, hogy van-e olyan kérdés, amit nem szeretnél, ha feltennék. Amire a vicces válasz a következő volt: "A, nyugodtan kérdezz bármit, nincs olyan kérdés, amit ne tudnék megkerülni."
A munkafüzet folyamatosan bővülő, több ismétlődő és változó tételből összeálló nettó adatot gyűjt egyetlen cellába, ami a kapcsolódó munkalapokon kiinduló tételként jelenik meg, és munkalaponként más és más szempont szerint rendeződik, igény szerint, egy munkalapon akár 10 féle műveletet is végrehajtva. Nem vagyok nagy excel spiller, csak igen lelkes felhasználó, így tudtam kitalálni, biztosan lenne más módszer is. Eddig biztonságosan működött, évek óta. Hm..... idén új műveletet is beépítettem....ez terhelhette meg? De hát egy excel ennél sokkal bonyolultabb dolgokra is képes! Az biztos, hogy a lezárt intervallum adatai már csak a archiválás miatt kellenek, számítást már ne is végezzen az a rész, amit javasolsz, megoldja ezt is.
Azok az adatok amelyek már hónapok/évek óta nem változnak, de még mindig képlettel számolod ki az értéküket, maradhatnak ugyanazon a helyen ahol voltak, csak értékké átalakítva (ahogy írtam, kijelölöd, másolás, ugyanabba a cellába/tartományba irányított beillesztés értéket). Természetesen így az adott képlet el fog veszni, de gondolom ez már nem bír jelentőséggel.
Másrészt viszont továbbra is kiváncsi lennék rá, hogy az =szum('fájlneve'!T103) mit és hogyan összegez?
Szia, ez is jól hangzik, holnap megpróbálom. Ugyanazon a munkalapon belül? Vagy pakoljam át egy új munkalapra sorban a már nem használt, de a visszakereshetőség miatt megőrzendő részeket? Jobb volna, ha ott maradhatna, a használt munkalapon.
Bocs, ne haragudj, elsodort a munka, most jöttem vissza. Igazad lehet, azonnal megcsinálom.
Hogy állandóan a kezdő sorokban legyenek az aktuális adatok, (más is dolgozik vele) minden váltáskor (kéthetente) a munkalap elejére szúrok be sorokat és oda másolom az előző részt, amit az aktuális munkafüzet adatokkal (másik cella) frissítek. Igen, lehet, hogy ez sok....egész évben kéthetente elmászik az a cella, ami adja az aktuális adatot..... bár idáig rendesen működött. Köszi és még egyszer bocs!
Van egy feladatom, amit nem megengedett makróval megoldanom, mert egy könyvvizsgálónak is értenie/látnia kell minden számítást a munkafüzetben. Tehát muszáj függvényt használnom, de azzal nem megy...
-tól -ig időpontok alapján kell kiszámolnom a 18:00-06:00 közé eső órák darabszámát (fél órás pontossággal)
"A" oszlop "B" oszlop eredmény oszlop
02:00:00 09:00:00 4 óra
19:00:00 22:00:00 3 óra
22:00:00 09:00:00 8 óra
0:00:00 09:30:00 6 óra
06:30:00 19:00:00 1 óra
16:00:00 1:30:00 7,5 óra
08:00:00 16:00:00 0 óra
12:00:00 0:00:00 6 óra
5:30:00 18:30:00 1 óra
A nehézséget nem csak az okozza, hogy 2 nap is érintett lehet (éjfélt átlépve), hanem az is, hogy az éjfél matematikailag egyenértékű az üres cellával (0). És meg kell tudnom különböztetni az üres cellákat is a függvénnyel.
Makróval is bénácska módszert találtam ki (felírtam 2*24 órát egymás alá fél órás bontásban, majd megjelöltem az első 24-ben a kezdő és -szükség szerint a 2. 24-órás listában a végső időpontot). A releváns időpontokat léptékenként, fél órás darabolással összeadogatva írtam be az eredményt... Szóval nem voltam elragadtatva... De ezen a vonalon nem mehetek tovább az elején írtak miatt.
Ez tipikusan a sok képlet gond. Lehet, hogy van egy vagy több olyan képleted, aminek az eredménye "frissítés" (pl. ilyen az indirekt hivatkozás). Ez azt jelenti, hogy valahányszor egy cella értéke módosul, ez a képlet újraszámoltatja az egész munkalapot.
Ezért javasoltam az automatikus számolás kikapcsolását.
Azt hiszem feladom, a másolás sem működik, de csak ezen a munkalapon van gond. Felépítem egy új lapra az idei adatokat. Köszi, hogy foglalkoztál velem.
Bocs, nem voltam egyértelmű (éppen egy fél órája várok arra, hogy beszúrjon 20 sort a munkalapba), de tényleg munkafüzetről és munkalapokról van szó. Már a gördítés is gondot okoz. Újabban, ha be akarom zárni ilyenkor, a ""program nem válaszol" üzenetet adja. Ez a szánalmasan kevés feladat nem foghat ki egy excelen, mégha 2003-as is. Rápróbálok a javaslatodra, köszi, mindjárt jelzem, mi a helyzet.
Megpróbálhatod azt, hogy beszúrsz egy új munkalapot, és arra átmásolod a lassú munkalap összes celláját mindenestül, aztán törlöd a régi munkalapot, az újat pedig átnevezed arra a névre, ahogy a régit hívták.
Ha ez nem segít, akkor mit értesz táblázat alatt? Értelmezési gondjaim vannak ezzel a mondattal:
"Excel táblázat, több munkalappal, a munkalapok a táblázattól kapnak adatokat, amikkel aztán tovább dolgoznak."
A korrekt elnevezések ezek lennének:
munkafüzet: az Excel fájl maga
munkalap: a munkafüzet lapjai, amiket Munka1, Munka2, stb. néven nevez a rendszer
táblázat: egy munkalap jól definiált, körülhatárolt része.
Az idézett mondat értelmében mondhatnánk, hogy táblázat = munkafüzet, és akkor egy munkafüzetről van szó több munkalappal. De máshol meg úgy hivatkozol a táblázatra, mintha az egy másik fájl lenne. Ha a "táblázat" tényleg másik fájl, akkor meg mit jelent a "Excel táblázat, több munkalappal" kifejezés?
milyen excel verziót használsz (2003,2007,2010,2013?)
=szum('fájlneve'!T103) egy cellát miért kell összegezni?
a fájlneve egy munkalapnév az adott munkafüzetben?
Valószínűleg túl sok a számolandó cella és ezért lassult be. Ilyenkor célszerű az automatikus újraszámolást átállítani csak kérésre. Az adatok bevitele után az F9 újraszámolja a cellákat. (Beállítások, számítási beállítások , munkafüzet újra számolása csak kérésre.)
Excel táblázat, több munkalappal, a munkalapok a táblázattól kapnak adatokat, amikkel aztán tovább dolgoznak. Az egyik munkalap olyan mértékig lelassult, hogy akadályozza a használatot, iszonyú lassan hagyja magát bővíteni, sorokat beilleszteni, másolni. Egyetlen ilyen parancsa van: =SZUM('fájlneve'!T103), a többi az erre, a táblázatból kapott adatra épülő feladatokat tartalmazza, némi formázással, háttérszín kiemeléssel. Ez a táblázatban kijelölt hely viszont kéthetente más cella.
A táblázat működése változatlan, gyorsan reagál, stb. Előre is köszönöm a segítséget!
Csináltam egy excel lapot, kinyomtatva havi szintű naplózásra szolgál. az első kockába írt dátumot használva kiinduló adatként, az első oszlop adja a napi dátumot, ez az aktuális hónap napjain kívül a hét napját is mutatja. Próbálkoztam azzal hogy a vasárnap valahogy első pillantásra jól elkülönüljön a hét többi napjától, háttérszínnel, vagy bármi más feltűnő módon (hogy a heteket gyorsan tudjam egy rápillantással előre hátra számolni).
Ebbe tört bele a bicskám, a help sem segített, nehezen hinném, hogy nincs rá megoldás. Próbákoztam az OpenOfice-val is.
Szerintem talált, süllyedt. Ugyanis beírva egy makróba: a=1 mrd, és b=10 mrd, akkor az 'a' variant/long lesz a 'b' meg variant/double. Tehát ezek szerint valami okból célszerű figyelmeztetni a usert, hogy az adott adat csak double típusú lehet.
A kvantummechanikai, csillagászati célprogramok, célgépeken futnak.
Mint ahogy nem ritkán, vannak azok a mezei számlázó programok, ahol egy számla (még) lehetséges sorszáma meghaladja a galaxisunk csillagrendszereinek számát: a csak feltételezetten 200 milliárd x 200 milliárdot - ami, véleményem szerint, több mint elég.:-)
A legtöbb feladat megoldására, talán egy 'dupla szó' is elég...
A data type that holds double-precision floating-point numbers as 64-bit numbers in the range -1.79769313486231E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values. The number sign (#) type-declaration character represents the Double in Visual Basic."
Ezek szerint a # nem azt jelenti, hogy nem lája a teljes számot, mivel a 10 mrd nem is 2 hanem 4 számjeggyel kevesebb mint a lehetséges 15. Csináltam is rá egy próbát. Az a = 123456789012345 - 1123456789012344 a vbe-ben így néz ki:
a = 123456789012345# - 123456789012344#
A kivonás eredménye a=1. Tehát 15 számjegyig valóban pontosan látja a számokat. De mit jelent a kettős kereszt?
A 2010-es excel 15 számjegy pontosságú. Ez azt jelenti, hogy bármely nagyságú számból csak az első tizenöt számjegy pontos (tizedes törteknél a tizedesjegyet nem beszámítva), az összes utána következő számot 0-nak számítja, és úgy is számol vele.
Próbáld ki, hogy egy cellába beírod a számokat folyamatosan 1234567890123456789, a cella formátumát számra állítod. Látni fogod, hogy meddig vannak számok és hol kezdődik a nulla.
A nagyságrend megmarad, de az utolsó helyiértékeket nem tudja már figyelembe venni.
Egy 0-t közelítő iterációs számításnál a vba az 1/1000 000 000 hányadost még elfogadja, de az 1/10 000 000 000 -hoz hozzábiggyeszt egy #-t. Ez mit jelent? Azt hogy, hogy az általa észlelt legkisebb különbség 1/1 milliárd? Ha igen, akkor hogy értendő az excel 14 számjegyes pontossága? Mivelhogy az 1/10milliárd annál 2 nagyságrenddel kisebb.
B+. Figyelmetlen voltam. A 2 tábládat konvertáltam az 1-re. No akkor, amit kértél. Most az 1 táblázatod van a Munka2!E1:H1000 tartományban. A Munka1-re meg ezeket a képleteket írd be egy 2x2 tartományba:
1 oszlop:
=INDEX(Munka2!$E$1:$H$1000;(SOR($A1)+1)/2;1)
=INDEX(Munka2!$E$1:$H$1000;(SOR($A1)+1)/2;2)
2 oszlop:
=INDEX(Munka2!$E$1:$H$1000;(SOR($A1)+1)/2;3)
=INDEX(Munka2!$E$1:$H$1000;(SOR($A1)+1)/2;4)
Majd ezt a 2x2 tartományt kell lefelé másolnod. Ezt úgy kell, hogy kijelölöd a 2x2 cellát, majd kurzorral rámész jobb alsó sarokra, és amikor a nyil keresztre vált, húzod lefelé.
Üdv mindenkinek! Nem vagyok egy „excel-guru”, ezért is kérném a Ti segítségeteket.A megrendeléseimet excel-be szoktam rögzíteni, és mos felmerült egy olyan probléma amire sehogy se tudok megoldást találni. A kérdésem: az első ábrán szereplő adatokat hogyan tudom egy másik munkalapon a 2.ábrán lévő módon megjeleníteni? Előre is köszi.
Hol lehet kikapcsolni az önjavító opciót ugyanis előfordulnak olyan hibák amiket nem tudok megkeresni mert mert beindul ez a folyamat és hibát jelezve lelövi a filet. Az Office 2003-ban még ez nem volt de az Office 2007-től már létezik emiatt már jó pár programomnak búcsút kellett mondanom.
Innentől nem értem a kérdést. Ha egy filet új néven vagy a régi néven új helyre mentesz, akkor onnantól, ha nem piszkálsz bele a mentés után, akkor nem kérdez rá, hogy mentse-e, mivel tudja hogy ez a változat már le van mentve. Ha meg belepiszkálsz, akkor meg az új néven illetve az új helyre menti vagy nem menti a választásod szerint. Ha bekapcsolod pimre True-ját, akkor nem fogja menteni. Nem vagyok benne biztos, hogy ezt nem fogod-e bánni.
Off: Elég idióta lehetett, aki ezt kitalálta, mikor a Dos alatt ott volt a CTRL + Alt + Del kombináció, ami most is megvan, csak beiktatódik a feladatkezelő a kilépéshez.
Azt szeretném megkérdezni, hogy az excelben az aktív cella vastag körvonalát el lehet-e valahogy tüntetni úgy, hogy közben az aktív cella aktív marad? (A beállítások között néztem, nem találtam, de lehet, hogy ott is be lehet ezt állítani. Ha makróval lehet, az is jó lenne.)
Ne haragudj, de ez súlyos tévedés. Igen gyakori eset, hogy például egy fájlt nem írásra olvasol be, hanem bizonyos információk beolvasására. És a beolvasás előtt például rendezed az adatokat valamilyen szempont szerint. De ezért nem kívánod menteni, sőt esetleg még zavaró is, ha pusztán ezért frissülnek a mentési adatai. De millió és egy egyéb ok lehet, amikor a programban nem kívánod menteni a használt fájlt.
Egyébként meg az a véleményem, hogy kínok közt fetrengve vesszen ki a világból, aki képes volt egy power gombot tenni a billentyűzetre oda, ahol tisztességes billentyűzeten a prtscr van, és egyetlen mellényúlással minden figyelmeztetés nélkül vész el az ember összes munkája.
Btw valahogy ihletet merítettem a hozzászólásodból és megoldottam, igaz nem valami elegáns. A megoldás az lett, hogy ha before_close-ba betettem, hogy ha hibás az anyagigénylő, akkor bezáráskor egy "Hibás" mappába menti a fájlt, amit néha "tisztítani" kell.
Valóban, de a táblázat a mentést makróval végzi egy új fájl létrehozásával (másik helyre), így a mentésre szolgáló kérdés felesleges, vagy ha úgy tetszik redundáns (amúgy írásvédett a fájl, szóval csak felülírással tudná menteni a felhasználó).
Amúgy a hozzászólásodból úgy jön le, hogy nem kivitelezhető, de erősíts meg légy szíves, hogy jól értem-e?
Ki lehet valahogy kapcsolni makróval, hogy ha történt egy fájlon változtatás, bezáráskor ne kérdezzen rá, hogy akarja-e menteni a változásokat, hanem alapértelmezetten a Nem aktiválódjon?
Én még nem találkoztam ezzel a hibával, de a help ezeket írja:
" Can't perform requested operation (Error 17)
An operation can't be carried out if it would invalidate the current state of the project. This error has the following cause and solution:
The requested operation would invalidate the current state of the project. For example, the error occurs if you use the References dialog box to add a reference to a new project or object library while a program is in break mode.
Stop execution of the current code, and then retry the operation.
An attempt was made to programmatically modify currently running code. For example, your code may have tried to read code from a disk file into a currently running module.
Although you can modify modules in the project while they aren't actually running, you can't make modifications to a running module. To make such changes, you must stop the module from running, make the additions or changes, and then restart execution."
Kösz. A segítségeddel nagyjából kisakkoztam, hogy a különbőző esetekben hogyan reagál az excel. Csak egyre nem jöttem még rá: Hogy a korábbi F4-es modulátnevezéseimet miért nem tudta megcsinálni: Can't perform requested operation -üzente helyette. Van valami tapasztalatod, hogy ezt mikor szokja üzenni.
Az egyes modulok változóit akkor tudod másik modulból elérni, ha Public-nak declaráltad, és akkor a modulnev.valtozónév alakban benne vannak a listákban is.
Az eljárások publikusak, ha nem privátnak hozod létre azokat és a modul.eljárás módon hívhatóak. Ha csak egy van az eljárásból, akkor ki tudja választani a VBA és nem kell a modulnév. Ha viszont több modulban is van ugyanazon nevű eljárás, akkor feltétlenül kell a modulnév is.
Próbáld ki, ha egy eljárást Private kezdőszóval hozol létre, akkor a modulon kívülről nem lehet meghívni, nem látod a projekt listákban a modulon kívül.
Egyébként mindig először az általános modulban keresi a program, ha nem írtad be a modul nevét.
Hogyan kell az egyik modulban-ben írt eljárásban egy másik modul modulváltozójának értéket adni, vagy lekérdezni, anélkül hogy a kérdéses változót projectszintűvé tenném?
A Kovalcsik könyv erröl ezt írja: Ha pl. a Dolgozo modulnak van egy Fizetes nevű változója, akkor az így érhető el: Dolgozo.Fizetes
Na most ezzel két problémám van: 1. A property ablakban nem engedi átnevezni a modult. 2. A module1-ben a module2.fizetes hivatkozas se müxik.
****
A Kovalcsik könyv azt is írja, hogy a külső modulok eljárásait is hasonlóan kell meghívni. Ezt csak nem értem. Mert nálam az osztálymoduloktól eltekintve bármelyik modulból bármelyik modul eljárása hívható. Akkor minek komplikálni?
Egyrészt köszönöm a gyors választ és az igyekezeted, másrészt elnézést, hogy nem konkretizáltam jobban a problémát az előző hozzászólásomban, mert adott devizapárok meghatározott percre vonatkozó árfolyamadata kellene, tehát pl. 2014.01.08. 14:43 EUR/USD.
A http://www.mnb.hu/arfolyam-lekerdezes címen az Aktuális deviza árfolyamok teljes letölthető verziója menüpontban xls formátumban letöltheted 1949.01.03-tól a mai napig a különféle pénznemek árfolyamát, de csakis dátum szerint.
Mikor ez megvan, egy INDEX függvénybe ágyazott HOL.VAN függvénnyel kikeresheted azt, amire szükséged van.
Excel 2010-ben már dolgozgatok egy ideje egy forex-es naplón, de a minap olyan problémába akadtam, amire nem sikerült megoldást találnom. Minden egyéb gondomat sikerült orvosolnom különböző makrókkal és angol fórumok olvasgatásával, de ez az egy megoldásra váró feladat kifogni látszik rajtam, szóval gondoltam leírom itt, hátha esetleg valaki tud rá megoldást, nagyon sokat segítene vele, mert már csak ez hiányzik, hogy elkészülhessek az egésszel.
Szóval problémám a következő: Egy általam kiválasztott múltbeli időponthoz tartozó devizaárfolyamot szeretnék kiíratni excelben. Tehát konkrétan egy cellába beírnám a dátumot és az időpontot percre pontosan, majd egy másik cellába a devizapárt, a 3. cellába pedig kiíratnám az ahhoz a perchez tartozó devizaárfolyamot. MetaTrader4-ből lenne a legcélszerűbb kivarázsolni ezeket az adatokat, de csak olyan képleteket találtam, amik az éppen aktuális árfolyamadatokat jelenítik meg (=MT4|BID! =MT4|ASK! =MT4|HIGH! =MT4|LOW! =MT4|TIME! =MT4|QUOTE!), múltbéli adatokra vonatkozóakat azonban nem. Alternatív megoldásként arra is gondoltam, hogy talán az internetről is lebányásztathatnám az árfolyamadatot, de egyrészt nem találtam olyan internetes forrást, ahonnan múltbeli adatok elérhetőek lennének, másrészt az internetes adatforrásból történő adatimportálás mikéntjét sem ismerem.:(
Ha valakinek van ötlete, tényleg nagyon sokat segítene vele! Előre is nagyon szépen köszönöm a válaszokat!
Igazán szívesen "segítettem", örülök, hogy találtál megfelelő progit.
Szerintem még egy kicsit kutakodsz és lesz pénzügyi - sőt könyvelő - program is. Lehet érdemes lenne még a "nagyoknál" (SAP, MS) is kicsit körülnézni, elég sok dolgot ajánlanak kkv-k számára is.
Lehet, kevesebb idő alatt megtalálod, mint amennyi ideig az Excelt nyúzni kellene, hogy valahogy kinézzen.
Már előrehaladott állapotban vagyok egy "tanulmányban", ami meg kísérli megmagyarázni az ilyen nevek, tartományok működését.
Egyelőre annyit, hogy ilyenkor a területeket is figyelni kell. Tehát esetedben az alma névvel meghatározott tartomány 4 területből áll és az egyes területek 1 - 1 cellát tartalmaznak. Tehát range("Alma").areas(1)(1).address=A1 stb.
Az egy dimenziós hivatkozás pl. range("Alma")(4).address az első területen megy végig lefelé. Az alma(2) csak azért adott jó eredményt, mert az A2 is benne volt a tartományban.
Második kérdésre:
Ha kitörölöd a dollár jelet - ami ugye az abszolut hivatkozást, azaz a mozdíthatatlanságot jelenti - akkor a név "mozgathatóvá" válik. Tehát az eredeti helyéhez képest az adott hely koordinátáinak megfelelően "elmozdul" a hivatkozás. Szebben látszik, ha mondjuk az I10-et nevezed el, majd utána pl. a L4 cellába írod be az =nevet.
megfogadtam a tanácsod, 25 ezerért mindent tudó standoló és készletkezelő programot lehet venni, konyhai hányadokat is számol, lekérdezéseket lehet vele csinálni xls-be, egyszóval tökéletes. 25 órát biztos elmarháskodtam volna egy excel táblával én is, és nem lett volna ilyen jó, mint ez.
Már csak egy ilyen pénzügyi program lenne a tuti, amivel tudnám kezelni egyszerre több üzlet bevételeit és kiadásait és persze a sajátomat is. De ilyet még nem találtam, ezért jobb híján excelek :)
Hát az idáig az eszembe sem jutott, hogy összefüggő területet ctrl-lal foglaljak tartományba. De ha már felhívtad rá a figyelmem, csináltam rá egy próbát. Alma névvel ctrl-lel deklaráltam az a1, b1, d1 és a2 cellákat. Majd sorban kiírattam a tartalmukat, hogy lássam hogy számozódnak a cellák. De csak az a1 a2-t volt hajlandó kíirni. Hogy lehet rábírni, hogy a többit ís kiírja?
for i=1 to 4
debug.print Range("alma")(i)
Next i
A névhasználattal kapcsolatban lenne egy másik kérdésem is. Definiálom az b1-t mint alma-t. Majd a névkezelőben átírom a $b$1 hivatkozást b1-re. Majd bármelyik cellából =alma-ra hivatkozva körkörös hivatkozás hibaüzenetet ad, és a névkezelő mutatja is, hogy most már a hivatkozó cella az alma. Itt ez hogy s mint?
Ha a név nem egy területből álló tartományra hivatkozik (Pl.A1;B2), akkor már pontokat tesz ki. (Akkor is, ha a két cella közvetlenül egymás alatt v. mellett van!!!! Ha Ctrl-t nyomva jelölted ki a két egymás melletti v. alatti cellát, akkor már nem számít összefüggőnek!)
Kicsit komolyabban: valószínű, hogy az eltolás kiszámítása "meghaladja a képességeit", ezért inkább a pontokkal jelzi, hogy vannak ám ott értékek, csak nem tudom megmutatni.
"Egyszerűen fogok egy sima oszlopot, aminek a szélességét beállítom akkorára, mint a 3 összevont cella együtt, abba beleteszem a szöveget, és leolvasom a sormagasságot."
Hogy ez nekem miért nem jutott eszembe.... Persze, feltételeztem, hogy a 3 cellád egyforma szélességű.
Íme, itt jön ki a "kollektív bölcsesség" eredménye.
Szerintem ez sem tökéletes, de már közel van. Itt is az a gondom, hogy egy cella nem azonos a három cella egyharmadával, ha érted, mire gondolok. Egyrészt az egyedi cellák nem egyforma szélesek, és esetemben egyikről sem mondható el, hogy szélessége az egyesített szélesség egyharmada lenne. Másrészt létezik olyan szöveg, ami az összevont 3 cella egyetlen sorában elfér, de mégis, a szavak hossza és elrendezése pont olyan, hogy egy cellában elhelyezve 5 sorra tördeli.
Én úgy oldottam meg, hogy létrehoztam egy userformot, azon egy labelt. A label tulajdonságait így állítottam be:
szélességét = az összevont cellák szélessége,
betűtípus = az összevont cellákbetűtípusa
autosize=true.
Programban megmódosítottam a label.caption értéket a mérendő szövegre, kiolvastam a label magasságát, és szoroztam 15/12.75 értékkel, ami úgy tűnik, egy konstans (a munkalapon a cella belső margói miatt ennyivel nagyobb a sormagasság). Ez a módszer az összes (kb. 300 db) tesztelt szövegre jól működött. Viszont azt nem tudom, hogy az említett konstans szorzó más karakterméret vagy más betűtípus esetén is ugyanaz-e, szóval itt van egy bizonytalanság.
De az ötleted rávezetett egy olyan megoldásra, amiben pillanatnyilag nem találok hibát.
Egyszerűen fogok egy sima oszlopot, aminek a szélességét beállítom akkorára, mint a 3 összevont cella együtt, abba beleteszem a szöveget, és leolvasom a sormagasságot.
Csak két problémám van vele. Az egyik, hogy a megoldás feltételezi a Courier használatát, mert abban a karakterek szélessége azonos. De mi van, ha nekem az nem jó? A másik, hogy a szavak hosszától függően a tördelt szöveg egy-egy sorában nem azonos a karakterek száma, sőt, elég nagy eltérés lehet közöttük.
Makró nélkül is meg lehet csinálni, a hivatkozásokat egy eldugott menüpont előcsalogatásával át lehet változtatni:
2010-ben:
Fájl - beállítások - menüszalag testreszabása
A választható parancsok helyénél megkeresed a Fájl lapot, ezen pedig a Fájlhivatkozások szerkesztése pontot.
Utána a jobb oldalon (menüszalag testreszabása) kiválasztod a kezdőlapot, majd új csoport hozzáadása (egyéni), ide
felveszed ezt a parancsot és OK
Ezután a kezdőlapon (valószínűleg a végén) megjelenik a Fájlhivatkozások szerkesztése. Ezt felhasználva módosíthatod az értékelő lapok hivatkozásait a kívánt mappára.
Ha mégis a makró mellett döntesz, akkor egy kiegészítés:
Az előző makróban van egy "kis" hiba. Ezzel kellene kicserélni:
Private Sub Workbook_Open() Dim alink(), mappa As String, ertekelo() As String, link As Variant ertekelo = Split("Értékelő1.xls,Értékelő2.xls,Értékelő3.xls,Értékelő4.xls", ",") mappa = Replace(ActiveWorkbook.FullName, ActiveWorkbook.Name, "") alink = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks) For Each link In alink For xx = 0 To UBound(ertekelo) If InStr(link, ertekelo(xx)) > 0 Then ActiveWorkbook.ChangeLink link, mappa & ertekelo(xx), Type:=xlLinkTypeExcelLinks End If Next Next End Sub
(és az értékelő lapokat kiterjesztéssel együtt kell beírni!)
Az is lehet egy megoldás, hogy a 3 összevont cellába írandó szöveg betűtípusát átváltod curier-re, a sablonon megszámolod hány karakter egy sor, majd a sormagasság =(integer(hossz(szöveg)/(karakter/sor))+1)*sormagasság.