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.
Alfanumerikus, de számjegyeket tartalmazó cellák egérrel történő másolásakor automatikusan nő az érték 1-gyel, numerikus adatnál ehhez a Ctrl billentyűt nyomva kell tartani.
Én egész egyszerűen készítenék egy oszlopot, amiben egyesével növekvően megvannak a számlaszámok. (Első cellába beírom, hogy 2013/0001 és lehúzom - növelni fogja a sorszámot automatikusan. A létrejött oszlop mellé fkeressel összekeresném a két oszlopot egy harmadikba. Ahol #HIÁNYZIK van, az nincs benne.
Ha egyszeri feladatról van szó, akkor nem kell makró. Tételezzük fel, hogy az egyébként következetlenül megadott számlaszámokról annyit biztosan tudonk, hogy 2013/-el kezdődnek, és utánuk szám jön, akár két számjeggyel, akár többel, de maximum 4 számjeggyel.
Legyenek az alapadataid az A oszlopban. Akkor a B1 cellába a következőt írod: =ÉRTÉK(KÖZÉP(A1;6;4)). Ezzel lefelé kitöltöd az összes cellát B-ben, majd rendezed a táblázatot a B oszlop szerint.
Ezután a C2 (vigyázat, nem a C1) cellába írod a következőt: =HA(B2=B1+1;"";"hiányzó szám"). Majd a képlettel kitöltöd a C oszlop összes celláját. A lyukak utáni sorban a C oszlopban megjelenik a hiányzó szám szöveg
Nem vagyok egy nagy Excel guru, de nem hiszem, hogy a program tudhatná, hogy mi az, aminek ott kellene lennie, de nincs. Ha ezt jól lehet specifikálni, akkor biztos lehet rá makrót írni, de talán nem is szükséges. Én azt csinálnám, hogy egyszerűen sorba rendezném az adatokat a számlaszám szerint (utána persze nem fontos elmenteni a változásokat, illetve vissza lehet vonni a rendezést, ha kell), és így már a sorok számozása alapján könnyen ellenőrizhetném, hogy folyamatosak-e a számlaszámok. Főleg, ha szükség esetén beszúrok annyi sort, hogy pl. a 2013/11-es számlaszám a 21-es sorban legyen, mert így mindig csak az utolsó számjegyet kellene figyelni. De persze az Autoszűrő segítségével is lehet ellenőrizni az oszlopban előforduló adatokat, mert az is sorba rakja őket, de ebben az esetben macerásabb ellenőrizni az egész listát.
Tudna nekem tanácsot adni valaki, hogy ha egy táblában több számlaszám szerepel, akkor hogy lehetne a hiányzót jeleztetni az excellel? Makrót lehet ehhez írni?
Pl: az oszlopban egymás alatt, de nem sorban vannak a számok: 2013/0011, 2013/0013, 2013/10, 2013/....
Sziasztok, azt ugye jól látom, hogy combobox és listbox használatánál (hosszú listánál) az egér görgető nem működik?
Találtam ugyan egy elég bonyolult megoldást(http://www.xtremevbtalk.com/showpost.php?p=1119288&postcount=5), de a szerző maga is megírja, hogy ha a program bármilyen okból megáll, az Excel valószínűleg összeomlik. Más meg erről megírta máshol, hogy nem valószínűleg, hanem biztosan.
Az elsőben már egyszerű kivonási műveletek is eltérést mutatnak a valóságos értéktől. De azt is kiderítik, hogy nem csak az egyszeres, hanem még a dupla pontosságú lebegőpontos számok is okozhatnak problémát. A legpontosabb a decimális típus. (máshol kiderül, hogy ehhez kell egy kis ügyeskedés, és egyébként ezzzel meg lassabbak a számolások)
A másodikban meg szóba kerül, hogy implicit adatkonverziók is okozhatják a jelenséget, és vannak példák a round-al kapcsolatos anomáliákra is.
Nem valószínű, hogy rájövök magamtól. Már csak azért sem, mert e tekintetben a súgó sem ad eligazítást. A VBA Round-nál például nem jelzi, hogy az argumentumoknak double-knak kell lenniük, míg WSF Round-nál igen. Talán majd valaki a spilerek közül.
Kösz, hogy foglalkoztál a kérdésemmel. A Round(6+2/10,1) nekem is helyes eredményt adott. De nézd meg az alábbi makrót, és az eredménylistáit.
Az excel munkalapon első blikkre úgy néz ki, hogy csak a WorksheetFunctionos (sor14) változat a kerekített. A többi nem. Ennek ellenére úgy néz ki, mintha a VBA-right a sor11-12-ben mégis a 6,2-t kerekítette volna. Hogy a c13 és a c15-ben miért 4-t írt, arról lövésem sincs. És az is meglepő, hogy a vba és az E-oszlopban levő munkalap rightok más számokat látnak.
Nemkülönben érdekes a vba változók listája. Ami szerint mintha a Round kerekítés barmolná el a kerekítést. De ez sem igaz, mert akkor az eredm3-nek meg kellene egyeznie a hossz változóval. De nem egyezik.
summa summárum: A Round és a Worksheet,Round mást számol. Most már csak az a kérdésem, hogy mit számol a Round. Tudja valaki?
Sub kerzur()
Dim a%, kulonbseg%, hossz!, ahossz!, eredm1#, eredm2#, eredm3#
kulonbseg = 8: hossz = 6
a = kulonbseg - hossz
ahossz = hossz + a / 10
hossz = hossz + a / 10
eredm1 = Round(hossz, 1) ''Nem kerekít
eredm2 = Application.Round(hossz, 1) ''Kerekít
eredm3 = hossz ''Kerekités nélkül természets, hogy nem kerekít
Sub kerekit() Dim a As Double, b As Double, c As Double a = 6.19999999809 b = Round(a, 1) c = Application.WorksheetFunction.Round(a, 1) Range("A1:A3").Select Selection.NumberFormat = "0.00000000000" Cells(1, 1) = a Cells(2, 1) = b Cells(3, 1) = c End Sub
Még annyit hozzáfűznék, hogy az a bizonyos 6,2, amit a a round nem kerekített az 6+2/10 müvelet erdményeképp jött létre. Tehát egy osztás is van benne. De megcsináltam ezt az összeadást egy rövid függvényben is, ahol viszont a round normálisan működött. ????
Azt szeretném kérdezni, hogy mi a különbség a Round és az Application.Worksheetfunction.Round között? A súgó alapján úgy véltem, hogy illene egyforma eredményt adniuk. Ezzel szemben azt tapasztaltam, hogy van amikor a Round cseszik kerekitett értéket rakni a munkalapra. Ilyenkor pont azt az eredményt adja mint Round nélkül. Ami ráadásul a forrásváltozóban levő számmal sem egyezik meg-
A Névadásnak nincs függvénye. Eljárást lehet rá írni. De annak szvsz nincs túl sok értelme, mert seperc alatt végigkattogtatható, aztán amíg nem törlöd, használhatod. De ha valami okból mégis szeretnéd makrósítani, semmi gond: a kattogtatás elött bekapcsolod a makrórögzítőt.
Köszönöm. A 2. pontot nem volt könnyű teljesíteni, de nagy nehezen rájöttem, hogy az ietimer.cab egy tömörített fájl, tehát tömörítővel kibontottam. Az így kapott ietimer.ocx fájlt bemásoltam C:Windowssystem könyvtárba. És a regisztráció céljából lefuttattam a regsvr32 ietimer.ocx parancsot. Innentől ment minden, mint a karikacsapás. Működik is. Mellesleg én is Excel 2003 alatt dolgozom.
Mindenesetre csak saját célra fogom használni, a kezemből kiadandó program esetén mégsem merem alkalmazni, mert valóban olyan igényeket támaszt, ami nem minden gépen teljesül.
"És még egy dolog: az Accessben ez a funkció gyárilag benne van :)". Most már befejezem azt, amit excelben kezdtem el, de ősszel nekiállok megtanulni az Accesst, és átgondolom, hogy ugyanezt a feladatot hogyan tudom majd ott megoldani.
Először is köszönöm szépen a gyors választ, mert excelben működik a dolog! Ezt a függvény használom a több cellásnál is, így itt sem hagytam ki, változtattam meg,hogy egységes legyen és az egyszerűség kedvéért másoltam ki egy két cellás példát.
Valójában Google apps(excel alapú) táblázatba szeretném ezt adoptálni, ahol jelenleg még nem találtam meg ezt a lehetőséget, de ha már excelben tudom mit, hol keressek ott is egyszerűbb lesz a dolog, vagy hasonló megoldást keresek esetleg beírható fv formájában. Szóval a segítség hasznos volt.
Ez így ebben a formában nem egzakt. Az igaz, hogy a program működése feltételez egy bizonyos telepített környezetet. Pl. kell hozzá, hogy a timer vezérlő telepítve legyen. De ugyanúgy kell hozzá az is, hogy az Excel telepítve legyen. Ebben szerintem nincs semmi különös. Számtalan program van, amihez .NET Framework ez-az-amaz kell, különben nem megy. Ez még nem von le semmit a program értékéből, viszont ha használni akarják, előzőleg a megfelelő keretrendszert telepíteni kell.