Hirdetés
-
GAMEPOD.hu
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
KBaj
kezdő
Köszöntök Mindenkit!
Platform, amit használok: Windows 7, Excel 2010. VBA-t értem és használom, autodidakta módon tanultam, úgy érzem nem vagyok kezdő, de a haladókat még csak messziről „nézem”.
Az alábbi esetben szeretnék segítséget kérni:
Nagyon sokat számolok, illetve számoltatok Excellel. Ehhez igénybe veszek Excelen belül, adott munkalapon fotó különböző programokat, bővítményeket. Az alap problémám az, hogy amikor egy számítási eset szélsőértékeit keresem, más-más paraméterekkel nagyon sokszor le kell futtatni egy „külső” programot Excelben. A programot egy billentyűkombinációval (pl. Ctrl+a) kell indítani, egérkattintással kiválasztani a megfelelő eljárást, majd az indító gomb egérkattintásával indítani az eljárást. Ezután saját párbeszéd ablakán keresztül kéri a pár darab bemenő adatait. Futás után az eredményeit Excel megfelelő celláiban közli és kilép. Excel - VBA értékelése után, ha az nem megfelelő, más paraméterekkel újra kell futtatni a „külső” programot.
A segítséget a „külső” program indítása, eljárásválasztása és indító paraméterek átadása automatizálásában szeretnék kérni.
Köszönöm szépen a segítséget.
Tisztelettel:
KBaj -
KBaj
kezdő
Sziasztok!
Már régen jártam ezen az oldalon. A legutolsó látogatásom óta is az Excelt tanulom. Most a beépített Solver alkalmazásnál akadtam el. Kérem, ha valaki tud, legyen szíves segítsen az alábbi problémámban: Excel 2016-ot használok sokféle bővítménnyel kiegészítve. A Solver bővítményt szeretném automatizált formában használni VBA-ban. A célérték cellába egy VBA-ban saját magam megírt egyedi függvényt helyeztem el, mely a munkalapon remekül működik, ahogy kell. A Solver azonban nem hajlandó használni. Pedig ez számolná ki Solver által módosított változócellák függvényében az új célértéket.
A segítséget előre is köszönöm:
Üdvözlettel: a friss újonc, KBaj -
KBaj
kezdő
válasz Bobrooney #44493 üzenetére
Szia Bodrooney!
Köszönöm szépen a választ. Ismerem a linket, igaz mivel angol nyelven nem tudok, így ezeket az oldalakat csak a google fordításán keresztül, az oldal lefordítása opcióval olvasom (tanulom). Nagyon jó oldalakat találok: innen tanulok. Igaz, borzalmas a fordítás, de igen nehezen: korábban tanultakból, gyakorlással és sok-sok türelemmel valahogy meg lehet érteni. (Marha nehéz!). A problémámra viszont még nem sikerül találni semmit. Lehet hogy Excel táblázati szinten kéne valahogy beleavatkozni abba, hogy a táblázat automatikus átszámolásával együtt minden saját gyártású függvényt is kiszámoljon, így talán a Solvernek is elég volna az eredményt vizsgálnia. -
KBaj
kezdő
Üdvözlet Mindenkinek!
Excel VBA használat közbeni problémáim.
Nagyon sokat használom az Excelt VBA-val. Általában munkalapfüggvényekkel feldolgozott adatok tovább feldolgozására használom többször oda-vissza. Kisebb-nagyobb és óriási ciklusokat is használok, melyek futási ideje néhány másodperctől több tízpercig is tart. A gyorsításhoz használtam a több irodalmi helyen javasolt gyorsítókat, pl: képfrissítés kikapcsolást, stb. Sokat gyorsít, jól működik. A VBA rutinjaim néha bonyolultak. Általam megítélt kritikus helyekre beépítettem egy-egy <Calculate> utasítást, hogy „bevárják” egymást (VBA és automatikus újraszámolás), mivel használják egymás eredményeit.
- De: Ennek ellenére nem adtak mindig egyforma eredményt, ezért lemondtam a gyorsításról. A további normál sebességű használatnál észre vettem, hogy futás közben, ha az <alt> billentyűt lenyomom gyorsabban fut a program. Ez nagyszerű, kb. 2-2,3 szoros sebességű, ami nyilván sok mindentől függ (pl: használt rutintól. …). És most jön a következő
- de: A program futási eredményi ugyanolyan megbízhatatlanok lettek, mint programozott gyorsításkor. Többször is kipróbáltam alt billentyűvel, mindig volt legalább egy eltérő eredmény. Alt nélkül meg nem tudom, hogy jó vagy rossz eredmény, de mindig következetesen egyforma eredményt adott. Innentől (alt nélkül) futtatom a programot, azonban van még egy
- de: Futás közben nem szabad a géphez nyúlni (semmihez!!!). mert ettől is begyorsul <alt> módjára és lőttek az eredményeknek.
Nagyon megdöbbentem, hogy a számítógép ilyen összevissza eredményeket hoz. Én azt hittem, hogy 2 szer 2 az mindig 4, de a gép szerint 3.2 vagy 2.8. Azután rájöttem: valamit rosszul csinálok. de mit?
Tisztelettel kérek mindenkit, aki tud valami magyarázatot a fent vázol jelenségekre az tegye közzé, hátha van még ilyen autodidakta, Excel alapfokát piszkáló mint én.
Köszönöm a segítséget. -
KBaj
kezdő
válasz Fferi50 #44620 üzenetére
Üdvözlet Kedves Fferi50!
Köszönöm szépen a gyors választ, sokat tanultam belőle, de sokat nem értettem meg. Az értetlenségemet kénytelen vagyok betudni annak, mint ahogy előző írásomból is kitűnik: zöldfülű kezdő vagyok. Azért foglalkozok ezzel, hogy tanuljak, okosodjak.
A feltett kérdésekre megpróbálok válaszolni:
… mert ettől is begyorsul … - az eset már hosszú ideje futó programnál volt. Bizonyára olyan szakaszhoz ért a belső vezérlés ami elveszi a képernyőt, igen rövid időre időnként felvillan, nem volt érzékeny semmire. Idegességemben kattingattam mindenfelé, nyomkodtam mindent. Valószínű esc hatására megállt és konstatáltam, hogy felgyorsulhatott, mert rossz eredményeket hozott. A továbbiakban nem foglalkoztam vele. A programban nincs DoEvents utasítás. Mint említettem kezdő vagyok: még nem ismerem (még nem!).
A többszintű képletezést nem nagyon értem. Idősorokkal foglalkozom, tagok belső kapcsolatait keresem. A válaszodat úgy értelmezem, hogy a többszintű programozás lenne hibás a rossz eredményekért. Ezt csak úgy tudom elképzelni, hogy visszacsatolás van a bemenő és a kiszámított adatok között, körkörös hivatkozáshoz hasonlóan. Nem értem.
Ezután írtál valami Volatile tulajdonságú függvényekről. Bevallom még nem (még nem!) hallottam róla. Meg kell ismerni, hogy tudatosan tudjam alkalmazni.
Nem írtál azonban az <alt> billentyűről. Nem értem a működését, egymagában mire van hatással. Miért gyorsul a VBA futása.
Köszönettel: -
KBaj
kezdő
válasz Fferi50 #44622 üzenetére
Üdvözöllek Kedves Fferi50! és Üdvözöllek Kedves Delila_1!
Meglepődtem, talán gyorsabbak vagytok mint a gépem. De félre a tréfával, köszönöm a válaszokat. Viszontválaszomat igyekszem egy-két szavas idézet után megadni:
„leállítanod a futást” : Természetesen annyit már tudok, hogy ha valami folyamatot félbeszakítunk, az nincs kész. Nem is néztem annak az eredményét. Örültem, hogy nem vesztettem el a fájlt, nem kellett újra indítani a gépet.
„bemenő adat egy képletnél egy másik képlet eredménye”: A többszintű képletezést azt hiszem már értem. Azt nem értem miért befolyásolja ez a számítást. Úgy emlékszem, hogy az Excel felülről lefelé és balról jobbra irányba hajtja végre a számolást. A VBA pedig ahogy a szerkesztőben látom felülről lefelé végzi el az utasításokat. Szerintem amit el kell végezni azt el kell végezni, függetlenül attól, hogy az milyen hosszú vagy újabb bemenő adat-e. Javítsál ki legyél szíves, ha nem jól gondolkodom. Ha ugyanis nem várná meg az egyik utasítás a másik elkészültét, nagy káosz lenne.
„képleteket egymásba építjük” : Ezt a törekvést is valószínűleg értem. De szerintem a „végtelenségig” nem lehet egymásba építeni. Ugyan nem ismerek gépi korlátokat de emberit igen: külalak, logika, átláthatóság, hibakeresés, stb.
„nagyméretű fájloknál” : Természetesnek tartom, hogy vastagabb könyvet tovább tart elolvasni, még ha gyorsan is tudok olvasni.
„Alt billentyűről” és „futás végén egy újabb számolást” : Ami jelenleg jobban izgat: az alt billentyű. Kipróbáltam a programomat: Vannak „szerintem” jó adataim (hosszú Long típusúak), amin mérni tudom az eltéréseket. Egy-egy ciklust futtattam mindig ugyanazzal a bemenő adatokkal, futás közben nem nyúltam semmihez csak az alt billentyűhöz. Felváltva indítottam a ciklusokat, egyszer normál módon, másszor indítás után bal oldali alt billentyű lenyomásával. A normál módú futás ideje 3 perc volt, az alt billentyűs 1 perc 07 másodperc. Öt futást néztem, a futások ideje közötti eltérés elenyésző volt: 2-3 másodperc, ami mérési hibának is tekinthető. De az eredmények igazolták korábbi írásomat. A normál futás minden egyes eredménye (számítógéphez híven) megegyezett az eredeti adatsorral, igaz nem néztem csak 4 tizedes jegyet. Az alt billentyűs futásnál az első kettő adat megegyezett, a többi három mindig más és más volt.
Ennyire jutottam. Kérdésekre szívesen válaszolok.
Köszönettel: -
KBaj
kezdő
válasz Fferi50 #44625 üzenetére
Kedves Fferi50!
Köszönettel olvastam a leveledet. A képletekről írottak nehezen mennek bele a fejembe. De ha így is van, megoldja a programozó, vagyis oldja meg, figyeljen oda. Jó következtetésre jutottam? Különben azóta beépítettem egy külön elindítható leglassabb számolással számoló rutint, ami jelez ha a megfelelő helyen nem ugyanolyan számot talál, nem csak 4 tizedest vizsgálva hanem amennyit lehet.
Az alt billentyű gyorsító hatását nem direkt kerestem és használtam, hanem véletlenül fedeztem fel. Szerintem azért lehet érdekes másoknak is, mert futás közben véletlenül is meg lehet nyomni (gondolok itt az elvetemült felhasználóra), és ha olyan a program, hibás eredményt hozhat.
A minta feltevése nem olyan egyszerű. Több nehezebben megoldható problémával is szembe kell néznem. Az előbbiekben említett programrész egy nagy fájlnak a része. Kísérletezek és sok minden van a fájlban. Néhány jellemzője: Totál Commander szerint 23,8 MB hosszú, van benne 31 db munkalap (nem üresek) , 13 db modul több oltalas VBA-val. Igaz találkoztam már nagyobbal is. Nem egyszerű ezt úgy megtisztítani, hogy publikus legyen, de ha sikerül megküldöm.
Köszönettel:
ui: Most vettem észre, hogy Delila is írt és hiányolja a válaszomat.
Sűrű elnézést kell kérnem Tőle, nem tudom jól használni a weboldalt: azt hittem, hogy amit Ferinek írok azt látja Ő is. Ezért a legutolsó komplett bejegyzésemet és ezt a bejegyzést is megküldöm Neki.
Üdvözlettel. -
KBaj
kezdő
válasz Delila_1 #44626 üzenetére
Kedves Delila_1
Nagyon sajnálom tudatlanságom miatt nem kaptad meg korábbi levelemet. Bocsánatodat kell kérnem, most újból elküldöm a korábban Fferi50-nek írott leveleimet.Üdvözöllek Kedves Fferi50! és Üdvözöllek Kedves Delila_1!
Meglepődtem, talán gyorsabbak vagytok mint a gépem. De félre a tréfával, köszönöm a válaszokat. Viszontválaszomat igyekszem egy-két szavas idézet után megadni:
„leállítanod a futást” : Természetesen annyit már tudok, hogy ha valami folyamatot félbeszakítunk, az nincs kész. Nem is néztem annak az eredményét. Örültem, hogy nem vesztettem el a fájlt, nem kellett újra indítani a gépet.
„bemenő adat egy képletnél egy másik képlet eredménye”: A többszintű képletezést azt hiszem már értem. Azt nem értem miért befolyásolja ez a számítást. Úgy emlékszem, hogy az Excel felülről lefelé és balról jobbra irányba hajtja végre a számolást. A VBA pedig ahogy a szerkesztőben látom felülről lefelé végzi el az utasításokat. Szerintem amit el kell végezni azt el kell végezni, függetlenül attól, hogy az milyen hosszú vagy újabb bemenő adat-e. Javítsál ki legyél szíves, ha nem jól gondolkodom. Ha ugyanis nem várná meg az egyik utasítás a másik elkészültét, nagy káosz lenne.
„képleteket egymásba építjük” : Ezt a törekvést is valószínűleg értem. De szerintem a „végtelenségig” nem lehet egymásba építeni. Ugyan nem ismerek gépi korlátokat de emberit igen: külalak, logika, átláthatóság, hibakeresés, stb.
„nagyméretű fájloknál” : Természetesnek tartom, hogy vastagabb könyvet tovább tart elolvasni, még ha gyorsan is tudok olvasni.
„Alt billentyűről” és „futás végén egy újabb számolást” : Ami jelenleg jobban izgat: az alt billentyű. Kipróbáltam a programomat: Vannak „szerintem” jó adataim (hosszú Long típusúak), amin mérni tudom az eltéréseket. Egy-egy ciklust futtattam mindig ugyanazzal a bemenő adatokkal, futás közben nem nyúltam semmihez csak az alt billentyűhöz. Felváltva indítottam a ciklusokat, egyszer normál módon, másszor indítás után bal oldali alt billentyű lenyomásával. A normál módú futás ideje 3 perc volt, az alt billentyűs 1 perc 07 másodperc. Öt futást néztem, a futások ideje közötti eltérés elenyésző volt: 2-3 másodperc, ami mérési hibának is tekinthető. De az eredmények igazolták korábbi írásomat. A normál futás minden egyes eredménye (számítógéphez híven) megegyezett az eredeti adatsorral, igaz nem néztem csak 4 tizedes jegyet. Az alt billentyűs futásnál az első kettő adat megegyezett, a többi három mindig más és más volt.
Ennyire jutottam. Kérdésekre szívesen válaszolok.
Köszönettel:Kedves Fferi50!
Köszönettel olvastam a leveledet. A képletekről írottak nehezen mennek bele a fejembe. De ha így is van, megoldja a programozó, vagyis oldja meg, figyeljen oda. Jó következtetésre jutottam? Különben azóta beépítettem egy külön elindítható leglassabb számolással számoló rutint, ami jelez ha a megfelelő helyen nem ugyanolyan számot talál, nem csak 4 tizedest vizsgálva hanem amennyit lehet.
Az alt billentyű gyorsító hatását nem direkt kerestem és használtam, hanem véletlenül fedeztem fel. Szerintem azért lehet érdekes másoknak is, mert futás közben véletlenül is meg lehet nyomni (gondolok itt az elvetemült felhasználóra), és ha olyan a program, hibás eredményt hozhat.
A minta feltevése nem olyan egyszerű. Több nehezebben megoldható problémával is szembe kell néznem. Az előbbiekben említett programrész egy nagy fájlnak a része. Kísérletezek és sok minden van a fájlban. Néhány jellemzője: Totál Commander szerint 23,8 MB hosszú, van benne 31 db munkalap (nem üresek) , 13 db modul több oltalas VBA-val. Igaz találkoztam már nagyobbal is. Nem egyszerű ezt úgy megtisztítani, hogy publikus legyen, de ha sikerül megküldöm.
Köszönettel:
ui: Most vettem észre, hogy Delila is írt és hiányolja a válaszomat.
Sűrű elnézést kell kérnem Tőle, nem tudom jól használni a weboldalt: azt hittem, hogy amit Ferinek írok azt látja Ő is. Ezért a legutolsó komplett bejegyzésemet és ezt a bejegyzést is megküldöm Neki.
Üdvözlettel. -
KBaj
kezdő
-
KBaj
kezdő
Help! Help! Help!
Sziasztok! Könyörgöm segítsen Valaki!
Excel VBA-ban az Application.EnableEvents=False / True utasításba belegabajodtam. Azóta nem működik a számolás, nem számolja ki a képleteket. Végigfut a vba kódon, de nem számol. Ha a táblán ráállok egy képletre F2 után Enterre kiírja az eredményt, nulla. Pedig nem nulla az eredmény. A képlet egyszerű: két cella összeadása. Még agép ki-be kapcsolása sem segít.
Köszönöm a segítséget! -
KBaj
kezdő
válasz Fferi50 #44726 üzenetére
Szia!
Köszönöm a gyors választ.
Is merem a felhozott javítási módokat, meg is akartam próbálni, de amikor behívtam úgy láttam működik. No akkor -mondom TESZT-. Elkezdtem próbálgatni a korábban felépített funkciókat, de belebukott, mert az Excel összekavarodott és azt mondta: újraindulok. Na elég -mondom- elég. Folytatom egy korábbi, még működő példány újbóli felépítését - nem lesz egyszerű.
Üdvözlet. -
KBaj
kezdő
Sziasztok!
Ismét egy problémába ütköztem. A feladatom megoldására Solvert használok, eddigi megelégedésemre.
Először működött a dolog, röviden jelképesen leírva: Solver makrórögzítővel felvéve >> kiegészítve VBA utasításokkal >> VBA programomba helyezve, működött rendesen. Csiszolgattam a VBA programomat és most már nem úgy működik ahogy akarom. Ugyanis minden meghívás után a "A változó celláknak az aktív lapon kell lenniük." ablak jelenik meg. Pedig szerintem minden stimmel: a változók azon lapon vannak ahonnan meg lett hívva (select vagy activete lap). Az OK gombra kattintva tovább megy és teszi dolgát, jól. Ez, az egész projektet nézve bosszantó. Ugyanis a futás közben nagyon sokszor meg kéne nyomni az OK gombot.
Mit csinálhattam rosszul?
Üdvözlet. -
KBaj
kezdő
válasz Bobrooney #44751 üzenetére
Szia!
Köszi, hogy érdeklődsz a témám után. Szerintem ránézésre minden megfelelő. Azóta kipróbáltam: ugyanarról a munkalapról dolgozva újból felvettem a makrót Excel fejlécről indítva, ugyanazokat cellákat használva. Persze rendben lefutott, csak a végző ablak (Megoldást talált ...) jelent meg, de ez természetes. Többször végig futott hiba nélkül. Egy furcsaságot tapasztaltam: kétszer jegyezte be az "SolverOk SetCell..." parancsot. Gondoltam sebaj, olvastam már interneten tőlem okosabb emberektől, hogy a makró rögzítő sok esetben igen bőven lejegyzi a parancsokat. A konkrét feladat megoldáshoz lehet, hogy nem minden sor kell. ... Nem baj én kétszer bemásoltam a kódsorokat az én programomba, úgy se ment, ill. kiírta a figyelmeztető ablakot.
Még egy módosítás: a fentebb említett parancs után van egy "SolverSolve" utasítás, ahogy a rögzítésben is van. Ilyenkor a futás végén megjelenik a "Megoldást talált" ablak, de ha szóközzel utána írjuk az "UserFinish:=True" szöveget nem kérdez, jóváhagyottnak tekinti a kiszámolt adatokat és továbbadja a vezérlést. Én így akarom használni.
Szívesen válaszolok további kérdésekre.
ÜDv. -
KBaj
kezdő
Sziasztok!
Saját korábbi hozzászólásomhoz szeretnék néhány gondolatot írni. VBA programozásaimkor fordult elő, hogy belövéskor Next nélküli ciklus hibát jelzett. A For-Next ciklusokkal semmi baj nem volt. De akkor hol a hiba? Nagyon sokáig kerestem a hibát. Nagy nehezen megtaláltam az End If nélküli hibát. Kijavítottam és minden rendben volt. Azóta ilyen hibajelzés esetén nagyon figyelek az End If-re is.
Az előbbiekből kiderült, hogy megtaláltam egy programozási hibát, de nem baj mert tudom rá a reakciót. De okosak voltak a programozók, mert ugyan nem határozták meg a hibát (gondolom nem akarattal), de nem engedték el, így hibajavítás nélkül nem fut a program.
Gyanítom, hogy ugyanígy jártam most a Solverrel. Nem is az a Hiba amit kiír, mert tovább enged, de valami van. Csak bosszantó mert gombnyomást vár. De akkor mi lehet a hiba, mert nem az amit kiír. Tanulságul.
Üdv. -
KBaj
kezdő
Kedves Mindenki!
Régen jelentkeztem, de eléggé lekötnek a munkáim.
A jelenlegi munkámban akadt egy feladat amiben nem tudok dűlőre jutni, ezért kérném és megköszönném a segítségeteket.
Feladat: Adott egy táblázat, melyben van egy range_data névvel elnevezett Range és egycellából álló CellaSzín1 nevű Range tartomány. A cél az, hogy egy tetszőleges eredmény cellában (minél gyorsabban) megszámoljuk a CellaSzín1 nevű cella kitöltő színével megegyező range_data celláit, melyek a keresést megelőzően Excel táblában beállított feltételes formázással lett megszínezve több féle színnel.
Az interneten való kutakodás után a következőkre jutottam: Talán a legjobb lenne táblafüggvényt írni, mert azt sokkal hamarabb elvégzi az Excel, mint a lomha VBA For-Next ciklust. Így az alábbival próbálkoztam:
Function CountCcolor(range_data As Range, CellaSzín1 As Range) As Long
Dim cel As Range
Dim xcolor As Long
Set range_data = Application.Range("Munka1!O3183:S3284")
xcolor = CellaSzín1.Interior.ColorIndex
For Each cel In range_data.Cells
If cel.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next cel
End Function
A tetszőleges cellába írtam a meghívó függvényt: =CountCcolor(CellaSzín1;range_data) azzal a szándékkal, hogy a tábla újraszámolás utasításra (amely lehet automatikus Excel vagy VBA külön utasítás) beírja a cellába a range_data tartományban talált CellaSzín1 cella alapszínével megegyező cellák darabszámát. De sajnos nem így van. A funkció függvény lefut ugyan, de nem működik stabilan, ha nem #ÉRTÉK hibát jelez akkor a kijelzett szám annyi mint a vizsgált terület „szín nincs” összes celláinak száma (CellaSzín1.Interior.ColorIndex=-4142; negatív, tehát nincs szín). Pedig lenne mit összeszámolni.
Nem tudom hogyan tovább?
Tisztelettel megkérek Mindenkit, aki tud segítsen.
A segítséget előre is köszönöm.
Kbaj -
KBaj
kezdő
válasz Fferi50 #45362 üzenetére
Kedves Fferi50!
Nagyon köszönöm, hogy ilyen hamar reagáltál a problémámra.
Válaszod felsorolása szerint fogok én is viszontválaszolni:
A függvény leírás és hívás paraméterek sorrendjét szinkronizáltam. (Tanultam: azt hittem mindegy a sorrend, hisz a VBA nevek szerint tudja azonosítani öket.) A függvénybe a Set sor azért került bele, mert később, sok-sok futás után VBA szinten módosítani (növelni) akarom a terület nagyságát. Ez gondolom felülírja az induláskor Excel táblán manuálisan beállított értékeket. Feltételes formázás: nem tudtam, hogy cella interior.color színe nem változik. Kicseréltem a feltétel sort. (Tanultam: feltételes formázás csak a mutatott képet (Display) módosítja?) Táblafüggvény: Eddigi értelmezésem szerint az a függvény ami az Excel megnyitásakor képernyőn jelentkező táblázat bármely cellájában beírható vagy található =f(x) formátumú, kódja „gyárilag” Microsoft programban vagy egyénileg VBA Modullapon van megírva. Tapasztaltam már, ha pl. átlagot akarok számolni VBA-ban For-Next ciklussal nagyon-nagyon lassabb mint a beépített ÁTLAG() függvény.
Még nem teszteltem a módosításokat, mert megjött az unokám, aki nagyon vártam.
Köszönöm a segítséget.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45364 üzenetére
Kedves Fferi50!
Először is köszönöm a gratulációt. 4 éves, imádom.
Köszönöm szépen a segítségeket és magyarázatokat is. A Set sort kiszedtem. Az If sorban betettem a DisplayFormat. szót, azonban így sem működik rendesen. Leírom mit tapasztaltam:
Function CountCcolor1(CellaSzín1 As Range, range_data As Range) As Long
Dim cel As Range
Dim xcolor As Long
xcolor = CellaSzín1.Interior.ColorIndex
For Each cel In range_data.Cells
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then
CountCcolor1 = CountCcolor1 + 1
End If
Next cel
End Function
- Az utolsó sorba tettem margón kívülre egy megállító pöttyöt, hogy ha az Excel rámegy akkor megálljon.
- A DisplayFormat. beírás nélkül lefut. Azt, hogy lefut látom, mert megáll a pöttynél és besárgul. A kis háromszögre kattintva tovább megy (ahogy kell) és az eredménycellában nulla szám jelenik meg.
- DisplayFormat. beírással nem tudom mi történik, de nem jár a pöttynél, mert nem áll meg. Azonban az eredménycella #ÉRTÉK hibaüzenetre vált.
- Az eredménycella újraszámolását (függvényem meghívását) F2 billentyű előhívással és javítás nélkül enterrel újrabeírással kényszerítettem ki.
A CountCcolor1 és CellaSzín1 végén az 1-es (majd 2, 3, ...) jelzi majd, hogy melyik színt keresi.
Próbáltam beírni a xcolor = CellaSzín2.DisplayFormat.Interior.ColorIndex sorba is, de ugyan úgy nem állt meg a pöttynél és #ÉRTÉK hibaüzenet adott.
Nem tudom mit csináljak, pedig szerintem a feladat nem olyan nehéz: meg kéne számolni, hogy egy területen hány piros, kék, …. kitöltőszínű cella van.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Delila_1 #45369 üzenetére
Kedves Fferi50 és Delila_1 !
Köszönöm Delila_1, hogy Te is bekapcsolódtál a beszélgetésbe. Érdekes a javaslatod, de kezdő vagyok és nem nagyon értem minden sorát. Különösen az Application.Volatile sort, miért kell bele? A CV > 40 sornál mi a 40-es szám?
Időközben kísérletezgetek: VBA futtatását Hibakeresés módszerrel: a kód sorokban megállító pöttyöket helyezek el és így vizsgálom, hogy hogyan változnak a változók.
Egy másik szintén félig kész függvényen érdekes dolgot tapasztaltam. A függvény eleje a későbbi programban felhasználandó változók kezdő értékét tartalmazza, konstans, munkalap cella konstans, munkalap cella, mely beépített függvény szerinti kiszámított értéket adja a cellának. Azonban az első két módszer szerint rendben megy, de a beépített függvény szerinti értékadást egyszerűen kihagyja (a példa szerinti a = Cells(12, Kezd) sor). A megállás helyét sárga színnel jelzett állapotban a kurzort a változó fölé víve Empty hibát mutat, pedig utána is elvégzi a munkát.
Továbbá egy ponttól nem megy tovább, kilép. Pedig nem szokatlan programsort kellene végrehajtania. Úgy tudom (és remélem jól tudom), hogy a VBA a programot ahogy látható a szerkesztő ablakban föntről lefelé, sorban egymás után kell végrehajtani. Ime a kódrészlet:
Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
k = 0
Kezd = Cells(8, 7)
Kezd5 = Kezd + 5
a = Cells(12, Kezd)
Előford = Kezd + a
Valószín = Előford + 90
Várak = Valószín + 90
Us = Cells(4, 7) + Cells(2, 7)
Cikl = Cells(5, Előford + 1)
Cells(6, Előford + 1) = Cikl
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents
Az utolsó előtti sort még végrehajtja (ez a megállás helye szerinti sor), az utolsót viszont nem, visszatér a munkatáblához Erték hibával.
Kedves Fferi50 bejegyzésedben a Cella.DisplayFormat.Interior.Color(index) utasítsró írsz. A fenti programrészletben nincs ilyen, mégsem emészti meg a VBA.
(Nekem is 2016 Excel van)
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45373 üzenetére
Kedves Fferi50 !
Szomorú vagyok. Nem gondoltam volna, hogy a feltételes formázás ilyen galibát tud okozni. Úgy látszik más utat kell választanom.
Hát így jártam.
Na, nem baj tovább keresem az utat. De sokat tanultan.
Köszönöm szépen az eddigi segítséget, tájékoztatást és útmutatást.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45384 üzenetére
Kedves Fferi50 !
Mint ahogy írtam is a legutóbbi bejegyzésemben, dolgozom az ügyön és most félállásban vagyok, de igen jók a kilátások, hála Neked. A saját számíze szerint átírtam a kódot, úgy néz ki szépen működik és gyors!!! Íme a példa:
'***** Prohardver nyomám Színes cellák számolása
Sub CountCcolor() 'Cellaszín szerinti darabszám
Dim cel As Range, cminta As Range, cter As Range, countcl As Long
Dim xcolor As Long
Dim j As Integer
Range("O14:S14").ClearContents 'Színtalálatok törlése
'If Selection.Areas.Count <> 2 Then MsgBox "Nem megfelelő a terület kijelölése", vbCritical: Exit Sub
' If Selection.Areas(1).Cells.Count = 1 Then ' Kijelölt területek azonostása: Count=1 Mintaszín
' Set cminta = Selection.Areas(1): Set cter = Selection.Areas(2)
' Else
' Set cminta = Selection.Areas(2): Set cter = Selection.Areas(1)
' End If
Set cter = Range(Cells(3183, 15), Cells(3283, 19)) 'Vizsgáladó terület
'A Mintaszínek sorra vétele
For j = 1 To 3
Set cminta = Range(Cells(20, 14 + j), Cells(20, 14 + j)) 'Mintaszín
countcl = 0 'Színes cella számláló
xcolor = cminta.Interior.ColorIndex 'A mintaszín Index száma
For Each cel In cter.Cells 'Végig vizsgálandó területen
If cel.DisplayFormat.Interior.ColorIndex = xcolor Then 'Ha egyforma a vizsgált cella és minta színindexe
countcl = countcl + 1 'Számláló növelése
End If
Next cel
Cells(14, 14 + j) = countcl 'A színből talált darabszám
'MsgBox countcl
Next j
End Sub
Köszönöm szépen az alapötletet.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45384 üzenetére
Kedves Fferi50 !
Nagy lelkesedésemben eljutottam egy korábban kiderített hibához, amit azóta sem tudtam megoldani, sem megmagyarázni. Konkrétan a 45372 számú bejegyzésemben tett tapasztalásomhoz. Miszerint egy darabig a VB végrehajtja az utasításokat és adott sortól egyszerűen otthagyja a programot, visszatér az munkalaphoz, mintha egy END SUB-ot kapott volna.
Nem tudom mit tegyek. Tudnál segíteni?
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45396 üzenetére
Kedves Fferi50 !
Ime a program, elég hosszú. Persze ez is függvény azért, mert ha fog működni SOLVER célcellájaként akarom alkalmazni.
Function Poisson2(Feltétel2 As Range) As Long
Call kep_ki
Application.Volatile ’Prohardver Delila_1 nyomán
k = 0
Kezd = Cells(8, 7) 'Feltétel kezdete oszlop
Kezd5 = Kezd + 5 'Javasolt számok terület előtti oszlop száma
Kezd22 = Kezd + 22 'Feltételek a javaslat válogatásához
a = Cells(12, Kezd) 'A munkatábla kezdő előtti oszlop száma
Előford = Kezd + a 'K(i) táblázat kezdő előtti oszlop száma
Valószín = Előford + 90 'P(x=1) táblázat kezdő előtti oszlop száma
Várak = Valószín + 90 'n(i) táblázat kezdő előtti oszlop száma
Us = Cells(4, 7) + Cells(2, 7) 'Táblázat utolsó sora
Cikl = Cells(5, Előford + 1) 'A számolás kezdete sor
Cells(6, Előford + 1) = Cikl 'Ez lesz a Ciklusváltozó kezdete
Range(Cells(Cikl + 1, Kezd + 1), Cells(Us, Kezd + 15)).ClearContents 'számítása sorok törlése
Range(Cells(Cikl, Előford + 1), Cells(Us, Valószín)).ClearContents 'K(i) táblázat törlése
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'Feltételek
Range("AF11:AJ11").Value = Range("AF4:AJ4").Value 'Manuális számítás
'Calculate 'A munkalapfüggvények számolása
For Cikl = Cells(6, Előford + 1) To Us 'Az utolsó + 1-ig
'1. : 'Az n(i-1) és az előző ciklusban kitörölt képletek újrafelépítése a Tartalék raktárcellából BF14
Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value = _
Range(Cells(Cikl - 1, Várak + 1), Cells(Cikl - 1, Várak + 90)).Value 'Az n(i-1) sor feltöltése
Cells(14, Előford + 1).Formula = Cells(14, Kezd + 49).Formula 'Képlet
Cells(14, Előford + 1).Select 'Kijelölés kitöltéshez
Selection.AutoFill Destination:=Range(Cells(14, Előford + 1), Cells(14, Valószín)), Type:=xlFillDefault
'[P(x=1) 13-dik sor]
For i = 1 To 5
For j = 1 To 90
Calculate 'A munkalapfüggvények kiszámolják a 14-dik
If Cells(13, Előford + j) <= Cells(11, Kezd22 + i) _
And Cells(14, Előford + j) Then
For k = 1 To 5
If Cells(14, Előford + j) = Cells(Cikl, Kezd5 + k) Then GoTo Köv
Next k
Cells(Cikl, Kezd5 + Cells(17, Kezd5 + i)) = Cells(14, Előford + j)
Cells(Cikl, Kezd + 10 + Cells(17, Kezd5 + i)) = Cells(13, Előford + j)
Cells(14, Előford + j) = ""
j = 90
End If
Köv: Next j
Next i
'2.
Cells(6, Előford + 1) = Cikl
'Calculate 'A munkalapfüggvények számolása
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Kezd + j) = Cells(12, Előford + Cells(Cikl, 3 + j))
Next j
Else
End If
'Calculate 'A munkalapfüggvények számolása
Range(Cells(Cikl, Előford + 1), Cells(Cikl, Valószín)).Value _
= Range(Cells(Cikl - 1, Előford + 1), Cells(Cikl - 1, Valószín)).Value
For j = 1 To 90
Cells(8, Előford + j) = Cells(8, Előford + j) + 1 'n(i) cellasor munkatáblában(i) cellasor
Next j
If Cells(Cikl, 4) Then
For j = 1 To 5
Cells(Cikl, Előford + Cells(Cikl, 3 + j)) _
= Cells(Cikl, Előford + Cells(Cikl, 3 + j)) + 1
Cells(8, Előford + Cells(Cikl, 3 + j)) = 0 'n(i) cellasor
Next j
End If
'Calculate
Range(Cells(Cikl, Valószín + 1), Cells(Cikl, Várak)).Value _
= Range(Cells(12, Előford + 1), Cells(12, Valószín)).Value
Range(Cells(Cikl, Várak + 1), Cells(Cikl, Várak + 90)).Value _
= Range(Cells(8, Előford + 1), Cells(8, Valószín)).Value
Next Cikl
Call CountCcolor 'Prohardver nyomám Színes cellák számolása**** Modul3 lapon
Poisson2 = WorksheetFunction.Sum(Range("O14:S14")) 'Solver Célcella
Call kep_be
End Function
Elég hosszú a program, van még mit csiszolni, egyszerűsíteni rajta. Mint már említettem kezdő programozó vagyok, nem értem a (</>) gombot mit jelent.
Segítségedet előre is köszönöm.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45401 üzenetére
Kedves Fferi50
Korábbi bejegyzésem szerinti hibát keresem: „Miszerint egy darabig a VB végrehajtja az utasításokat és adott sortól egyszerűen otthagyja a programot, visszatér az munkalaphoz, mintha egy END SUB-ot kapott volna.” Igaz módosítottam egy kicsit: a Cikl változóra később lesz szűkségem.Cells(6, Előford + 1) = Cells(5, Előford + 1)
'Cells(6, Előford + 1) = Cikl
Mindig a „Cells(6,….)=Cells(5,….)” sornál száll ki. Nem hajtja végre, pedig minden szükséges paramétere ismert, számszerűleg meghatározott.
Igaz, ha a Cells(6,…) cella megváltozna, kiváltana egy újraszámolási Excel műveletet, de ez a program elején az alábbiak szerint Call kep_ki rutinnal ki van kapcsolva:
Sub kep_ki()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.Calculation = xlCalculationManual
End Sub
Nem értem miért hagyja ott a rá bízott feladatot (ez nem számítógéphez méltó viselkedés) és mintha mi sem történt volna, visszatér oda ahonnan ideküldték. Rejtély.
Beszúrtam egy kísérleti sort a Kezd változó meghatározása után Cells(6, Kezd + 10) = Kezd. És most már innen szállt ki. Tehát NEM tudja végrehajtani a cellába írást? Ne feledjük Függvény rutinban vagyunk.
Tovább keresek.
Üdvözlettel:
KBaj -
KBaj
kezdő
válasz Fferi50 #45403 üzenetére
Úgy látom váltanom kell a lapon alkalmazott stílusra.
Szia!
Milyen számításra gondolsz? Én még mindig a korábbi megfigyelésemnél tartok: "És most már innen szállt ki. Tehát NEM tudja végrehajtani a cellába írást?".
Ne haragudj ezért a kérdésemért, de én korábban nem ilyen nyelvi környezetben éltem: mi az a privi?
Üdv. -
KBaj
kezdő
válasz Fferi50 #45409 üzenetére
Szia!
Hát igen. Korábbi VBA kísérleteimnél többször kaptam Next hibáról hibajelentést. Nem találtam a hibát. Minden For-nak meg volt a párja, le is rajzoltam a kapcsolódásokat. Már lassan ott tartottam, hogy hozom a fejszét és belevágom. Míg egyszer rájöttem. Találtam egy End nélküli If-et. Hát ez a baj. De akkor miért ír Next hibát? ..... Azóta ilyen hibára a keresést End hiányával kezdem. .... Magamban levontam a következtetést: MS-ék a VBa Help rendszerét nem elég mélyen csinálták meg. Lásd most is: a hibán átlépett, mintha minden rendben lenne és az ember azt hiszi mindent elvégzett, amit a programban előírtunk neki. Azóta minden hibajelentést fenntartással fogadok, nem biztos, hogy az a hiba ami le van írva. Tanultam: Ahogy tanácsoltad, hibakezelési sort érdemes beépíteni.
A mostani hibával kapcsolatban: a számításokat nagyrészt a munkalapon munkalapfüggvények végzik, a VBA kisebb számítások mellett ezek elvégzésük időbeni vezérlését és eredmények válogatását végzik. Azért is van vezérelve az újraszámolás, alaphelyzet kikapcsolt, számolás csak Calculate utasításra.
Mindennek ellenére tovább kísérletezem, mert az Excel szép.
Üdv. -
KBaj
kezdő
Szia!
Köszönöm, hogy hozzászóltál és tanácsot adtál.
Észrevételedre: Valóban a kód a G8-ra hivatkozik, de az nem üres hanem értéke 9, ami ránézésre csalóka, mert a G8 és H8 Excel művelettel cellaegyesítve van, igazítása középre (piros háttérszínnel). Hivatkozása viszont marad az első cella címe.
Az utóiratodra: Nagyon sokat kísérletezek Excel-VBA-val. Sokszor változtatok ezt-azt. A Feltétel2 nevű tartományt a program első harmadában használom először a'Feltételek
megjegyzés sor után:Range("AF11:AJ11").Value =
... , igaz nem név szerint, hanem tartalom szerint. Nem tudom, hogy helyes-e. Nem függvényként futtatva a programot, lefut rendesen.
Amit eddig tudok: Az1004 Application-defined or object-defined error
akkor jön elő, ha olyan utasítást kell végrehajtania, ami egy értékadás valaminek egy munkalapfüggvényt tartalmazó cellából. Persze a munkalapfüggvény helyes. Autódidakta megérzésem ezen az úton kell elindulni a hibakeresésben.
Minden hozzászólást szívesen fogadok. Köszönöm az eddigieket.
Üdv. -
KBaj
kezdő
Kedves Mindenki!
Beleakadtam egy problémába: szeretném a segítségeteket kérni!
Egy java alapú statisztikai feldolgozó programnak a bemenő adatfájlja vesszővel(!) elválasztott, .csv kiterjesztésű egyszerű szöveg. Excelben készítem elő az adatokat, azaz egy függvénnyel minden adatot (numerikus) soronként összevonva beviszek az első (A) oszlopba a pl.: =b1 & „,” & c1 & „,” & d1 & „,” & e1 … és így tovább, míg van adat a sorban. Majd csak az A oszlopot meghagyva mindent kitörlök, az A oszlop tartalmát Értékként visszamásolom ugyan arra a helyre és elmentem .csv kiterjesztettként. Az eredményt megnézve pl. Totál Commander Nézőkéjével: a szükséges .txt-hez hasonló fájl jött létre. És nincs ezzel baj, a program megérti, alakít még rajta és dolgozik vele. Itt jegyzem meg: mind ezt manuálisan végeztem. De nekem nagyon sokszor kell ezt megcsinálnom.
A .csv fájl készítést megpróbáltam VBA-ban, itt a részlete:
'A másolandó Adatsor
Sheets("… Adatsor").Select
Range(Cells(Cikl - 20 + 1 - Id, oszl), Cells(Cikl - 20, oszl)).Select
Range(Cells(Cikl - 20, oszl), Cells(Cikl - 20, oszl)).Activate
Selection.Copy
'Hová másoljuk
Workbooks.Add
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _
"C:\...\Vesszővel tagolt" & sz & Cikl & ".csv", FileFormat:=xlCSVUTF8, CreateBackup:=False
A részletben Cikl,Id,oszl,sz előre megadott intewger és string változók. Két hiba jelentkezik:
Az elkészített .csv fájl Adatsorai mind idézőjelek közé kerültek és így már nem megfelelően értelmezi a statisztikai program. A kód részlet utolsó sorában lévő mentés, ha van már olyan nevű fájl, mindig megkérdezi: cserélje-e a fájlt. A cél az lenne, hogy ne kérdezze; nyugodtan cserélje le.
Röviden ez a problémám.
Ha valaki tud, kérem segítsen.
Köszönöm. -
KBaj
kezdő
válasz Pakliman #45667 üzenetére
Kedves Pakliman!
Köszönöm szépen a reagálásod!
Valóban jó ötletet adtál; fájl komplett felülírása helyett megfelelő lehet annak legyilkolása, úgy sem kellenek már az adatok.
A bejegyzésed után azonban Fferi50 javasolt egy számomra „szebb” megoldást. Mint tudjuk egy feladat megoldása véges sok számú lehet.
Köszönöm, hogy figyeltél rám. -
KBaj
kezdő
válasz Fferi50 #45668 üzenetére
Kedves Fferi50!
Köszönöm szépen a reagálásod!
Mint Paklimannak irt bejegyzésemből kitűnik, Javaslatod a fájl mentési kérdés kikerülésére nagyon jól bevált és működik. Köszönöm szépen.
A csv készítéssel (egyszerűsítéssel) még küszködök.Sheets("CSV készítéshez").Select
Range(Cells(1, 1), Cells(1, 6)).Value = _
Sheets("… Adatsor").Range(Cells(1, oszl + 1), Cells(1, oszl + 6)).Value
Készítettem egy CSV készítés nevű munkalapot, mert az előbbi sok minden mást is tartalmaz, ami nem kell a csv-hez. Az adatok átvitelekor azonban az alábbi hibát jelzi és nem tudok mit kezdeni vele.
Kérem segítsél, ha módodban áll.
Köszönöm a segítségedet.[ Szerkesztve ]
-
KBaj
kezdő
válasz Fferi50 #45682 üzenetére
Szervusz!
Elnézést kérek, képként akartam csatolni, de nem sikerült (ezzel is küszködök). inkább leírom. a Range kezdetű sor okozza a hibát:
Run-time error '1004':
Application-defined or object-defined error
Nem értem, abból amit küldtem, hogy gondolod, hogy ragaszkodok...
A megküldött példának a következőket kéne csinálnia: Kiválasztja a munkalapot - jól. Az A1: F1 területre 6 cellába írja be egy másik munkalapról ugyancsak 6 cella tartalmát. Ez 6 oszlopos és egysoros adatfájl lenne. Utána, <ami még nincs kész> írnám a többi adatsort ugyanilyen szerkezetben. Ebben akódban nem gyűjtök semmit, cellát cellába másolok. Vagy valamit rosszul csinálok?
Fontos, hogy az adatok tagolása ne pontosvessző legyen, hanem sima vessző, mert azt nem érti a statisztikai program (angol nyelvű).
Köszönettel. -
KBaj
kezdő
válasz Fferi50 #45684 üzenetére
Szervusz!
Ez nagyszerű!
- A sok pont megtette a hatását. Mindig is küzdöttem a Range-vel, de kezdem érteni. Hurrá működik. A jó öreg With segített és megtette amit tudott és erre Te vezettél rá. Nagyon szépen köszönöm.
- Persze tudom ugyanolyan szerkezetű több sort is tudok mozgatni.
A "Pontosvessző" még "sima". Manuálisan: Excelben: kijelölök egy cellaterületet, CTRL+C vágólapra másolom - Nyitok egy új munkafüzetet - megnyíló lapjára CTRL+V bemásolom - mentem Másként az új munkafüzetet CSV UTF-8-ként - Totál Commander Nézőke=adatelválasztó pontosvessző>>>hát persze, hogy nem érti az angol. (Többször is kipróbáltam). Vajon mit csinálok rosszul?
Üdvözlettel.
Új hozzászólás Aktív témák
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Game Pass Ultimate előfizetések 1 - 19 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Eladó Steam kulcsok kedvező áron!
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest