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.
Jó lenne, ha lehetne még javítani a pontosságon. Csak azért tettem a a makró elejére a solver pontosági beállításainak parancsait, hogy el lehessen játszani velük.
Mivel nekem nincs meg a fájlod, konkrét makrót nem tudok írni, de én a feladatot a következőképpen oldanám meg:
1. A Solver feladatot én külön területen (akár egy másik külön munkalapon) oldanám meg. Ezt a megoldást rögzíteném a makrórögzítővel, vagy a lenti kódot módosítanám értelemszerűen.
2. Egy olyan felhasználói függvényt írnék, ami első lépésben a paramétereit átmásolná a másik munkalap megfelelő celláiban, majd a rögzített makró meghívásával megoldja a Solveres feladatot. A függvény visszatérési értéke a másik munkalap változó cellájának megoldásként kapott értéke lenne.
3. Az eredeti táblázatba ezt a függvényt írnám be, ahova a lambda értéke szükséges.
Nagyobb táblázat esetén célszerű lenne az automatikus újraszámítást kikapcsolni és a függvény elején Application.ScreenUpdating false, a végén vissza true-ra allítani.
Szervusz! Most éppen nincs publikus mailem, küldtem egy mail-t már a tommyinak, úgyhogy ő tudná a címemet, de úgy látom neked sincs, pedig nekem is kéne az eredeti fájl. A gyorsításhoz mindenestre amit lehet ki kéne pakolni a cikllus elé.
Helló! Épp most reggel tudtam próbálgatni az eredeti tábláját, kiegészítve stromba makrójával. Persze a hivatkozásokat hozzáigazítottam a tom táblájához. Hát működik is meg nem is. Úgy tünik sok a 8-61 ciklus. 8-18 ra állítva pedig szépen csinálja a számításokat, de a végén vagy elszáll (eltünik) az egész excel, vagy valami hibát ír. De ment már normálisan is. Hogy mi lehet?
Van publikus méled? Elküldeném akár most. Egy órát itt ülök a gép előtt...
Mégegy megoldás a feltételes formázással: A1 cella tartalmazza a keresett összeget. Alatta és mellette pedig a számsorozat. A táblázat többi cellája üres, csak feltételes formázásnál a képletet kell választani és a megjegyzésben látható képletet kell beírni. Húzással vagy ecsettel a többi cellára is rámásolni. Így azok a számok érdekesek, amelyek a zöld színű cellák sorának illetve oszlopának elején találhatóak.
Nekem sehogy sem akar sikerülni ez a makrós dolog. Már feladtam. Esetleg ha valaki tud segítsen! Egy cellára a kódom a következő:
Sub Szamol() ' ' Szamol Makró ' ' SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8" SolverDelete CellRef:="$G$8", Relation:=3, FormulaText:="0,000001" SolverAdd CellRef:="$G$8", Relation:=3, FormulaText:="0,000001" SolverOk SetCell:="$H$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$G$8" SolverSolve End Sub
A képlet amivel számol a H8 cellában van és a következő: ABS(1/GYÖK(G8)+2*LOG10(2,51/(C8*GYÖK(G8))+($B$3/$B$2)/3,71)) A H8 cella a célcella, a módosuló cella a G8, a korlátozó feltétel pedig, hogy G8>=0,00001. A számolás a 8. sortól a 61. sorig kellene elvégezni. A C oszlop értéke mindig az aktuális sorhoz tartozó értékek. Vagy, ha valakinek könnyebb akkor a file- t is elküldhetem.
Általánosságban a feladatod az optimumszámítás egyik szép alapfeladata az ún. hátizsák-probléma módosított változata.
Legyen az a vektor a számsorozatod, k a kívánt összeg, egy olyan x vektort kell keresned, ahol az xi-k 1 vagy 0 értéket vehetnek fel (attól függően, hogy az ai-t kiválasztjuk-e az összegzésben vagy nem), ekkor ax=k (a és x skaláris szorzata=k) egyenletet kell megoldanod.
Ha ezen még tovább kell finomítanod, akkor x vektorra további feltételeket kell megadnod pl.:
a. a legtöbb egymás utáni szám legyen kiválasztva
b. legkevesebb szám kiválasztásával érjed el a megoldást.
Erre pedig tökéletes a Solver.
Az ábrán sárga a számsorozat, zöld az x (ahol a megoldást kapod), a világoskék mező egy segédoszlop, amiben az van, ha egymás utániak vannak kiválasztva az aktuális érték eggyel nő, ha nem, lenullázódik). A szükséges képletek az ábráról leolvashatóak (a kívánt összeg 5).
"Note If you do not see Solver.xls in the Available References list, click Browse. In the Add Reference dialog box, locate and select the Solver.xla file, and then click Open. The Solver.xla file is typically found in the C:Program FilesMicrosoft OfficeOfficeLibrarySolver subfolder."
"A feljövő Vb ablakban a Tools references-ben solver.xls bejelölése szükséges lehet a makróhoz" Mondjátok meg nekem, vaksi vagyok, hogy ebben a listában nem látom a solver.xls szöveget, vagy nincs talán a gépemen telepítve?
Melyik lehet a hozzá tartozó fájl?
Segítsetek, szeretném kipróbálni, buherálni ezt a solver futtrató makrót.