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.
A feltételes formázás a te barátod. Jelöld ki az oszlopodat, ahol az A és B váltakoznak, és a menü (felső sor) Kezdőlap fülén kattints a Feltételes formázás parancsra. A szabálytípusnál válaszd a "Csak az adott tartalmú cellák formázása" parancsot, ott pedig szerkeszd a szabályt úgy, hogy a cellaérték egyenlő legyen "A"-val, a Formátum résznél pedig állítsd be a betű színét pl. pirosra) és ha akarod még félkövérre is. OK és már működik is, hogy ha "A" betű kerül a kiválasztott oszlopod egyik cellájába, akkor az pirossal fog megjelenni. Ha nem működne, akkor több idézőjel van a szabályban a kelleténél, ami a szabály szerkesztésénél tudsz eltávolítani. Ha a "B" betűt is színezni akarod,akkor ugyanezzel a módszerrel válassz másik színt arra. A szabály hatása arra a tartományra lesz igaz, amely az Érvényesség résznél látszik. Ha a szabály választása előtt kijelölted a teljes oszlopot, akkor ezen a helyen a teljes oszloptartomány fog látszani.
Megtaláltam a teljes feladatot a YouTube-on, elküldöm neked a linket, hátha téged is foglalkoztat ennek a | jelnek a használata. Sajnos angolul megy alatta a komment, így számomra a szöveg nem elég jól érthető. Ha te jobb angol szövegértéssel rendelkezel, akkor biztosan minden megvilágosodik, mert a kommentelő külön magyarázza a videóban ennek a | jelnek a használatát is, de nekem ez több meghallgatás után sem lett lefordítható. A link: https://www.youtube.com/watch?v=4QaSwRgkeZo&list=PLrRPvpgDmw0kjL4875H36yNhWBb0f-nci&index=2
Nagyon jó lenne, ha te meg tudnád fejteni a HOL.VAN fv. ilyen használatát, mert engem legalább is erősen kíváncsivá tett ez a (számomra) szokatlan módszer. Kérlek nézz rá, és segíts a megfejtésben. Kösz előre is.
Excel táblázatom egyik oszlopában 1db A vagy B betű van írva. Hogyan tudnám az egyiket más színnel íratni? Több mint 100 sorról van szó és a betű naponta változik. Köszönöm
Szia, kösz a válaszaidat. Pontosan azért kérdeztem rá, mert eddig még nem találkoztam a cellák összefűzésének(??) ezzel a formájával. Elég fura, elég körülményes, és nem értem az indokát sem, amikor egy sima "&" is összefűzné a két cellát. (Ha már egyszer pl. lusták lennénk az ÖSSZEFŰZÉS függvény használatára.) Ez mitől jobb, mitől indokolt, egyáltalán mi miatt kellett(??) kitalálni? Te már használtad ezt korábban, vagy találkoztál vele korábban? A korábbi Excelek is elfogadták utasításnak?
A HOL.VAN függvény következő paramétere (ami már nem látszik a képen) mutatja meg az F és G oszlopok összefűzésének az oszlopát, ahol keresel. Nyilván ezzel (|) a karakterrel fűzték össze a két értéket, azért kell így rákeresni.
Szokás a 2 érték közé szóközt, kötőjelet, alsó kötőjelet, miegymást tenni. Ez azért kell, mert pl. a 111 és 50 összefűzése 11150 értéket ad, de ugyanezt kapod a 11 és a 150 összefűzésével.
Itt az INDEX, HOL.VAN függvény párossal keresel ki egy értéket egy tartományból.
A keresés sorát az F és G oszlopok együttes tartalma határozza meg. Valószínű, hogy egy oszlopban ezeket előre összefűzték, csak a képletnek a további része nem látszik a képen.
Érdekes, hogy az F-nél a 9. sort fűzik össze a G oszlop 8. sorával, de biztos így kell.
Már nem először segítesz! Kösz a gyors válaszodat. Ez tényleg hozza a keresett jelet, de tudnál mondani valamit arról is, hogy ez milyen Excel funkciót határoz meg? Látszólag ez a jel két cella tartalmát "segíti" összefűzni, de ez menne enélkül a fura karakter nélkül is, tehát nyilván ennél többről van szó.
Belefutottam egy tömbképletes megoldásnál egy olyan szintaktikába, amit eddig nem ismertem, és nem is találok a billentyűzeten olyan billentyűt, amivel ezt - működőképesen - meg tudnám valósítani. Erről van szó: &" I "& Olyan, mintha egy kis l betűt, vagy egy nagy I betűt tartalmazna idézőjelek között és - funkcióját tekintve - mintha két keresési tartományt kapcsolna össze: HOL.VAN(F9&" I "&G8).......... Tudnátok erről valamit mondani? Hogyan lehet ezt létrehozni? Előre is köszönöm.
Ahaaa, akkor ilyesmit már használok párat, csak jelölőnek hívom :-)
Több lapból álló formot használunk, több lapból álló munkafüzettel, és például szerettem volna azt, hogy ha adott munkalapról indítom a formot, akkor azt bezárva ugyanarra a lapra menjen vissza. Ezért egy rejtett jelölőbe beírtam, hogy honnan "jöttem", és ezt vizsgálom a form bezárásakor. De volt olyan textbox_change eseménykezelés, ami egy folyamat végén újra lefutott, de akkor már nem volt rá szükség. Ezért itt is egy rejtettjelölőbe írtam be, hogy "aktív", illetve "nem aktív", és ezt figyeli a textbox eseménye.
No, akkor az eredeti problémára visszacsatolva, arra kellene rájönnöm, hogy melyik esemény szúrja el a textbox működését, és azt feltétellé tenni. A baromi nehéz, hogy gyakorlatban időnként olyan combobox-ban is boxon belül ugrik tabot, amelyiknek nincs is tulajdonsága, illetve nem találtam ilyet a comboboxnál. Valamint az érdekes, hogy amennyiben egérrel kikattintok a boxból, majd vissza, akkor megjavul. Vagyis, ha kikerül a fókuszból, akkor megszűnik a hiba.
Hmm, közben elkezdett valami derengeni :-)
Programozó az ismerősök között mesélte, hogy van egy "Mondd el a gumikacsának!" mondatuk, Vagyis sok esetben nem kell valós problémamegoldás, hanem elég, ha valakinek (egy gumikacsának az asztalon) elmondani a problémát, és a probléma megfogalmazása olyan módon, hogy a másik fél is megértse, elégséges lehet a probléma okainak feltárására.
Most ilyesmit érzek :-)
Van pár textbox, ahol .setfocus-szal állok rájuk. Megnézem, hogy ezen a vonalon lehet-e probléma.
Szia! Az Application.EnableEvents metódussal tudod az Excel eseménykezelőjét ki-be kapcsolni, azaz szabályozni, hogy egy esemény lefusson vagy ne. Ez az Excel beépített eseménykezelőire van hatással - amiket az adott objektumnál lehet kiváltani (pl. Workbook_Open a munkafüzetnél, Worksheet_SelectionChange a munkalapnál stb. - de nem hat a Formokon végbemenő eseményekre.
A Userformok eseményeit úgy tudod szabályozni, ha a form kódlapján te magad felveszel egy - ajánlatosan publikus - logikai változót, ennek az értékét minden eseménykezelő első sorában megvizsgálod és az értékétől függően végrehajtod az eseménykezelést vagy átléped.
Pl.
Public esemenykell as Boolean
Private Sub TextBox1_Change()
If esemenykell Then
esemenykell=Not esemenykell ' a következő esemény kezelések kikapcsolása
Kapcsolódva Fferihez kérdezem, használsz-e eseménykezelést? Feltehetőleg igen.
És ha igen előfordul-e, hogy az eseménykezelőd új értéket ad az éppen elemzett textboxnak?
Ha igen, akkor haszálod-e az eseménykezelések tiltását. Ez az Application.EnableEvents property ami False-ra állítva megakadályozza, hogy az eseménykezelőn belüli értékadásnál ismét ráugorjon a vezérlés magára az éppen használt eseménykezelőre.
Az Application.EnableEvents sajnos formokon nem működik, ezért saját változót kellene bevezetni helyette.
A cél az, hogy egy fix cellába tudjam beírni az aktuális kiadás összegét, ami ekkor rögtön törlődne és kivonásra kerülne egy havi keretet tartalmazó cellából.
- Végignéztem, és mindegyiknek False a tulajdonság, de ha ez okozná a problémát, akkor mi állíthatja át időnként, és mitől áll vissza. Mert, ha egérrel kikattintok a boxból, utána jó lesz.
- Eddig nem is hallottam ilyet, nem tettem ezt változóvá sehol.
- Azt elfelejtettem írni, hogy comboboxoknál is csinálja, de azoknak nincs ilyen tulajdonsága.
A TextBox -nak van egy olyan tulajdonsága, hogy TabKeyBehavior. Ha ez False, akkor a TAB azt csinálja, amit szeretnél, ha True, akkor pedig azt, amit most hibának gondolsz. Meg kéne nézni, hogy van-e a textboxok között olyan, aminek True ez a tulajdonsága.
Talán valamelyik eseménykezelő babrál ki vele (feltéve, hogy vannak ilyenek benne - gondolom az automatikus kitöltést ilyenek végzik).
Megpróbálnám alaposan tesztelni a folyamatot, figyelve és feljegyezve minden történést. Előbb-utóbb elő kell fordulnia a jelenségnek és akkor vissza lehet nézni, mi történt előtte. Ezután megpróbálni ismét előidézni.
Sziszifuszi munka, de enélkül szerintem nem lehet felderíteni az okot.
Sok-sok textboxból álló formot használok. Sokféle szabály alapján töltjük ki, illetve sokféle automatikus kitöltési feltétel segíti a használatot.
Van egy visszatérő hiba, amivel nem tudok mit kezdeni. A textboxok között Tab-billentyűvel haladunk előre alapesetben simán. Bizonyos feltételek esetén automatikusan kitölt mezőket, majd ennek megfelelően a fókuszt áthelyezi egy következő utáni textboxra.
Időnként - egyszerűen nem tudom eseményhez kötni - a Tab megnyomására nem ugrik át a következő textboxba, hanem adott textboxon belül valóban Tab-ként működve eltolja a szöveget, vagy, ha már mögötte van, akkor a kurzor tolódik el, de nem lép ki a boxból. Arra csak egérrel átkattintással van lehetőség.
A lényeg, hogy ez itt fentebb a végrehajtás sorrendjében az utolsó, de a teljes kódhoz természetesen hozzá tartozik az AddressBuilder függvény is, tehát ez: Private Function AddressBuilder(Rng As Range) As String
A makró az valójában Visual Basic for Applications (VBA) programnyelven megírt program.
A VBA programkód az Excel munkafüzetben úgynevezett kódmodulokon van tárolva.
Ahhoz, hogy a makrót futtatni tudjad, létre kell hozni a munkafüzetben 1 db kódmodult, és a kódot oda bemásolni.
Kódmodul létrehozása:
1) Nyomj Alt+F11 kombinációt a billentyűzeten. Erre megnyílik a Visual Basic Editor.
2) Az ablak bal oldalán kell lennie egy olyan panelnek, aminek a címsorában Project - VBAProject felirat van. Ez a Project Explorer panel. Ha nem látszik akkor a View menüből, vagy a Crtl+R kombóval hívható elő.
3) Ha egyszerre több Excel munkafüzet is nyitva van, akkor itt (általában) mindegyik látszik. Kattints rá arra, amelyikben a gyűrűzési adatok vannak, tehát amelyikben a makrót futtatni akarod.
4) Menüből válaszd ki az Insert -> Module parancsot. Erre a Project Explorer ablakban, a munkafüzet VBAProject-je alatt létrejön egy Modules nevű mappa, és abban egy Module1 nevű kódmodul. (Persze ha már van egy vagy több kódmodul ebben a munkafüzetben, akkor a Modules mappa nem jön létre, csak az új kódmodul, automatikusan generált névvel.)
5) Kattints duplán a Module1 nevére (vagy jobb kattintás + View Code parancs). Erre az ablak jobb oldalán megjelenik a modul kódszerkesztő felülete. Ide kell bemásolni az általam korábban posztolt makrót.
6) Mentsd el a munkafüzetet a Mentés másként paranccsal. A mentési ablakban, a fájltípus alatt válaszd ki azt, hogy Makróbarát Excel-munkafüzet (*.xlsm). Ha nem így teszel, akkor a makró és a kódmodul mentéskor nem marad meg a munkafüzetedben, és legközelebb kezdheted megint az 1) ponttól.
Makró futtatása:
1) Nyomj Alt + F8-at
2) Válaszd ki a makrók listájából a Charter2 nevűt (ami jelenleg az egyetlen makró a listában).
3) Kattints az ablak jobb oldalán az Indítás gombra.
(Ehhez tehát nem kell a beállításokban a fejlesztőeszközöket engedélyezni, de ha megtetted, az nem baj.)
További tudnivalók:
1) A makró indításakor az adatokat tartalmazó munkalap legyen aktív.
2) A munkalapon az adatok elrendezése feltétlenül olyan legyen, amit leírtam.
3) Kell legalább 2 gyűrűazonosító az 1. sorba, és legalább 2 dátum az A oszlopba.
4) Az első sorban felsorolt minden gyűrű-azonosítóhoz tartozzon legalább 1 szám az alatta lévő oszlopban. (Vagyis csak olyan gyűrűket sorolj fel, amelyek fel lettek téve, illetve vissza lettek fogva.
5) Győződj meg róla, hogy az A oszlopban felsorolt dátumok ugyanahhoz az évhez tartoznak. Megtévesztő lehet, ha a cellaformátum miatt nem látszik az évszám. Tulajdonképpen beállíthatod az A oszlop cellaformátumát úgy, hogy látsszanak az évszámok is, a makró működését nem befolyásolja.
6) A program utolsó sora (CH.Axes(xlCategory).TickLabels.NumberFormat = "mm.dd.") az X tengely feliratának számformátumát állítja be. Elképzelhető, hogy ez a sor hibára fut, mert esetleg az Exceled nyelvi és/vagy területi beállításaidnak nem felel meg az mm.dd. formátum. Ha ez esetleg bekövetkezik, ne törődj vele, állítsd le a program futását, és végezd el a tengely formázását manuálisan.
Én vagyok a szakdolgozat író. Először is nagyon köszönöm a segítségedet! Viszont sajnos a makrók futtatásához nem értek és valahogy nem engedte végrehajtani ezt a műveletet. Olvastam, hogy először ki kell pipálni a beállításoknál a fejlesztőeszközöket, ami meg is történt, viszont ennél tovább nem jutottam. Ebben esetleg tudnál még segíteni?
Excel segítséget szeretnék kérni. Van egy egyszerű táblázat, egy vállalkozás napi árbevételét adja meg. Általában egy napnak csak egy sor van, de van hogy több részletben van bejegyezve egy nap, minden esetben ki van töltve a dátum cella.
Tehát F sorban a dátum, M sorban a bevétel (Ft). 12. sorban kezdődnek az adatok, jelenleg még nem érték el a 100. sort.
Azt szeretném kiíratni, hogy az elmúlt 30 napban mennyi volt az összes bevétel, aktuálisan mindig a mai naphoz igazítva.
Ezért tettem a D2-be egy MA() függvényt, a D3-ba pedig a MA()-30-at.
Az ötletem az volt, hogy SZUMHA függvénnyel íratom ki az eredményt, de nem működik.
A beírt képlet ez volt: =SZUMHA(F12:F100;">D3";M12:M100)
Sajna nem működik, 0-ír ki eredménynek, pedig az összegtartomány tele van számokkal.
Igen! Pont ez a feladat. Nagyon köszönöm hogy foglalkoztál vele és meg is oldottad. Egy fizetős oldalról visszadobták, hogy nincs olyan ember az adatbázisukban jelenleg, aki meg tudná oldani.