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 birtokszerkezetet sztem felejtsd el. Ezt csak egy embertől fogadom el, és az nem te vagy.
Irodalma a témának óriási van magyar és angol (meg gondolom cseh, lengyel stb. :) ) nyelven is, érdemes valami középiskolai táblázatkezelős tankönyvet keresni. A Műszaki Kiadónak vannak egész jó könyvei a témában. :-)
De ilyen alap dolgokat, mint HA, FKERES, VKERES stb. egy 300 forintos, 5-ös Excelhez írt könyv is tudja. :) (Persze sztem érdemes valamilyen relevánsabb kiadványra beruházni, hátha érdemes lesz lapozgatni később is. :) )
Igazából gyakorolni kell, nagyon sokat. Annál jobbat nem tudok elképzelni.
Nincs valami kis oktatóprogram valahol vagy leírás az alap dolgokról? mert itt tök jól elmondjátok csak gondoltam lementeném hátha pár év múlva is szükségem lehet rá :)
Ha a D1-be azt írod, hogy =A1, majd ezt másolod, akkor a hivatkozás minden más cellában átalakul úgy, hogy a balra háromra levő cella tartalmára fog hivatkozni. Ezt nevezik relatív hivatkozásnak, mert tulképp te nem az A1-es cellára hivatkozol logikailag, hanem a D1-től balra háromra lévőre (ami formailag az A1).
Ha azt írod be, hogy =$A$1, majd másolod, akkor minden cella pontosan az A1-es cellára fog mutatni. Ezt abszolút hivatkozásnak nevezik, mert akárhová másolod a D1-ből a képletet, mindig pontosan az A1-et fogja meghivatkozni.
Persze nem feltétlenül kell a sor és az oszlop abszolút hivatkozását együtt használni vagy egyszerre elhagyni, lehet keverni is: csak a sor vagy csak az oszlop abszulivitását használni. Akkor jön jól, ha pl. egy szorzótáblát csinálsz, ahol az egyik tényezőnél a sor adott, de az oszlop mindig más, a másik tényezőnél pedig pont fordítva. Ekkor pl. a B2-be írhatod, hogy =B$1*$A2. (Egyébként az F4 lenyomásával kivarázsolható ez a hivatkozási forma az Excelből, ha a szerkesztőlécen a cella hivatkozásán állsz.)
Az abszolút hivatkozást én az FKERES-nél szoktam használni viszonylag gyakran, még a képlet lehúzása előtt, különben a "tartományban keres" szépen elcsúszik... :(
Bár nem exeles kérdés.. Vista oldalsávon az időjárásnál eltünt a kép (napocska vagy felhő) csak piros X lásztik. Leválaszottam újra felraktam, nem javította meg. Valakinek hasonló gondja volt, mi lehet a megoldás?
Ha esetleg valakinek még ilyen problémája lenne, a jól működő kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If 'For Each MyRange In Range(Tartomány.Address) ' Ez a sor volt a rossz
For Each MyRange In Tartomány ' Így jó If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then ' MinKereso = "Nincs ilyen cellaérték" MinKereso = 0 End If End Function
Esetleg csinálj három képet a háttérképedből az eredeti szétvágásával, és tegyél egy darabot a D3:F4, egyet a C2:C6, egyet pedig az B3:B6 cellákra és tedd egymás mellé őket. :)
Kicsit még nem értem ezeknek az UDF-nek a lelki világukat.
Nem tudom mikor futnak le.
Az én esetemben amikor lefut, akkor az összes munkalapon végigmegy, és számolja a képleteket, és valami oknál fogva az első munkalap tartományban számol, pedig a képlatben nincs munkalap hivatkozás, lehet ez a baj?
Az lett egy megoldás, lehet csak köztes, de így működik, hogy a thisworkbook-ba betettem az sheetactivate-hez egy calculate-ot, ami annyit jelent, hogy minden munkalap váltásnál újraszámol, és frissít mindent szépen!
"Bár biztos megoldható az is amit te szeretnél, txt fájlokat kezelni excelből."
A felülírás nagyon szépen megy (menne), sőt, a tartalmat is össze tudja hasonlítani, hogy egyáltalán felül kell-e írni a fájl tartalmát. De én úgy vettem észre, hogy az Excel (és a VBA) nem nagyon támogatja az ilyen szintű fájlműveleteket... :-(
Külön könyvtárba: ez is egy lehetőség, de szeretnék felhasználóbarát megoldást. ;-)
Írtam egy UDF-et (ez volt az első). Az a baj, hogy nem jól működik!
A kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If For Each MyRange In Range(Tartomány.Address) If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then MinKereso = 0 End If End Function
A kijelölt tartomány minden negyedik cellájáinak a minimumát adja, a nullát kihagyja. A probléma az, hogy ha ez a képlet "=MinKereso(B4:AA4;3)" több munkalapon szerepel, mindig az első munkalap tartományában dolgozik.
A kérdés, hogyan lehet egy UDF-et csak az aktuális munkalapra tartományára hivatkoztatni?
A három pont nálam azt jelenti, hogy "jól van, mondjad csak a hülyeségedet, de most már jó lenne befejezni". (Bocsánat a stílusért (vagy annak hiányáért).)
Általában ez inkoherens a környezetében lévő hozzászólásokkal és inkongruens a közlő szándékával, ezért inkább nem értem, mitsem félreértsem. A szmájli a végén meg teljesen érthetetlenné teszi számomra. :)
Van párszáz fájl (asszem valami 182 körül, de végülis mindegy), amik textfájlok, jegyzettömbben szerkeszthetőek (egy programnak a bemenő adatai, változók értékeit olvassa be belőle).
A fájlok tartalma struktúrált, tabulátorral tagolt. A legkönnyebb Excelben szerkeszteni és makróval kimenteni őket munkalaponként külön-külön fájlba (és ez a gyakorlat is).
Jelenleg az a megoldás, hogy ctrl+A, majd jegyzettömbben beillesztés, mentés. Ez sok változás esetén macerás, makróval gyorsítható.
Ez a makrós mentés szépen megy is, de ha az előző fájl már létezik, megkerülhetetlen külső ok miatt rajta van a read only bit. Ha nem új munkalapot hozok létre, hanem a tartalmát módosítom, akkor nem tudja felülírni a már létező fájlt (meglepő módon :P). Megoldásként le kéne venni róla a read only bitet, majd a kimentés után visszatenni.