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.
Sub Összeadás(paraméter1, paraméter2, eredményt_ide)
eredményt_ide = paraméter1 + paraméter2
End Sub
Sub Teszt
Dim összeg As Long
Összeadás 1, 1, összeg
MsgBox "Egy meg egy az annyi mint " & összeg
End sub
Lényeges, hogy az eredményt_ide változó ByRef legyen átadva a szubrutinnak. De mivel ez az alapértelmezés, nem kell feltétlenül odaírni. Csak ne ByVal legyen.
Józsi bával kiprobántuk futtatásügyileg is a két sört sort amit bekűdtél felülvizsgálatra.
A két sor - konteksztusból kiemelintvén - ippeg azt tette, amit elvártunk tőlük: megtanáltak minden dátumot.
Nosza, mondá erre Józsi bá, lássuk a teljes kódot, mer' ez így bakfitty. Vagy tán aztat kéne csekkolni, hogy a meg nem tanált dátumok nem-e esetleg-e szövegként vannak-e beírván-e.
Feltételezem, hogy azért nem lehet vele müveleteket végezni, mert szövegként vannak bevíve, amit valamiért az excel nem tud időként értelmezni. Próbálkozz a szövegfüggvényes felbontásával, majd azok value-sitásával.
De ha nem ragaszkodsz az amerikai dátumkijelzéshez, és a 19-07 közötti kezdő időpontokhoz, akkor a pár napja a data.hura feltett megoldásom is megfelelhet. A linkjét valahol lejjebb megtalálhatod.
Tegyél fel ide néhány konvertálást. Hogy mit mivé konvertált. De ne csak elfuseráltat, de 1-2 helyesen felismertet is. Hátha attól okosabbak leszünk. De küldhetsz priviben is egy kis kollekciót.
Ha végleg nem jutunk semmire, akkor csak egy nagyon babrás megoldás marad, hogy nem html-ként másolsz hanem formázatlan szövegként. Ekkor sajnos a táblázatformának lőttek, de a sorok szövegfüggvényekkel szétszedhető. Ha mindig ugyanazt táblázatszerkezetet másolod az excelbe, akkor még rentábilis is lehet.
Holnap még kísérletezem vele egy kicsit (a dátum és időformátumok kezelésében sajnos teljesen amatőr vagyok), aztán ha nem jön össze, megkérdezem a fórumtársakat. Hátha kapunk valami jó tanácsot.
Az exceles megoldás nekem nem jó, mert makroval akarom behívni külső forrásból, netről, és ott nem tudom megoldani, hogy wordbe másoljam majd úgy. Nem lehet vhogy beállítani, hogy ne változtasson semmit a formátumon?
Nagyon jol mukodik a makro, es nagyon sokat is segitett. Valoban nem lehet vele muveleteket vegezni. Erre nincs esetleg valamilyen megoldas,mert ez lenne az alapja a tobbi szamolasomnak.
Koszi.
Először word-be másold, ott cseréld ki a kritikus karaktereket, majd ezt másold be az excelbe. Így minden adatod string lesz amit aztán manipulálhatsz.
Hogyan lehet azt megoldani, hogy amikor excelbe beillesztek pl.: egy netről kimásolt táblázatot, akkor az ott lévő adatok változatlan formában maradjanak, azaz például ne váltsa át őket dátumra. Eddig bármilyen módon próbálkoztam, mindig átvált párat dátumra, vissza viszont már nem tudom őket alakítani, így elvesztem az adatokat.
Pontosan. De nálam 'a marad, szerintem magyar beállításoknál ez a normális. Az alt gr 3 csak a kalapjelesekhez kell: szövegben betű (amelyikhez megy: î, â, ô, ^u, ^e), Excelben hatvány.
Viszont °a ů °o é (alt gr 9 + e), ő (alt gr ö + o).
Tehát nem az aposztróf (shift 1, '), hanem a ´ (alt gr 9) megy fel az a-ra.
Aha! Így már értem, hogy miért tapasztaltam időnként, hogy 'a = á. Sőt, mint most kiderítettem, az "a = ä, az "o = ö. De nálam ehhez alt gr+3-ra nincs szűkség. És megjegyzem, ez nem excel, hanem windows sajátság lehet, mert ezt a posztot írva is így működnek ezek a billentyük
Nocsak. Én a Kovalcsik könyv alapján azt hittem, hogy az alt gr+3 megoldás csak a vba sajátja. Bár én ott se használom, mivel nekem ^^bs billentyűsorozat testhezállóbb.
Azoknak a jeleknek szándékosan ilyen a működésük! Úgy működik egyszerűen, ahogy Nyuszi leírta.
Azért van, mert ezek ékezetként felugorhatnak a következő betűre, ezért meg kell várniuk a megjelenéssel, hogy mit nyomsz még meg. Pl. alt gr 3 + a = â.
Még soha életemben nem használtam az excel beépített webquery-jét, sőt még nem is hallottam róla, ezért megkérlek, hogy mutasd be. Bár nem hiszem, hogy erre az mnb-s lap lenne a legalkalmasabb, mivel ott nem a weblapot vagy a részét töltöd le, hanem a felajánlott excellapokat, amikkel nálam semmi gond sem volt, szemben piquee tapasztalataival.
A kalap nálam is ilyen, úgy szoktam megoldani, hogy folytatom a gépelést. Pl. második hatvány esetén egyszer Alt Gr+3, aztán meg egy kettes, és akkor OK. :)
Ott még nem tartunk, hogy ne hívja be a file-t. Behívja, csak problémát jelez, amit idáig nem csinált. És emiatt aggódom, hogy hátha bekapott valamit.
Egyébként van valami zűr a beállításaimmal, mert több furcsasága is van. Pl. Behívom a filet, látszólag semmi gond vele, aztán kiderül, hogy a nyíl-billentyük süketek. Aztán újra behívom a filet, és akkor minden rendben van. Amihez viszont alkalmazkodnom kellett, hogy az ' az " és a ^ jeleket 2x kell beírnom, aztán a másodikat kitörülni, mert az elsőre nem hajlandó elfogadni őket, de a második leütésre mindkettőt beviszi.
Nagy szerencse, hogy kérted a solver beállításokat. Mert készítve neked elő, újra futtatva a solver talált egy 6 deszkás változatot :)))). Kemény forintokat spórolva ezzel, ha még nem vetted volna meg a 7-t. Az új futás linkje, magyarázatokkal:
Így már egy kicsit érthetőbb. Tehát nem a sorszámot akarod szorozni, hanem az adott sorszámhoz, ID-hez (ez utóbbi szerintem pontosabb, hiszen ezzel azonosítod a terméket) tartozó számot (beolvasások száma) kell szorozni az adott termékhez tartozó konstans számmal. Amiről feltételezem, hogy az ID értékből tudható, hogy az adott termék esetén mennyi a szorzószám. És ezt szeretnéd automatizálni, ha jól sejtem.
1. Ha a probléma csak technikai, azaz a beszkennelt lapot nem tudja kezelni az Excel, akkor nem tudok mit mondani. Ekkor tbando(#20057) észrevétele szerint karakterfelismeréssel digitalizálni kell a beszkennelt táblázatot. Jelzem, ez életveszélyes, hiszen a karakterfelismerés szinte sosem 100%-ban hibátlan, tehát ellenőrzés nélkül számolni vele hibákra vezet.
2. Ha az adatok már digitálisak, és excel táblában számokként állnak rendelkezésre, és a probléma csak az eljárás végrehajtása, akkor Delila #20064-es javaslata lehet jó.
Ha viszont az eljárás automatizálása a feladat, tehát hogy egy táblázatban tárolod az egyes ID értékekhez tartozó szorzószámokat, és ezt szeretnéd összeszorozni az éppen beolvasott (digitalizált!) adatlapon szereplő beolvasási értékkel, akkor talán az FKERES függvény lehet jó. De ebben tbando jártasabb nálam, én ezzel nem foglalkoztam.
Újraindítás lehet, hogy segít, de azok a fájlok, amiket az istennek sem akar megnyitni az excel, minden gond nélkül megnyithatók open office-ba, ami nem érzékeny a hibákra. Ha abban sikerül megnyitni, változtatás nélkül visszamented xlsx formátumba.
Beírod a szorzót egy tetszőleges üres cellába. Ctrl+c-vel másolod. Kijelölöd a tartományt, amit fel akarsz vele szorozni. Jobb klikk, irányított beillesztés, szorzás. Törölheted a szorzót.
Ha a szorzó 1, ezzel a módszerrel is könnyen számmá alakíthatod a szövegként bevitt értékeket.
Tegnap óta az excelem (2007) viszonylag sokszor azt csinálja, hogy a rendben lementett fajljaim behívásakor kíírja, hogy hibát észlel, de azért megpróbálja behívni a munkafüzetet. Miután behívta vagy találok hibát a munkalapon vagy nem. Ha találok, akkor az az, hogy egyes cellaképleteket nem tudja értelmezni. A hibás cellára ráklikkelve, majd F2 + enter után a hibás kijelzés megszűnik. Találkoztatok már ilyennel? És ha igen, kiderült az oka?
Megintcsak rákérdezek melyik mnb-oldalról van szó. Ugyanis megtaláltam a dátumos oldalt, letöltöttem a teljes 2012 évet, meg a 2013-t a mai napig, és minden tökéletesen müködött rajta.
Természetesen konstansra gondoltam. Csak ma agyilag zokni vagyok ezért is fogalmaztam ilyen hülyén. :-)
Szóval a scanner beolvas egy ID számot. Ez egy dobozt jelent amibe ID függően más és más mennyiségű termék van. És ebből csináltam a kimutatás t.
De nem azt szeretném látni a kimutatásban hogy az 12345 sorszámú tételt 2013.01.01 08:00 és 16:00 között 20 olvasták be. Mert ez csak a dobozt jelenti. És ez az amit meg kellene szorozni 40el mert ennyi termék van egy dobozban azaz 20x40dbot gyártottak le aznap
De ugyan ezen feltételekkel az 54321 sorszámú olvastuk be 20szor azt csak 10el kell megszorozni mert csak 10 termék van egy dobozban nem 40
Foglalkozott valaki az mnb arfolyamok letoltesevel? Itt szentsegelt egesz nap egy fiu, hogy valamit valtoztattak rajta, ezert nem lehet excelben hasznalni a datum es szam adatokat, mert szokozok vannak kozbeiktatva es valami masra kell konvertalni, vagy ujra begepelni az egeszet.
Sorszámokat szorozni statikus számmal? Azt még értem, hogy a statikus szám nyilván konstanst jelent, de mi célja lehet a sorszámmal végzett műveletnek. Az meg tényleg csak hab a tortán, hogy mindezt egy szkennelt dokumentumon:-)))
Nem lehetne a problémát egy picit közérthetőbben leírni?
De valahogy nem lehet megcsinálni, hogy a bizonyos sorszámokat statikus számmal megszorozzam?
Ezek szerint vannak olyan beszkennelt sorszámok, amiket lehet szorozni? Ezen most nagyon meglepődtem. Nekem még sosem sikerült. Igaz, nem is próbálkoztam vele karakterfelismerő nélkül.
Éppen most használtam adatbázisból exportált, szövegnek látszó egész számok és tizedesponttal jelölt számok felismertetésére is. :-) Már mondtad korábban is, de kiment a fejemből, így jókor jött az ismétlés.
A logikája pusztán annyi, hogy amikor az excel ezt a parancsot végrehajtja akkor újra értelmezi azt, hogy a cellák milyen tipusú adatot tartalmaznak. Az extra jóság, hogy nem csak az excel találgatására vagyunk utalva, hanem közvetlenül meg is mondhatjuk, hogy milyen adattipusnak kezelje a létrejövő új cellát. A trükk, hogy a létrejövő új cella ugyanaz mint a korábbi cella.
Ugyanezt a technikát lehet használni abban az esetben amikor az excel nem ismer fel számokat, ez tipikusan txt file-ok beimportálásakor szokott előfordulni.
egyetértek Delila-val. Ha tényleg ennyi a feladat, hogy a 60-nál nagyobb értékeknél automatikusan legyen "raktáron"
viszont azt javasolnám, hogy a táblázat struktúrában gondold ét, hogy nem érdemes-e változtatni. Pl legyenek egymás alatt a hetek, mert így sokkal könnyebb lesz bármilyen további műveletet, kimutatás készíteni.
Ráadásul lehet, hogy átláthatóbb is lesz, mert ugye most egy év alatt 104 oszloppa bővül a táblázatod.
Nem vagyok biztos benne, hogy a kép alapján jobban értem a feladatot. Most úgy sejtem, hogy ha a B oszlopba 60, vagy annál nagyobb értéket írsz, az E és H oszlop azonos sorában jelenjen meg a "ratáron" felirat.
Bár nincsenek sor-, és oszlopazonosítók a képen, úgy sejtem, hogy az első lehetséges beírás heyle a B4 cella. Az E4 képlete legyen =HA($B4>=60;"raktáron";""), ezt másold át a többi héthez a H4, K4, stb. cellákba.
Linkelem hogy néz ki a táblázat. Na most ebből van 100 egységig amihez hozzá lehet fűzni, hogy hanyadik héten történt a bejegyzés és megjegyzést lehet hozzátenni.
És azt szeretném, hogy ha van mondjuk 60 egységgel akkor ne egyessével kelljen kiválasztani, hogy raktáron hanem automatikusan legyen raktáron.
Köszönöm az ötletelést, nem belekotyogásnak veszem :-)
A helyzet az, hogy de a szerveren van az, amit te is írsz. A gond, hogy ide CSAK másolni tudunk, módosítani, törölni nem...tehát ide csak akkor másolunk fel valamit (Excel, Word dokumentum, fénykép), ha már kész.
Bocs, hogy belekotyogok, de nem értem, miért kell mindenkinek a saját gépére menteni a fájlokat. Mert úgy látom, ebből adódik a legtöbb gond. Nincs egy olyan központi szerver, amely mindig rendelkezésre áll? Mert ha van, akkor én ott nyitnék egy könyvtárat. Ebben létrehoznék felhasználónként egy-egy alkönyvtárat. És akkor mindenkinek a saját könyvtárába kerülhetne a mentés. És akkor könnyebb lenne az esetenkénti archiválása is az egész állománynak. És akkor talán a fájlnevek kezelésére is könnyebbb lenne kidolgozni valami egyszerűbb rendszert. És Te nem a pendrájvodra dolgoznál, hanem a szerverre, és ha kell otthon is az anyag, akkor a munka végeztével egyszerűen átmásolod magadnak.
Kezdjük az off-al: A 8. sorod hibás, mert az az 1 perc még 7 óra előtt volt, ezért a helyes érték 0, a 10. sorban meg 44.34 a helyes érték.
De a lényeg, hogy megcsináltam, amit kértél. Az eredményeket kénytelen voltam stringgé formázni (tehát nem tudsz számolni velük). Ugyanis, nem tudtam olyan formázást találni, hogy idő formátum kerüljön a táblázatba akkor is, ha az órák száma 24 fölé megy. Tehát a 36:01 helyett 12:01-et mutatott, és a szerkesztőlécen pedig 1900.01.02 12:01 jelent meg. Ha valaki tudna segíteni, hogyan lehetne ezt kiküszöbölni, az jó lenne.
A program végigmegy a táblázaton. Az esetleges üres sorokat kihagyja (üresnek tekinti azt, ahol a kezdő és a befejező dátum üres)
Ha csak a kezdő, vagy a befejező dátum hiányzik, akkor erre a program figyelmeztet, és az adott sort átugorja. Ugyancsak figyelmeztet, ha a kezdő és befejező dátum azonos.
Ha a kezdő és befejező dátum fel lett cserélve, akkor a figyelmeztetésen kívül be is írja ezt a tényt az adott sorban a munkaidő (C) oszlopba
Igyekeztem tesztelni a programot szélsőséges esetekkel is, egyelőre nem találtam hibát, de azért egy darabig ellenőrizd magad is, nem maradt-e benne véletlenül poloska.
Végül mindenkitől elnézést kérek, hogy ilyen hosszú programot másolok be ide. Ha még módosulna, azt majd a data.hu-oldalra másolom. És akkor a program:
Sub munkaórák()
Const forrásoszlop1 As String = "A", forrásoszlop2 As String = "B", céloszlop As String = "C"
Const kezdőóra As Integer = 7, végóra As Integer = 19
Dim üresdátum As Date, dátum1 As Date, év1 As Integer, hó1 As Integer, nap1 As Integer, óra1 As Integer, perc1 As Integer
Dim dátum2 As Date, év2 As Integer, hó2 As Integer, nap2 As Integer, óra2 As Integer, perc2 As Integer
Dim aktsor As Integer, céloszlopszám As Integer
Dim elsőnapióra As Integer, utolsónapióra As Integer, elsőnapiperc As Integer, utolsónapiperc As Integer, _
köztesnapióra As Integer, összesóra As Integer, összesperc As Integer, eredmstring As String
Csak ámulok, hogy mik vannak az excelben. Az igaz, hogy a cellatartalomból, le kellett vágni az óra perceket, mert velük a kijelölt 10 cellából csak az elsőt konvertálta, ráadásul azt is rosszul. De a csak dátumot mutató stringeket már prímán átalakította. Mondjuk a logikáját nem értem, szívesen megbeszélném veled.
Solverrel optimalizáltam. Ha sok ehhez hasonló feladatod van, érdemes kitanulnod. Ha érdekelnek a feladatod solver beállításai, felrakhatom a data.hu-ra.
Ennél van egyszerűbb módszer. Használd az adott cellán/oszlopon a Text-To-Column-ot (Adat fülön van, nem tudom mi magyarul).
Válaszd a Delimited opciót, adj meg egy olyan karaktert ami tuti NEM szerepel az adataid között, pld |
Utána kiválaszthatod, hogy milyen tipusú adatnak gondolod a cellaszétválasztás eredményét itt kell a Dátum formátumot választani és beállítani, hogy az év-hó-nap adat milyen sorrendben van.
A trükk az benne, hogy ez a módszer a cellatartalmak szétszedésére szolgál, de pont nem arra használjuk, csak rákényszerítjük az excelt, hogy átértékelje a cella tartalmat.
Most rájöttem egy módszerre, amivel mégis rá lehet bírni a magyar excelt a balra igazított angol dátumok felismerésére. Sajnos inkább csak érdekesség, mint praktikus. Átmásolod wordba, majd visszamásolod html-ként. Kétségtelenül kevébé babrásabb mint a vezérlőpultos állítgatás, de úgy néz ki, hogy csak a nn.hh.éé formátumként hajlandó értelmezni, az egyéb értelmezésekre nem ad lehetőséget.
Na ja, ha az excel felismeri, akkor semmi baj. De épp az a probléma, hogy a magyar excel nem ismeri fel, és ezért balra igazítja. De kösz, hogy válaszoltál, mert így legalább kiderült, hogy nem én vagyok béna. Annyit azért hozzáfűznék, hogyha szövegként viszed be a dátumot, akkor azt az excel szövegként értelmezve balra igazítja. De ettől még a dátumfüggvények felismerik, ha megfelelnek a verzió dátumformátum követelményeinek.
az a gond, hogy az eltérő oprendszerek eltérő helyen tárolják az asztal elérését és az asztal a userekhez van linkelve, azaz minden usernek van asztala, és ezen kívül van egy közös asztal is.
De a VBE -ben van egy CurrentDirectory parancs, amit be lehet állítani egy változónak
Ez, a meghatározott cellák adataiból hozza létre a fájl nevét, de nem elmenti automatikusan, hanem feldobja a "mentés másként" párbeszédpanelt, és a felhasználónak csak azt kell eldöntenie, hogy hová menti a fájlt.
Na, most a kérdés az, hogy meg lehet-e oldani, hogy a makró az asztalon hozzon létre egy a fájl nevével egyező nevű mappát, majd abba mentse a fájlt?
Bocsánat: amit írtam annak az alapja, hogy a furcsa formátumú dátum egy szöveg. Viszont a képen jobbra van igazítva, tehát valószínűleg dátum. Ebben az esetben viszont ugyanúgy lehet kezelni, mint a rendes magyar dátumokat, csak másképp van megjelenítve. Tehát ha az Excel felismerte, hogy dátum, akkor a dátumfüggvényeknek működniük kell rá.
Az a) változat, hogy szövegkezelő függvényekkel szétszeded. Keresed az első pontot, és az attól balra eső részt; keresed a pontot az első pont utáni részben (ilyet tud egy összetett BAL vagy KÖZÉP), majd a második ponttól a szóközig. A végén, ha jól szétszedted, a DÁTUM függvénnyel (ha jól emlékszem) összerakod.
A b) változat egy felhasználói függvény ugyanerre.
Ilyenkor teszem mindig hozzá, hogy a kulturált megoldás rég fel van találva reguláris kifejezések néven, csak az Excel nem tudja. :-(
Az lenne a kérdésem, hogy a 20024 postban levő dátum-számformátumok kezelésére, hogyan lehet rávenni a magyar nyelvű excelt a vezérlőpultos állítási lehetőségen kívúl?
A 20016 postban felrakott megosztásnál nem vettem figyelembe a fűrészlap+4 mm-t. Emiatt néhány szétvágási javaslat pár cm-rel hibádzik. Ezért újra lefuttattam a teljes btto hosszakkal. Természetesen ugyanúgy 7 párkányalap kell. de a szétvágásukhoz inkább ezt a javaslatot vedd alapul. Az 1-5 számúakat érdemes megfogadni, a No6-7 nél viszont variálhatsz.
Ja és majd elfelejtettem: A példa táblázatot nem egészen értem. Hogyan lesz a 2012.12.31 5:58 és 2012.12.31 12:22 közt eltelt idő eredménye 5? Ha az 5.58 helyett 7 órát veszek, akkor 12.22-ig eltelik 5 óra 22 perc. A 22 percet levágom? Vagy kerekítek? Mert a példák közt olyat nem láttam, ahol felfelé kellett volna kerekíteni. Szóval melyek a kerekítés szempontjai?
Az automatikus végigfuttatás egyáltalán nem gond. Egy kis ciklusszervezés néhány többletsor beiktatásával könnyű, pár perc. Gondolom, hogy a munkalap első cellájától a legutolsó cellájának soráig kell, ugye? Ha más a szempont, írd meg, hogy mettől meddig!
A percekkel szándékosan nem foglalkoztam, azt hittem a példádból, ahol kerek órák voltak, hogy nem szempont, esetleg felvételre sem kerül. Na meg így könnyebb volt a dolgom. Nem kellett számolgatnom vele. De majd megnézem holnap, hogy mit tudok tenni.
Nagyon jó kis makrót dobtál össze, Nagyon Szépen Köszönöm!!!!!!
Használható is, már csak két kérdésem lenne ezzel kapcsolatban.
Meg lehet azt oldani, hogy az egész oszlopon végig fusson a program és ne kelljen soronként kiszámítani? Néha 1000-nél is több sorral kell dolgozni és az elég hosszadalmas lenne
Úgy látom, hogy egész órákat mutat az eredményben, ezt lehet percre is alakítani?
Hát jött már egy megoldás RHCPgergo #19983 számú hozzászólásában. Ezt egy picit pontosítottam a #20009-ben. Ha csak a munkanapokat kell figyelembe venni, akkor ez elegánsabb, mint az én elképzelésem szerinti.
De azért ha belekezdtem, akkor már csak megírtam a makrót, igaz kicsit több kellett, mint 1 óra (volt az 3 is, de ez az én bénázásaim, meg a gyakorlatlanságom miatt). Ez nem hagyja ki a hétvégéket. Amúgy nem túl elegáns program, de hát VBA-ban nem vagyok profi:-(((
Az alapelrendezésnél arra gondoltam, hogy a legjobb, ha a kezdési és a befejezési időpont egymás mellett van (A és B oszlop). Az eredmény, azaz a munkaórák száma pedig a C oszlopba kerül. De ha ez nem jó, akkor a program elején lévő konstansok értékadásával tudod ezeket módosítani.
A kezdő és a befejező időpontot is paramétereztem, azaz ha változik valamelyik, vagy mindkettő, azt is a konstansoknál tudod módosítani.
A program futtatás feltétele, hogy abban a sorban állj, amelyiknél a munkaórák számát ki akarod számítani. Hogy melyik oszlopban vagy, az mindegy!
Ha a két időpont fel lett cserélve, akkor a céloszlopba azt írja, hogy Hibás dátumok. A második kisebb, mint az első. Ha a két dátum azonos, akkor 0-t ír, de téged figyelmeztet a hibára.
És akkor a program: (Ha nem tudod betenni Visual Basic modulként, akkor segítek)
Sub munkaórák()
Const forrásoszlop1 As String = "A", forrásoszlop2 As String = "B", céloszlop As String = "C"
Const kezdőóra As Integer = 7, végóra As Integer = 19
Dim dátum1 As Date, év1 As Integer, hó1 As Integer, nap1 As Integer, óra1 As Integer, perc1 As Integer
Dim dátum2 As Date, év2 As Integer, hó2 As Integer, nap2 As Integer, óra2 As Integer, perc2 As Integer
Dim aktsor As Integer, elsőnapióra As Integer, utolsónapióra As Integer, köztesnapióra As Integer, összesóra As Integer
Ha numannak ez megfelel, akkor nem is erőlködöm tovább:-))), bár abban a feltételben nem vagyok biztos, hogy jó, mely szerint "csak akkor működik tökéletesen, ha a kezdő és a vég időpont is beleesik a" 7-19-es intervallumba.
nagyon szépen közönöm ... becsuktam az ablakot . . .
és azt tudod, hogyan számoltassam ki , hogy hány db "GY" vagy "V" vagy "D" van abban a 6db cellában összesen? mindegy melyikkel példáznád le, helyettesítem a megfelelő helyre.
Meglehetősen egyszerű megoldása lehet a problémámnak én mégis vagyok olyan hülye, hogy ne tudjam megoldani.
Szeretném, hogy a képen látható D4-es cella megjelenítsen egy db! eredményt a 3db variáció közül (GY;D;V), az M18;R18-as cellák értékétől függően.
pl.: M18 > R18 (2-5) ,akkor D4-nek "V"-nek (vereség) kell lennie, hiszen kevesebb gólt lőtt, mint az ellenfele.
ha M18 < R18 (5-2) ,akkor D4-nek "GY"-nek (győzelem) kell lennie, hiszen több gólt lőtt, mint az ellenfele. ha M18 = R18 (2-2) ,akkor D4-nek "D"-nek (döntetlen) kell lennie, hiszen nem lőtt többet sem, kevesebbet sem az ellenfelénél.
Addig egyszer már eljutottam, h jól számolt mindent, csak sajnos "D"-nek számolta az üres cellákat (amennyiben M18 és R18 is üresen állt) - és ez a baj
Szeretném ha az üres cellák értéktelenek maradnának, teljesen üresek, "0" sem jó, szóval "D" CSAK akkor kell, amennyiben az eredmények 0-0,1-1,2-2,3-3, ... 99-99 stb., a teljesen üres cellékat nem tudom kihagyatni vele a "HA" függvénnyel - pedig ez lenne a cél , nem is értek a többihez - sem :) Mondjuk logikus, h az "üres" az "0" , de ha valaki nem tud nagyon gyorsan segíteni, akkor kiugrok a 4.ről(már nyitva az ablak)
Amint ez megoldódik, ki kellene számoltatni V4 - cellával, hogy D4:S4-ig Mennyiszer szerepel a "GY" - ennyi (egszerűen a "GY"-k dbszáma kell ide. ennyi)
a többit már én is megoldom (nagy vagyok, mi?! :D) SZUM - az nekem is megy...
Van valami egyszerű makro mentes megoldás a következő problémámra?:
A helyzet leírása:
Vannak termékek amik egyedi ID-vel rendelkeznek. Ez vagy "raktáron" van vagy "visszahozva" (nekem az ID-s papírja).
Ezt úgy oldottam meg, hogy egy legördülő listából kiválasztom, hogy "raktáron" akkor 1-et ír a felette lévő cellába ha "visszahozva" akkor 0-t amit szummázok és tudom is mennyi van raktáron így.
És itt jönne a kérdés:
Meg lehet-e oldani valahogy ha még nincs visszahozott ID-s papírja -most kezdtem el ezt az egészet tervezni- ami mondjuk a 60 sorszámú azt ne nekem kelljen egyesével 60-ig kiválasztani a listából, hogy raktáron hanem "automatikusan" billenjen be 59-ig a "rakáron" szóra és nekem csak a 60 kelljen beállítani, hogy visszahozva.
én is azt javaslom, hogy első lépésben mindkét fájlban kell, hogy legyen egy termékazonosító.
Utána, ha ettől függetlenül a két adatbázis struktúrája azonos, akkor egymás alá lehet tenni úgy hogy jelöljük, melyik rekord melyik adatbázisból jött.
Pl az A öszlop a terméktörzs, B hogy melyik adatbázisból jött, C oszlop pedig, hogy mikori adatról van szó.
A többi oszlopba mehetnek az adatok.
Így nem kell semmilyen kereső függvény (egyébként is az index-et javasolnám az fkeres helyett), hanem egyszerű darabteli függvénnyel ki ki lehet számolni, melyik termékből mennyi van.
Utána minden kimutatás mehet akár képlettel, akár pivot táblával
Ráadásul, ha 2007 vagy 2010-est használsz, akkor kiaknáznám az adattábla funkciót is, ami drasztikusan csökkenti a fájl méretét és a memória igényt
Én azért ezt a feladatot kicsit összetettebbnek gondolom. Azt hiszem jogos volt az a gondolatod, hogy „makróírásban jártas szakembert keresel”. Ugyanis szerintem itt nem egyszerűen két táblázat egyesítéséről van szó, hanem egy készletnyilvántartásról kismillió buktatóval. (Például a legelső kérdés, hogy miképp kapcsolod össze a nagyker és a webáruház adatait. A termék nevével életveszélyes, hiszen elég egyetlen elütés, és máris nem találnak egymásra az azonos termékek. Ilyenkor szoktak cikkszámmal, vagy termékkóddal operálni a név helyett. Ahol a név csak egy "tulajdonsága" a terméknek, de nem azonosítója.).
Én először megnéznék néhány - a kereskedelemben kapható – készletnyilvántartó programot. Lehet, hogy már megvan, ami kell, és nem kell most kitalálnia valakinek újonnan.
Én azt hittem, tbando már megoldotta, de csak átfutottam.
Teljes komplexitásában biztosan megoldható függvényekkel, de nem egyszerűen. Ki lehet használni a részekre bontó függvényeken kívül az egész- és törtérészt is. Pl. az =A1-INT(A1)>7/24 megadja, hogy a kezdő időpont reggel 7 utáni-e. De az biztos, hogy elég nehezen átlátható és javítható képlet lesz, makróval biztosan elegánsabb.
Inkább arra helyezném a hangsúlyt, hogy szerintem függvénnyel nem oldható meg a dolog. Nem tudok elképzelni olyan bonyolult képletet, amely kezelni tudja az első és az utolsó nap adatainak a többitől, de egymástól is eltérő kezelését, majd kiszámolja az első és utolsó nap közt eltelt napok számát, és ezeket szorozza 12-vel.
Hát hogy a Nagykertől kikerültek cikkek az nem gond, azoknál a webáruház Fkeres-e hibaüzenettel áll le, amik lekezelhetők a =Hahiba(Fkeres(webcikklista;Nagykertab;x;0);"Nincs"), képlet-tel. A fordított helyzet egy csöppet macerásabb. Az új cikkeket úgy találod meg, hogy most a Nagykertab-ra csinászl egy Fkeresést a webáruház listáján, és amit nem talál meg azokat kell copypastelni a webáruház listájára. Ehhez a másolás elött érdemes sorbarendezni a listát a kereső oszlopra, hogy a hibák egymás alá kerüljenek. Így egy ctrl c ctrl v elegendő hozzá a másoláshoz. Nem árt még elötte a Nagykerlista sorait sorszámozni, hogy a táblázat visszarendezhető legyen. És persze nem árt ha procedura elött a Nagykerlistáról csinálsz egy biztonsági másolatot. Mindez 5 perc alatt megvan.
Ha persze rhcp megcsinálja hozzá a makrót, akkor 1 sec.
Van egy webáruház ahol fent vannak a termékek abból lementünk egy excellt vagy cvs.-t a nagykertől ugyancsak kapunk egy ilyen excellt az árváltozásról.Idáig nem is lenne gond mert a két táblázatot simán össze lehetne dolgozni.Az a gond, hogy a nagykertől kapott táblázatban lehetnek változások kikerültek termékek vagy újak kerültek be.Ezért nem teljesen egyezik meg a két táblázat.
Meg tudná azt valaki mondani, hogy miért van, hogy amikor írom a makrót, akkor van amikor felajánlja az opciókat, és van amikor nem. Pl. ennél a sornál
b = Application.WorksheetFunction.CountIf(ActiveSheet.Range("j11:j30"), "alma")
az első makrónál se az application után, se a worksheetfunction után nem ajánlotta fel az opciókat, míg ugyanabban a modulban a közvetlenül alatta kezdett másikban már igen. Egyébként mindkét makró jól számolt.
Set MyRange1 = Application.InputBox(Prompt:="Jelöld ki az 1. sz tartományt", Type:=8) Set MyRange2 = Application.InputBox(Prompt:="Jelöld ki az 2. sz tartományt", Type:=8)
'innentől lehet használni a változókat, pl. erre: MsgBox MyRange1.Address & ", " & MyRange2.Address End Sub
Én erre makrót írnék, mert függvénnyel túl bonyolult lenne, ha egyáltalán megoldható. A lényeg, hogy a kezdőnapon ha 7-óránál kevesebb van, akkor 7-től számolok, tehát 12 órát veszek, ha 19 óránál több, akkor 0-t, ha közte van, akkor kiszámolom, hogy hány óra volt a kezdettől 19 óráig ezen a napon. A befejező napon fordítva nézem. Ha a vége 7 óránál kisebb, akkor erre a napra 0 az érték, ha 19 óránál több, akkor egész a nap, tehát 12 óra, egyébként számolok.
Ezután a közbeeső napok számát szorzom 12-vel, és összeadom a 3 számot.
Nem egy nagy munka, most csak azért nem vágok bele, mert egy jó óra biztos elmenne vele, és erre most nincs időm, de ha gondolod, holnap, vagy inkább kedden, összedobok rá egy rövid kis programot.
Itt zömmel ilyenek segítenek a kérdezőknek, tehát jó helyen jársz. A Te 5 nappal ezelőtti kérdésedre is érkezett 2 megoldási javaslat (igaz, nem makróra), de annyit sem válaszoltál, hogy kösz, vagy hogy nem erre gondoltam, vagy ilyesmi.
Az előzőben nem számoltam a percekkel. Ez a változat már a perceket is figyelembe veszi. Meg egyszerübb is. De kell hozzá még a c1 cella is, b1-a1 különbsége napokban, amit aztán ezzel a képlettel alakíthatsz órákká:
Nem egészen értelek, a két jelzett időpont között nem 26, hanem 50 óra a különbség. Vond ki őket egymásból, és az eredményt állítsd az egyéni formátumnál [ó]:pp formátumúra, akkor kijön. Vagy nem ez a kérdés?
Szeretnék adatokat feldolgozni, amihez konkrét dátumok tartoznak, pl. 2013.01.03 17:48. Van egy kezdő dátum és egy végdátum soronként. Szeretnék különbséget számolni a vég és kezdő dátum között, ez eddig nem is okozott gondot, mert egyszerűen csak kivontam a végdátumból a kezdő dátumot. De az időt nekem 07:00 - 19:00 között kellene számolnom, az ezen kívűl eső résznél "megáll az idő".
Pl. Kezdő dátum: 2013.01.02 08:00
Végdátum: 2013.01.04 10:00
Eredmény: 26 óra
Van valakinek ötlete, hogy hogyan lehetne ezt megvalósítani?
Na sikerült. Persze úgy egy kicsit babrás a magamfajtának, ha még a demoban is hiba van. (illetőleg nem biztos hogy hiba volt, lehet hogy csak egy más excel verzióra készült). Akárhogy is, de köszönöm rhcp gergonek, hogy felkutatta a linket.
Kösz. Annyira azonban én még nem értek VB szerkesztéshez, hogy be tudtam volna üzemelni. Egyelőre vagy meg se nyikkan a ctrl+shift-es indításra, vagy többféle hiba üzenetet ír ki. Még kísérletezem vele. Ha végleg befuccsolok vele, majd megkérlek, hogy küldj el priviben egy beélesített füzetet.
Ha le van nyomva a Workbooks.Open parancs közben a Shift, akkor leáll (kilép) a makró. Pár plusz sor hozzáadsával megoldható, hogy várjon a makró amíg elengeded a shiftet (lásd fenti link).
A leáll alatt azt értem, hogy behívja a filet és befejezi a futást. Mintha a végére ért volna. Nem ír ki semmit, hibaüzenetet sem, a tesztszöveget sem. Se a behívottba, se a behívóba. Abban a makróban, ahol élesben bukkant fel ez a probléma, minden utasítás sor elé beírtam egy "debug.print x" számot, hogy tudjam hol akad ki. Nos, a Workbooks.openig számolta a sorokat, az utána levőket már nem.
Egyébként azért írtam azt kis teszt-makrót, hogy hátha valaki megnézi a saját gépén, és beszámol az eredményről. Mert így kiderülne, hogy generrális bugról van-e szó, vagy az csak az én gépemen jelentkezőről.
Tudja-e valaki, hogy miért van az, hogy excel 2007-ben az alábbi „shiftopen” nevű makró makrólapról, makróablakból és ctrl+n-nel indítva minden további nélkül végigmegy, de a ctrl+shift+B indításnál az aaaa.xlsx behívása után leáll?
A „shiftsima” nevű makró viszont minden további nélkül lefut a ctrl+shift-es inditásra is. Tehát úgy néz ki, hogy a ctrl+shift és az open azok, akik nem lájkolják egymást. Miért? És tapasztalt-e valaki egyéb ctrl+shift-es indítási zavart?
Sub shiftopen()
Workbooks.Open ("C:aaaa.xlsx")
Range("D1") = "CTRL+SHIFT open-nel"
End Sub
Sub shiftsima()
ActiveSheet.Range("D1") = "CTRL+SHIFT open nélkül"
Az utolsó mondatod egy része számomra kínaiul hangzik.
Köszi az ötletelést, de egyelőre az adatérvényesítéssel a megfelelő műveletek elvégezhetőek...meg egyébként is szabadidőből fejlesztgetek...és most hétvégén gyerekes programjaim lesznek :-)
ELgondolkodtam viszont, lehet hogy érdemes átsrtukturálni a két excelt, esetleg beépített beviteli formokkal operálni, mert akkor nem is tud máshova beírni a user
A makróban ugye csak akkor kell megadni a lapvédelem jelszavát, ha a védelemmel ellátott részben turkál a makró. Ha nem, akkor simán maradhat a jelszavas védelem, csak ennek feloldását kell mellőzni a makróban.
azt már én is tapasztaltam, hogy összeakadnak a verziók. Még a 2007 és 2010 is, nem beszélve a 2008-as mac excelben készített cuccokról.
Valahogy másképp generálja le az xls formátumot minden verzió. (elég, ha csak megnézed a méretét egy 2010-ben és egy 2003-ben csinált xlsnek, vagy csak nyisd meg 2003-ban a korábban 2010ben csináltat, és minden változtatás néklül ments rá).
Külön idegesítőek a verziónként eltérő függvénynevek, de nem ez a lényeg.
Próbáld meg csv-be menteni, mert azt native felismeri minden verzió, és könnyen ír és olvas is.
Ezt az oldalt már végig olvastam, de nem lettem okosabb...
Ráadásul el is tudnám fogadni, hogy bizonyos makrók nem tudnak futni, ha ugyanazok egy másik munkafüzetben meg ne futnának tökéletesen - a közös használat ellenére.
Felrakom a data-ra a két (egyik működik, másik nem) táblázatot adatok nélkül, megköszönném, ha valaki rákukkantana...
Majdnem azt mondtam, hogy ez már nem rendeltetésszerű használat, de én pl. tizenéve gyűjtöm a túranaplómat egy egyre nagyobb táblázatban, és ott a többször látogatott teljesítménytúrák áttekintése végett érdemes autószűrőt használni a nevekre, és szeretném még átlépni majd az ezret. :-) Lehet, hogy addigra már adatbázissá kellene konvertálni, de sokszor túl fésületlenek bizonyos adatok, és ki tudom használni az Excel toleranciáját a slendriánsággal szemben.
Sajnos az Excel kapcsán még sosem futottam bele a multi user editing kérdéskörbe, más szóval a shared workbook használatába. De ősrégi emlékeim szerint (80-as évek, Clipper nyelven) egészen speciális szabályokat kellett alkalmazni az ilyen közös alkalmazásnál. Voltak várakoztató parancsok a beolvasásnál, és a kiírásnál, hiszen vigyázni kellett arra, hogy véletlenül se tudja két felhasználó ugyanazt az adatot egyidejűleg szerkeszteni. Ha például a felhasználó beolvasott egy adatot, akkor a programnak azt zárolnia kellett arra az időre, amíg nem érvényesítette a felhasználó a módosítást, vagy el nem vetette azt. És hasonlók.
Úgy képzeld el, mintha két diszpécser ülne egymás mellett hasonló feladatokkal. A bejövő hívások információtartalmát kell rögzíteni, de aki éppen felveszi a telefont, az fogja beírni a következő üres sorba.
Nem lehet, hogy külön fájlt vezessenek, és azt se nagyon lehet, hoyg adott személy csak az egyik féle táblázatot töltse. De a beírás gyorsítása is cél lenne, ezért lennének jók a makrók.
A saját asztalomon tettem közös használatúvá mindkettő fájlt, és még szintén csak a saját gépemen próbáltam ki, és az egyiken futottak a makrók, a másikon nem.
Igen. Én is azt tartom valószinűbbnek, hogy máshol sem müxik. De mivel az excelem elég sok furcsaságot produkál, sosem zárható ki, hogy nálam van valamilyen rejtélyes hiba.
Itt nem ez okozta a galibát. Hanem egy egészen meglepő dolog. Nem kis futam, volt rájönni a hiba okára. Kb. 2 órám ment rá a hibavadászatra. Az azt megelőző félnapos teljes tanácstalanságról már nem is beszélve :))). B+
A táblázatomban van egy részösszeges értékeket tartalmazó oszlop. Nos, ha elvben az is szűrhető, akkor nem látja a táblázat utolsó sorát a szűrő. Függetlenül attól, hogy szűrök-e erre a részösszeges oszlopra, vagy sem. Ha nincs kijelölve szűrésre az oszlop, akkor viszont minden oké. Na most mivel az autószűrőnél a szűrőre kattintás az összes oszlopnál felkinálja szűrhetőséget, a hiba előjön, ha erre nem ügyelünk. A megoldás, hogy a szűrő bekapcsolása elött, a részösszeges oszlopot el kell különíteni a táblázattól. Aztán utána visszailleszthető, de tulajdonképpen erre nincs is szűkség.
Többféle táblázatot használnánk de egyszerre 2 külön gépen vannak megnyitva és adott sort hol az egyik, hol a másik felhasználó tölti ki.
Eddig sima kockás papírnak megfelelő táblázatokat töltöttek, maximum legördülő listák voltak az egyszerűsítés céljából.
Arra gondoltam, hogy lehetne jó pár állandó adatot (dátum, időpont, beíró neve) mondjuk dupla klikkre beíratni. Ezek a makrók megvannak, már használom őket jó ideje, és ezekbe a táblázatokba (illetve teljesen újakat hoztam létre) is beleírtam őket. Majd, amikro közös használatúvá tettem a fájlt, a makrók nem működtek egyáltalán.
De van olyan táblázatom, amiben ugyanezek a makrók, valamint pár másmilyen is benne van, és azok a közössé tétel után működnek.
Mitől működik ebben, és mitől nem a másikban?
Szerintem mindenféle variációt már kipróbáltam :-)
Persze, hogy csak a legördülő listára vonatkozik. :)
Meglepett, amikor kerestem valamit, hogy még nem vittem fel, hiszen a listának nem eleme. Aztán kiderült, hogy de. :(
Valamint érdekes, hogy (a XL 2003-ban) a lista mérete nem állítható. Ha kétszer ilyen hosszú lenne, felőlem 2000 tételt is tudhatna. :) (Ez gondolom másnak nem lenne megfelelő, de hát nem vagyunk egyformák.)
Közben eszembejutott egy tipp: nálam, ha új rekord került a táblába, azt - amíg a sorszámot tartalamzó ID oszlopot nem húzom le odáig - nem veszi figyelembe, tehát csak a felette lévő sorokkal dolgozik, az új sorok mindig megjelennek (nem a szűrő algoritmus szűri hozzá, hanem egyszerűen nem vesz róla tudomást, és mintegy táblán kívüli adatsort kezeli). Mondom: nálam a sorszámot kell lehúzni, Ctrl+S, aztán szokott működni. :)
Igen, de az 1000 tétel csak az autofilter drop-down-jára vonatkozik (nem is logikátlanul, mert ki akarna egy olyan drop-down menüből válogatni, ami több mint 1000 tételt tartalmaz). Maga a szűrendő tábla az excel saját limitációin belül akármekkora lehet.
Nekem akkor voltak ilyen problémáim, amikor a tábla valamiért megszakadni látszott az excel számára, ezért kérdeztem az üres sort.
Érdemes megnézni az első olyan sort, amit az excel nem vesz figyelembe a szűrésnél, ott kell lennie valaminek...
Érdekes. Én eddig csak abba futottam bele, hogy csak az első 1000 eltérő értéket veszi figyelembe, többet nem. Amit te mondasz, azzal még nem találkoztam.
Ilyennel nem volt tapasztalatom, sőt ebben a témában csak 2007-est használtam (mert a munkahelyemen nem válogathatok). Azt tudom, hogy a közössé tételkor bizonyos dolgok üzemszerűen elromlanak, és ez ki is van írva: makró nem jeleníthető meg és nem szerkeszthető, munkalap nem törölhető és nem adható hozzá stb.
Úgy néz ki, hogy az utosó sort már nem veszi bele a szűrési táblázatba, mert míg a többi szűrt cellasor számozása kék, ezé fekete. Na de miért nem? Elvileg muszájna neki.
Idáig nem igen használtam az autószűrőt, tehát gyakorlatilag semmilyen tapasztalatom nincs vele. Most azonban, amikor egy feladat kapcsán elővettem, meglepve látom, hogy az adattábla utolsó rekordját, mindegyik kategóriához hozzászűri. Miért lehet ez? Hogyan lehet leellenőrizni, hogy a az excel a szűrésnél mekkora táblázatot vesz figyelembe?
1. A makrók futtathatóak. A közössé tétel előtt működek tökéletesen Ha közössé teszem a fájlt: - A makrók hibát dobnak - Berak a munkafüzet közepére egy "leválasztó" vonalat, mintha ablaktáblát rögzítettem volna - A makrók nem érhetőek el, nem is lehet látni őket 2. Mind xls-sel, mind xlsm-mel megpróbáltam és ugyanaz a hiba 3. Ha a közössé tételt megszüntetem: - az ablaktábla rögzítés marad - a makrók továbbra sem működnek - a Visual Basicben a makrókat továbbra sem lehet látni
A felülírásra (és egyéb kérdésekre) vonatkozó kérdést a Application.DisplayAlerts=False sorral tudod letiltani. A makró végén feltétlenül állítsd vissza True értékkel!
A verziószámot lekérdezheted az INFÓ függvénnyel: =INFÓ("verzió")
Érdemes megnézni a súgóban ezt a függvényt, bár az INFÓ("fileszám"), ami a súgó szerint a füzetben lévő lapok számát adja, az 1 lapot tartalmazó füzetben 11-es eredménnyel-, a hármat tartalmazóban 13-mal tért vissza. Eszerint az eredményből le kell vonni 10-et. Próbáltam bővíteni, szűkíteni a lapok számát, és mind a 2003-ban, mind a 2007-ben következetesen 10-zel többet ír ki. :)
Nem tűnik rossznak az ötleted, de az egyénenkénti mentés sem egyértelmű.
Mert a táblázat adattartalma 3 féleképpen tölthető fel. A kitöltéstől függ, hogy milyen típusba (a munkánk szerint) lesz a fájl besorolása, így ha megadjuk, hogy egyénenként de EGYETLEN helyre mentsen, az nem lenne jó.
Elgondolkodtam azon, hogy a mentés helyét a táblázat adattartalma alapján határozzam meg, és ezek alapján generáljak egy mentési útvonalat. Ez a következőképpen nézne ki:
- A szerveren mindenkinek van egy saját nevére szóló mappája, abban a 3 különböző almappa (mondjuk 1, 2, 3 néven)
- A dátum beírására egy rejtett cellába beírná a felhasználó nevét (ami megegyezik a szerveren lévő mappa nevével)
- a táblázat adattartalmától függően egy szintén rejtett cellában (sima ha függvénnyel) meghatározom, hogy melyik alcsoportba tartozna a fájl
- És a fentiekből egy összefűz segítségével határoznám meg a mentés helyét
=összefűz(z:\Táblázatok\A1\B1\C1\"_"\D1\"_"\E1\F1
A1= felhasználó neve
B1= az adott táblázat típusa
C1= egy iktató szám (a felhasználó írja be)
D1= dátum (ami valójában nem mai dátum, hanem a táblázat szempontjából releváns/bekövetkezési dátum)
E1= helyszín (azt szintén a felhasználó írja be
F1= a fájl kiterjesztés magadása (mivel különböző Office verzióban használjuk, így vizsgálnám, hogy milyen verzió alatt használjuk a fájlt, és ennek megfelelően adná meg a fájl kiterjesztést)
Ezt raknám össze Delila által korábban megadott makrójával, ami elvileg remekül működik, ha a mentés helye és a fájlnév meg van adva.
Most a tegnapi csiszolgatott (csak nevet megadó makró) jól működik. A sok (?) felhasználó miatt a teljesen automatikus mentés jónak tűnik, mert nincsen hibalehetőség.
A Googléval most nem találom, a könyv meg nincs kéznél. :(
(Megjegyzem, ha te nem tudsz róla, valószínűleg félreértettem valamit és amit tudnék mondani, nem vinne előrébb, vagy rosszul emlékszem és nincs is ilyen.)
Szét lehet bontani egy oszlopot, ha megvannak a feltételei (egyértelmű elválasztó karakter vagy állandó szélességű részek), csak nem derül ki az előzményekből, hogy itt megvannak-e.
Van arra valami változó, hogy történt-e módosítás a megnyitás óta, azaz felkínálja-e a mentést... Ha False-ra állítja az ember, kérdés nélkül kilép. :)
Nem. Olyat tudsz csinálni, hogy két szomszédos (most speciálisan: egymás melletti) cellát összevonsz.
Tehát nem a C oszlopból csinálsz C1 és C2 aloszlopot, mert olyat nem tudsz, hanem beszúrsz egy új oszlopot (D-t), majd a C-t és a D-t összevonod (szaknyelven: egyesíted) ott, ahol nincs szükséged "aloszlopra". A maradék helyen pedig marad egy C és egy D oszlopod egymás mellett.
Ilyen adatbázis jellegű dolgokat egyébként célszerű nem cellaegyesítésekkel megoldani, mert a képletek másolásakor gond lehet. Praktikusan úgy érdemes, hogy csinálsz egy adat munkalapot, ahol formázás nélkül a nyers adatok vannak (akár áthaladásokkal), és csinálsz egy színes-szagos megjelenítő munkalapot, ahová csak azokat az adatokat viszed át, amire szükséged van. Pl. az adat munkalapon van az összes viszonylat indulása úgy, hogy 1. megálló, 2. megálló stb., illetve viszonylatonként a megállók neve, a megjelenítő munkalapon pedig beütöd a viszonylatszámot egy kijelölt cellába, meg a megálló sorszámát, és ő a szükséges adatokat (indulásokat stb.) összevadássza az adat munkalapról.
Örömmel látom, hogy alakulnak a dolgaid, de azért felteszem ide a 19568-ban igért megoldás. Sajnos még annál is kevésbé pöpecebb, mint reméltem, mert olyat csinál amivel még az életemben nem találkoztam, és hiába kínlódtam vele, nem tudtam jobb belátásra bírni. Nevezetesen, hogy míg makróablakból indítva simán lefut, gyorsbillentyüt rendelve hozzá viszont kiakad Nem mindig, de általában :((. Lehet hogy csak az én excelem hülyéskedik, és a tied nem fog, de valószínűbbnek tartom, hogy a makróban hibás valami. Talán egy okos topiktárs meg tudja reparálni. Amire én is nagyon kiváncsi lennék hogy hogyan.
Szóval ez egy elég bosszantó hiányosság, de mivel mégiscsak működik, hát leírom. Az alapelve az, hogy minden résztvevő, akinek ki kell majd töltenie sablonodat, letölt a gépére egy saját beállítású füzetet, mindenki ugyanazon a néven, ugyanazon az útvonalon elérhetően. Praktikusan tehát leginkább a C: könyvtárba. Aztán ebbe a fileba egységes módon ki-ki maga beleírja, hogy hova és milyen néven szeretné majd lementeni az általa kitöltött sablonfilet. Hogy hogyan, arra felteszek egy példát a data.hura redla.xls néven. Az alábbi filementő makró, e füzet beállításaihoz igazodik. (Ez az a makró, ami nálam csak a makróablakból indul). Még annyit, hogy úgy van elképzelve, hogy a makró a sablonnal érkezik. Persze úgy is lehet, hogy már eleve rajta van mindenkinek a gépén bővítményként. A makró így néz ki:
Sub redlament()
Dim a$, b$
Workbooks.Open ("C:redla.xlsx")
a = Workbooks("redla").Worksheets("Munka1").Range("a6") ''fuzetnev
b = Workbooks("redla").Worksheets("Munka1").Range("a7") ''path+fuzetnev
A makró mindenkinél az általa kijelölt könyvtárba menti le a kitöltött sablont. Mindig ugyanabba. Ha megváltozik a szitu és ezentúl máshova akarja menteni, egyszerűen átírja a redla.xlsx-ben. Ha azonban a tartalomtól függően, hol ide kéne tölteni, hol oda, akkor ki kell iktatni a makró utolsó utasítását, a workboks(a).close-t egy eléje írt apostróffal, akkor a stabilhelyre történő mentés után nyítva marad a file, és most már egy normális Filementés máskénttel, odamenthető, ahova tetszik. Tehát ilyenkor 2 példányban lesz a gépen file, a stabilra kijelölt helyén, és a másodszorra tetszőlegesen választotton. Ugyanazon a néven. Na erre gondoltam, amikor azt mondtam lehetne pöpecebb is.
A makró csinál még 2 furcsaságot, amit színtén nem értek, és nem tudtam kiiktatni: Ezektől müködik ugyan, de jelzi, hogy nem perfekt. Az egyik, hogy mielőtt végrehajtaná a „Workbooks("redla.xlsx").Close” utasítást, rákérdez, hogy akarom-e a redla.xlsx változásait menteni. Mivel elvileg nem történik semmi változás a redla.xlsx-ben, mert abból csak adatot olvasunk ki, a fene se érti ezt. Kattints rá bármelyik opcióra, és innen már végigmegy.
A másik furcsaságot sokkal súlyosabbnak érzem. Ha úgy alakul, hogy egy már létező filenéven akarsz lementeni új filet, akkor rendben rákérdez, hogy felülírható-e az előző. Ha engedélyezed, akkor felülírja. Ha nem, akkor viszont kiakad. Mondjuk, ez a szerencsésebb változat, sokkal bosszantóbb lenne, ha a szükséges változattal kéne manuálisan veszkődni. De mindenképpen hiba, valszeg a filementő sor, amit feltétlenül érdemes volna kijavítani. Én sajnos kevés vagyok hozzá.
Ill másik kérdés, egymás mellé írom a menetrendi adatokat (betétjáratokkal) és mindig kiírja hogy hiba a képletben (jól számolja de oda bumszlizik egy zöld pacát) miért?
Egy menetrendet szerkesztgetek excellben, és az a problémám hogy megcsinálom az "oda" irányt és vissza iránynál nagyon szöszögős hogy törölnék egy oszlopot akkor kitöri a felette lévő "oda " irány időadatát.
Hogy lehet megoldani hogy egy táblázatban de két külön főcellába kezelje az adatokat.
pl:
oda
Bécsi út 05 10 15
Árpád híd 08 13 18
vissza:
Árpád híd 10 15 * 20
Bécsi út 13 18 * 23
*
ha az időadatok közé bejönne egy új járat vagy törölnék egy sort, akkor a felső cellasorból is törlődik / vagy elcsúszik az adat. Nem lehetne valahogy úgy külön kezelni az oda és vissza irányt?
Tegnap feltettem a kérdést, hogy olyan mentést szeretnék, aminél az előzőleg meghatározott cellákban lévő szöveget teszi névnek, de nem menti el a meghatározott helyre, csak feldobja a "mentés másként" párbeszédpanelt.
Nos, több segítséggel elkészült...
Sub macro() Dim fldlg As FileDialog
Set fldlg = Application.FileDialog(msoFileDialogSaveAs)
Az Ifek azért kellettek, mert nem azonos verziójú Excelről használjuk, de a mentés lehetőség szerint xls legyen. Illetve, közben rájöttem, hogy 2010-es esetében akár lehet xlsm is.
A fenti kód Delilának működik, nekem 2010-es verziójú Excelnél is csak xlsx-ként akarja menteni a fájlt. Próbálgattam a filterindexeket állítani más számra, de nem akarja...
Elvileg nem lenne olyan nagy gond a mentés panelon kiválasztani a megfelelő fájlt, de olyan felhasználók is vannak, akiknek ez már bonyolult lehet :-(
Nyilván kénytelenek voltak meghagyni, hiszen biztosítani kell a felülről kompatibilitást. Azaz, hogy a 2003-as verzióben készült állományok ne adjanak hibát a későbbi verziókban.
Az egy más kérdés, hogy szükséges-e ilyen módon magyarítani. Szerencsére nem találkoztam még ezzel a problémával, mert konzervatív lévén (legalábbis a számítástechnikában) még mindig a 2003-as verziót használom.
No, akkor a biztonság kedvéért, estig felteszek neked ide egy elég pöpec megoldást. Két apró probléma van vele még jelenleg. 1. Most még nem elég biztonságos :))). Hol müködik, hol kiakad. Na ezen dolgozom jelenleg. Remélem sikerül megoldanom. De ha nem, akkor majd kérjük Delila segítségét :))). 2. Bár elég pöpec, de kétségtelen, hogy lehetne pöpecebb is. Ehhez azonban az én tudásom biztosan kevés. De talán itt valaki besegít majd, ha nem felelne meg neked.
Ehhez egy userformot kell beépítened, amibe beviszed a lehetséges mentési útvonalakat. Ezt javasoltam korábban, csak nem userformmal, hanem érvényesítéssel, de elvetetted. :)
Bocs hogy közbe szólok, de én nem azt írtam, hogy hibás a képlet, hanem hogy hibás a (magyar) súgó. Mert azt hitte, hogy ha a normál kerekités az kerekítés, akkor a felkerekítés az kerekítés.fel. Pedig nem :))). Hanem kerek.fel, ahogy sk írta. És emiatt a =kerek.fel(9999/117;0) az bizony 86, úgy ahogy szeretnéd.
Bocs, már álmos vagyok, figyelmetlen voltam, de akkor sem értelek. Ha felfelé akarod kerekíteni, akkor használd a kerek.fel függvényt, amit már többször megírtunk.
Ebben az esetben a szorzásjelet értelemszerűen osztásjellel kell helyettesíteni, a kerek.fel függvényt pedig KEREK.LE-vel, hiszen lefelé akarsz kerekíteni.
Ne haragudj (haragudjatok) nem vagyok toppon az Excel belső szisztematikus felépítében. Abszolút felhasználó vagyok, akinek megmutatták annó ezt a formátumot (lehet ezt sem szakszerűen írom le, elnézést)
Azt szeretném elérni:
A1cellaA2cellaA3cella
9999 :117=85,4615384615Ne ez legyen az eredmény, hanem
9999 :117=85
Nem tudom mennyire sikerült leírnom kérdésemet?
Ha megtennétek, leírnátok mit írjak az A3cellába? Itt megint nem tudom a megfelelő kifeljzést, talán így jó lesz: hogy néz ki a függvény, amit az A3cellába kell írni?
Mindent zárójelbe kell foglalni, ahogy tbando írta is. Általában minden függvénynek minden argumanetumát a zárójelbe kell írni és pontosvesszővel elválasztani. (Másképp nehéz is lenne egyértelmű képletet alkotni.)
Igen, néztem a súgót, de ezzel az a gondom, hogy az konkrét számra vonatkozik. Esetemben pedig az eredményt kell kerekíteni. Tehát nem elvégzem a műveletet és utánna kerekíttetek, hanem már a művelet eredményét írja kerekítve. A $ és a ; jel biztos szerepelt a képletben, a műveletbe bevont cellákat meg ha jól emlékszem zárójelbe kellett foglalni.
Nagyon régen ( talán több mnt 10 éve!) használtam egy formátumot, elfelejtettem és most szükségem lenne rá.
Több cellában lévő számokkal történő műveletek végén (összeadás, szorzás, osztás) az összeg kiszámítása flefelé kerekített értékkel jelent meg. Ha jól emlékszem így nézhetett ki a formátum: pl: =kerek.fel($A1*$A2);2
A végén a 2 az két tizedesre kerekítést adott, ha itt 0 volt, akkor egész szám volt az eredmény. A zárójelben több cella is lehetett
Az írt formátum nem jó, valszleg nem jól emlékezem, de valami ilyesmi volt. Ha nem jól írtam le gondom, elnézést. Már több kombinációt kipróbáltam, sajnos nem akar eszembejutni.
Útvonalra nincs szükség, mert nem lehet meghatározni, hogy ki hová menti. Én speciel a pendrive-omra, de ott sem egy helyre, mert a táblázat egyéb tartalmától függ, hogy melyik mappába kerül.
Ez a makró feltételezi, hogy a C oszlopba beírtad a felhasználók neveit, mellé a D-be mindenki mentési útvonalát, ügyelve a \ jelekre, pl. D:\Józsi\2013\. Mindenki a saját nevén lép be, ennek alapján a felhasználói nevet vettem figyelembe az útvonal megadásánál. Egyszerűbb lenne, amit már előbb is írtam, hogy a lehetséges útvonalakat adod meg egy érvényesítésben, de ha tényleg saját névvel lépnek be, így is jó lesz.
A1 -> Dátum, B1 -> Fájlnév
Sub Auto_Close() Dim nev$, utvonal$, WSN Set WSN = CreateObject("WScript.Network")
1. Mivel fordítva kell (elől legyen a dátum és után a hely), ezért megfordítottam a makróban a két range-t, de a a dárum formátum előtti vessző miatt hibát jelzett. Ha kivettem a veszőt, úgy sem volt jó neki.
2. A mentés helye egyáltalán nem biztos, nem egységes (mindenki a saját helyére menti és onnan csak nyomtatja), ezért lenne jó, ha csak a párbeszédpanel jönne fel, hogy ugyanmár hova is szeretnéd menteni?
3. Próbáltam, hogy az útvonalra vonatkozó részeket leszedtem, de a bezáráskor szintén hibát jelzett
Kapásból válaszolok: Halvány fogalmam sincs, ugyanis megmaradtam az excel 2003-nál, továbbá eddig nem akadt olyan feladatom (amúgy sem sokat programozok), ahol szögfüggvényekkel lett volna teendőm.
Egyébként nem az excelt védtem, nekem is van egy-két dolog, ami nem tetszik, sőt olyan eset is volt, ahol hibát véltem felfedezni. Csak abban szeretek óvatosnak lenni, és mást is erre buzdítani, hogy ne vágjuk rá valamire könnyelműen, átgondolás nélkül, hogy hibás, következetlen, hülyeség, stb. Ilyenkor ajánlatos megfogni egy gombunkat és 10-ig számolni, mielőtt leírjuk:-)))
Még azt teheted meg, hogy az utvonal$ ne állandó legyen, hanem egy harmadik cellában érvényesítés segítségével válassza ki a felhasználó. Az előző makró beírásánál úgyis megfeledkeztem a jólneveltségről, a \ jeleket nem duplán írtam be, a fórummotor pedig felfalta őket.
Mivel régebben írtad, hogy különböző gépeken különböző verziókat használtok, xls kiterjesztést írtam a mentéshez. Ezt fogadják makrókkal együtt a magasabb verziójú Excelek is.
Még annyit, hogy a Beforesave eseménnyel is indítható a redlacmentés makró. Bár az is igaz, hogy a mentés befejezése után az excel kiakad (legalábbis nálam). De ez talán nem olyan nagy baj, hiszen a mentéssel tulajdonképpen befejezted a munkát. Oszt ha mégse, hát elindítod újra excelt.
Most kapcsoltam csak, hogy a javasolt megoldásom nem igazán jó neked, mert te a sablontárból akarod behívni az üres füzetet, amit aztán nyilván nem oda akarsz visszarakni. Ez jó, mert leegyszerűsíti a dolgod, mivel a filenév bűvészkedésem feleslegessé vált. Egyszerűen beírod a filenevet a path-szal a sablon A1-be, amihez hozzáfűzöd a dátumot, a helységet, és a kiterjesztést, és mehet a makró.
Egy még sokat csiszolható, de már működő megoldás. Az a1.b1 dátumot és helységet átraktam b1.c1-re. Az a1-be került az aktuális filenév a =cella("filenév") függvénnyel. Ezt átmásoltam értékként a2-be, hogy a szövegkezelő függvények hozzáférjenek. Az a3.a4 ben meg addig bűvészkedtem vele, míg bővítésre alkalmas formába hoztam. Megjegyzem, csak a szűz filet, amit még nem mentettél ezzel a módszerrel. A már módosított filenevek manipulálását az a16.a18-ba írtam be. Majd ehhez a formátumhoz fűztem a dátumot és a helységet, valamint a filekiterjesztést. Ha a dátum dátumformátumban van b1-ben, akkor célszerű átalakítani. Ez történt a b2.b5 cellákban. Majd az a6 cellában összefűztem a teljes filenevet. Ezek után már csak ezt az egyszerű makrót kellett megírnom és futtatni:
Sub redlacmentes()
Dim a$
a = Range("a6")
ActiveWorkbook.SaveAs Filename:=a
End Sub
És a file mentve van, csak sajnos egy kis szépséghibával.
Nevezetesen, hogy a file valamiért csak xlsx formátumban engedi magát lementeni. Hiába írtam be a lementendő filenévbe az xlsx helyett xlsm-t , makacskodott. De ha már le volt mentve xlsx formátumban, megismételve a mentést felajánlotta a makróbarát mentés lehetőségét, amit aztán simán végrehajtott. Így aztán 2 pédányban lesz a lemezeden a file, egy makrómentes és egy makrós változatban. Reménykedjünk, hogy Delila javasol majd egy olyan beírási formát, amivel a makrós változat egyből menthető. Persze erre akkor nem lenne szűkség, ha a filet vezérlő makrókat bővítményben helyezed el. Vagy, ha makrókat tartalmazó füzetet eleve a sablontárból hívod be.
A cellamanipulálásokat feltettem a data.hu-ra. A letöltő linkje:
No akkor felteszek neked egy kérdést, amire CSAK kapásból lehet válaszolni: Miért van az, hogy a 2007-es excel súgójában a Worksheetfunction object members cím alatt, ahol azt állítja, hogy felsorolja mindazokat a munkalapfüggvényeket amelyek a VBA-ból hivhatók, nem szerepelnek olyan gyakori fuggvények mint pl. a sinus és cosinus, amik azonban ennek ellenére minden további nélkül hívhatók a VBA-ból?
De ne érts félre, ezek szóbahozásával nem az excelt akartam fikázni, hanem csak jelezni, hogy az ilyenek némileg megnehezítik a lelkivilágának a kiismerését.
Van egy Excel munkalapom, ami sablonként van mentve.
Ezt nyitjuk meg, és töltjük ki, majd mentjük el egy dátum és egy helyszín néven. A lap meghatározott cellái kitöltés után tartalmazzák a megfelelő dátumot (mondjuk A1) és a helyszínt (mondjuk B1). A mentés helye nem egységes.
Hogyan tudnám megcsinálni, hogy amikor a mentésre nyomok, akkor a felbukkanó "mentés másként" párbeszédpanelba már be legyen írva a dátum és a helyszín?
Azért hadd védjem meg SK-t (feltéve, hogy van rá szüksége:-))). Időnként nekem is karcosabb a stílusom. Különösen akkor, ha egy olyan véleményre, hogy az excel következetlen, kapásból tudnám a helyes választ, és nem könyvben kellene utánanéznem. De ez az utóbbi körülmény némi alázatra késztet.
Elfogadom. Lásd SK-nak adott válaszomat. Hozzátéve, hogy nekem a Sárközi könyv sincs meg. Így csak a magam esze szerint próbálok boldogulni a feladatokkal. Ami gyakran nem elég. És akkor idejövők. Aztán van aki válaszol, van aki meg kioktat :))). Ezek sosem ugyanazok.
Ezért vagyok itt. Inkább kérdező, mint válaszolói minőségben. Mivel nekem mikor iskolás voltam a csajok sokkal fontosabbak voltak mint az egészrész fgv fogalma :)))
Már kis híján igazat adtam neked, de eszembe jutott, hogy kissé régen tanultam matematikát, így elővettem a számelmélet zsebkönyvemet (Dr. Sárközy András, 1976). És ez felfrissítette a régi emlékeimet a következőképp.
Legyen x tetszőleges valós szám. Ekkor létezik egy olyan egyértelműen meghatározott k természetes szám, amelyre teljesül, hogy
k <= x < k+1. Ezt a k számot x egész részének nevezzük…
Majd kicsit később egy példán is levezeti ezt:
Számítsuk ki -10/3 egész részét és tört részét! A megoldás: -10/3=-12/3+2/3=-4+2/3
Tehát nem az Excel szerzői, hanem a matematika elmélete szerint tekintjük a szám egész részének negatív számok esetén is a következő nála kisebb számot, tehát -1,1 esetén a -2-t.
A második kérdésedre: Nem tudtam, hogy az integer változó hogyan kerekíti a tört számokat, tekintve, hogy az eddigiekben (sikerrel) igyekeztem elkerülni, hogy a programomban olyan számot deklaráljak integer típusúnak, amely felvehet tört (tehát nem integer) értéket:-)))
A te logikád a te magánügyed. :-) Az egészrészfüggvény a matematikában egy jól definiált fogalom, és az iskolában is így tanítják. Ha még emlékszel a lépcsőre.
Attól az még következetlenség, hogy van értelme. Az én logikám szerint az lenne következetes, ha az Int működne úgy mint a Csonk, és a Csonk lehetne inkább a meglevő egész. De az int használat következetlenségére van durvább példa is. Azt tudtad-e például hogy a vba integer változó kerekít? Tehát mondjuk az a%=3,51 az nála 4, és az a%=-3,49 az meg -3. Ki kell ezeket tapasztalni.
Tizedes tortet kell fok-perc formatumra atalakitani, legegyszerubb a tizedes reszt hattal megszorozni, de nem ertem, hogy negativ szamnal miert hibazik az int fuggveny? Hogyan korrigalhatom? Csak ennyi az egesz, de negativ szamnal hibazik:
Az excel számos meglepő következetlenséget produkál. Mint pl. a tegnap felrakott solver sajátság, hogy az excel a saját fejlesztésű függvényével nem müködik, de a feltehetőleg alapjául szolgáló kombinatorikaival igen. Vagy hogy a te kereteződben a nem létező belső cellashatárokra történő utaláson átlép, míg az én nem létező munkalapoméra tőrténőn nem. Meg egyáltalán, az on error goto 0 milyen logika alapján ugorhatta át a hibás utasítást a kereteződ korai változatában, amikor elvben (ha már egyszer kezelni akarja) végtelen hurokba illett volna kerülnie. Legalábbis az én logikám szerint. Ami úgy látszik nem egyezik az excelével. Jó lenne ezekről is beszélgetni.
Az emlegetett keretező makrót pár éve írtam. Akkor a hibakezelés nélkül 1 cella kijelölésekor hibára futott. Most, hogy itt felszínre került, kipróbáltam on error resume next-tel, jól működött. Csodák csodájára hibakezelés nélkül sem hőzöng.
A makró megírása után volt néhány újratelepítésem, frissítésem. Valószínűleg erre vezethető vissza a kétféle eredmény.
Kinomban lecseréltem a Kombinációk száma cellában levő excel kombi fgv-t (=Kombinaciók(a10;2)) a nomál kombinatorikai formulára, hogy asszongya
=a10*(a10-1)/2, amivel aztán már semmi baja nem volt a solvernek, rögvest meghatározva a helyes célértéket. Tehát a solver alatt nem működik az excel Kombinációk függvénye. Tudja valaki, hogy miért ?
Sehogy sem bírom rávenni a solvert, hogy kiszámolja annak a halmaznak a számosságát, amelyből az elemek lehetséges páros kombinációinak a száma a legközelebb van a 309-hez. Ez a szám egyébként a 25 (mert a kombi(25;2)=300, míg a kombi(26;2)=325). A solver azonban ezt cseszik kiszámolni, közli hogy megvan a megoldás, szerinte minden feltétel teljesült, de csak az induló értékeket adja vissza. Valami banális beállítási hiba lehet az oka. De mi?
A beállításaim:
Célcella: abs(309-Kombinációk száma) minimuma
Módosuló cella: a halmaz számossága
Korlátozó feltétel1: A módosuló cella egész érték
Korlátozó feltétel2: A módosuló cella nullánál nagyobb
Ha valakinek sikerülne eredményesen lefuttatni a példát, megköszönném ha elküldené priviben, hogy tanulmányozhassam.
Tárgytalan. Megtaláltam. A háttérben levő Personal füzetben :))). Az zavart meg, hogy a VBA címsávban nem Personal-füzetre hivatkozott, hanem a munkafüzetre. Logikus :(((
Csinálok egy makrót excel 2003-ban. Félbehagytam. Számítógép kikapcs. Most nekiállok folytatni. Fűzet behíva, alt+F11, a makró ott a makrólapon. Fönt a lap tetején címsávban hogy az x füzet module1 makrólap van nyitva. De a projektablakban nincs module1 feltüntetve. Csak a munkalapok classmoduljai meg persze a füzeté. Eszembe jut, hogy a makroírás kezdetén nem nyitottam új modullapot. No most akkor hol lehet ez a makró? Végigkattogtatom a munkalapmodulokat, makro sehol, és most már nem is tudom a makrót elővarázsolni a VBA-ból. Csak a füzet bezárásával, majd újra megnyitásával és alt+F11-gyel.
Az lenne a kérdésem, hogy hol lehet a makrólap, miért nem mutatja a projektablak, és hogy lehetne a VBA-ból is megnyitni?
Az automaikus visszaállást végül nem tettem bele, mert a fájl nyitott helyzetében ugyebár rámentettem a fájlra, majd bezártam volna.
Ebben a pillanatban átállította a számolást, a fájl változott, így rákérdezett, hogy menti a változásokat.
Szerintem ez az egyszerű felhasználót bekavarná, hogy az előbb mentette, és az ő ismeretei szerint nem történt változás, akkor miért is akarja menteni újra...vagy micsoda...
Most több gépen ellenőrízve pontosítok: Vannak excelek, amelyeknél betöltéskor valszeg default automatikus. És vannak amelyeknél, nem. C'est la excel :))).
Hoppá! Annak idején ezt a tesztet, nem teszteltem. Csak most a kérdésedre. És lőn: a kérdéses makróban az onerror goto 0 kikapcsolva is hiba nélkül lefut :))).
És most, hogy újra a hibakezelésen problémázunk, nem mondaná meg nekem valaki, hogy az "Onerror goto label vagy line number"-ből a line numbert hogy kell értelmezni, mit csinál, hogy kell úgy beírni, hogy az excel ne akadjon ki rajta?
Még egy adalék a 2003-as védelmében: Nekem úgy tűnik, hogy a VBA-Helpje is áttekinthetőbb. A 2007-esével elég sok bajom van. Pl. nem mindent talál meg bárhonnan.
Nálam (excel 2003) nem ad hibát egy cella kijelölésekor sem a .Borders(xlInsideVertical).Weight = xlHairline, sem a .Borders(xlInsideHorizontal).Weight = xlHairline parancs. Pedig a megjegyzés szerint erre azért van szükség, mert egyetlen cellánál a belső szegélyek megadásánál hibára futna.
Kipróbáltad, hogy az on error goto 0 parancs törlésekor jelentkezik-e hiba nálad?
És én sem. Miért kell egy működő dolgot elfelejteni? Mert van helyette egy nehezebben használható? Ha figyeltél, írtunk itt olyan dolgokról, amiket 2003-asban meg lehet csinálni, az újabbakban meg nem, vagy csak rettentő nyakatekerten és sokkal több szakértelemmel.
Plusz fejlesztőként sem engedheted meg azt a luxust, hogy elfelejts egy sokak által használt szoftvert.
Az automata számolások ügyében meg az a gyanum, hogy jelszó csak a partnerek ellen véd, az excel önfejűsége ellen már kevésbé. Betöltéskor valszeg default automatikus.
Miért van az, hogy egy sokunk által használt táblázatban beállítom, hogy ne számoljon automatikusan, aztán egyszercsak azt veszem észrem, hogy már megint automatikusan számol.
Jelszóval van védve, így más nem tudja átállítani, mégis visszaáll az automatkusra.
A súgó valóban a bekapcsolt hibakezelő kikapcsolását írja erről a parancsról. De Delila 18930-as makrójában csak a goto 0-s változat szerepel és prímán működik.
Én úgy tudom, hogy az "on error goto 0" kikapcsolja a korábban bekapcsolt "on error resume next", vagy az "on error goto cimke" hatását, azaz visszakapcsolja a normál hibakezelési módot.
Kösz. Így működik. Ráadásul egyszerübb, mint amit én eszeltem ki: On error goto 1..........exit sub, 1: resume next. Ami érdekes módon bármilyen számot választva cimkének müködött, kivéve a 0-val. Érdekes. Mint ahogy az is, hogy a számokat is csak cimkeként fogadta el, noha elvben line number-ként is illett volna :))).
Szerintem On Error GoTo 0 helyett On Error Resume Next működne. De ezekkel a hibaátugrálásokkal óvatosan kell bánni, mert érdekes működéseket eredményezhetnek. Tisztább dolog lenne rendesen lekezelni a hibát.
A munkafüzetben csak egy munkalap van. Az On Error Goto 0 miért nem kezeli le a hibát az alábbi teszt-makróban? Amikor Delila 18930 sz. posztjában ismertetett makró minden további nélkül átugorja.
Van egy makróm, ami futása előtt leveszi a lapvédelmet, majd a futása végén visszateszi.
A gondom, hogy az Excel-be be van szúrva egy Word objektum, aminek szerkesztését nem engedi, ha automatikusan teszi vissza a védelmet (manuálisan kapcsolva a védelmet, ki lehet pipálni).
Mit kellene a makró végére írni, hogy a lapvédelem esetén az objektumok szerkesztését engedélyezze?
A netről tölts le egy XY chart labeler-t. Én évekkel ezelött letöltöttem egyet. Baromi egyszerű a használata. Bővítményképpen beépül az exceled alá. Így ha bővítménykezelőben megjelölöd máris használható. Bár ha jól emlékszem nem rámutatásra, hanem azonnal kírja a pontok mellé az x-hez tartozó cimkét.
Olyat biztosan tudok, hogy a jelmagyarázatban, a diagram mellett ne azt írja, hogy "adatsor1", hanem "alma" stb. Amit te kérsz, azt nem tudom, hogyan lehetne megvalósítani.
De ha az egész oszlop tartalmát szeretnéd törölni, akkor katt felül az oszlopazonosítóra (B betű, a szürke mezőben), ekkor az oszlop kijelölődik, és DEL gomb. Sorbarendezés nélkül.
Most akkor üres vagy nem üres? Ha üres, mit törölsz rajtuk? Nekem ez zavaros. De ha a B oszlop szerint rendezed, akkor annak kell kijönni, amit mondasz, akárhogy is akarod törölni a semmit.
Most, hogy ezt így megcsináltam, meg lehet-e azt oldani, hogy a grafikonban az adatcímkék (data label az angol verzióban) egy másik oszlop tartalmát mutassák? Tehát ha rákattintok egy pontra a grafikonban, akkor hogy ne azt írja ki, hogy 1 vagy 2, hanem hogy alma vagy körte.
Vegyél fel egy plusz oszlopot, és pl. nézzen ki így a dolog:
Gyümölcsnevek | Gyümölcsazonosítók | Átmérő [cm]
Arra figyelj, hogy az azonosító pl. alma esetén 1, körte esetén 2, naspolya esetén 3 legyen. Ezt akár lehet FKERES-sel egy külön segédtáblázatból is kikeresni (ha óriási a táblázat). Nagy táblázat esetén HA, kis táblázat esetén pedig kézzel célszerű beírni sztem.
Ezek után válaszd a Pont (XY) típusú diagramot (XL2003-ban, de sztem egyéb verziókban is hasonlóan hívhatják), és ezesetben három "oszlopot" fogsz kapni.
Az alábbiban szeretnék segítséget kérni: adott egy adatsor, legyen mondjuk Gyümölcsök és Átmérők táblázata. Van benne mondjuk 5-féle átmérőjű alma, 3-féle körte, 6-féle naspolya. Szeretnék egy táblázatot készíteni ezekből az adatokból. Odáig rendben, hogy az Y-tengelyre kiteszi az átmérőket, az X-tengelyen pedig felsorol minden egyes gyümölcsöt. Viszont én azt szeretném, hogy az egyes gyümölcsfajták átmérőjét egy közös X-tengelybeli ponton ábrázolja, tehát ne 5 alma, 3 körte és 6 naspolya pont legyen az X-en, hanem mindből csak egy, és az átmérőadatok ezen az egy-egy tengelyen helyezkedjenek el. Hogyan tudom ezt megoldani?
Én a minap abba futottam bele, hogy az autoszűrő már nem kezeli a sokadik egyedi tételt (autónyilvántartás rendszám alapján), ezért a listájába nem kerül bele, de a ctrl+F megtalálja.
Valóban! És csak nézek ki a fejemből, mert a '0001=1 viszont ==> HAMIS. Miközben a '0001+1=2. Ki kell ezeket tapasztalni. Mert az excel cellatartalom-kezelése egyéb furcsaságokkal is meglephet. Ezek közült számomra a legmeglepőbb az alábbi:
AB
11
11
1a
1b
Ekkor az {=atlag(ha(A:A=1;B:B))} tömbképlet eredménye 1, de ha kitörlöd B-oszlopból az a-t és b-t akkor meg 0.5. Tehát a stringről tudja, hogy ne számoljon vele, de az üres celláról nem, azt 0-nak tekinti, és beleszámítja az átlagba. Míg persze az =atlag(B:B) üres cellával is, stringekkel is 2-t ad eredményül.
Ezek után az A oszlop vonatkozó celláit átformáztam szövegre és 0001...0003 tartalommal töltöttem fel, D változatlan -> A képlet továbbra is működik, hiába "álltam bele" a cellába majd ki (enterrel).
Tudtommal nem kell szöveghez társítani. Ha az A oszlopot nem szerette, az azért lehet mert a benne levő értékek nem azonosak a D oszlopéval. Ha csinálsz egy a1=d1 próbát, akkor kiderül, hogy így van-e. És ha igen, érdemes karakterről karakterre leellenőrízni, hogy miben tér el. Tanulságos lehet a jővőre nézve.
Mondjuk egyik hiba az hogy a kritériumot s összegtartományt felcseréltem a fgv-ben...Ne kérdezd miért mikor ott írja, hogy milyen paraméter kell neki. Biztos Karácsony miatt :D De most hogy megcsináltam akkor se akarta összeadni. Az A oszlopban lévő számok nem tetszettek neki. De nem baj mert a számokhoz tartoznak nevek is és úgy elfogadta hogy szöveghez kell társítania... Szóval köszi! :D
Szerintem is valami banális bakit csinálhattál, mert a szumha is jó, és a HA is, márha ez utóbbit tömbképletként viszed be. Ha nem, akkor persze hülye eredményt ad. De hogy a szumha-val hogy csináltál 0-t, azt még csak elképzelni sem tudom.
A szumha, aminek működnie kell: =szumha(a:a,d1,b:b)
Van két oszlopom amibe ömlesztve vannak azonosítók és a hozzájuk tartozó érték. Ezeket szeretném összesíten. Azt hittem, hogy a szumha()-val lehet de 0 ad vissza. Megpróbáltam ha()-val de akkor meg hülyeséget írt ki :(
pl:
A B ==> D E
0001 500 0001 550
0002 100 0002 112
0001 50 0003 111
0002 12
0003 111
Van erre ötletetek? Szerintem pofon egyszerű csak én nem jövök rá :D
Gyertyagyújtás előtt még gyorsan. Ezzel 19 pár adatot tolhatsz jobbra, utána már a segédoszlopok vannak (AN és AO)
Private Sub Worksheet_Change(ByVal Target As Range) Dim oszlop%, i%, sor%
If Range(Target.Address) = "" Then Exit Sub If Target.Column = 1 Then Application.EnableEvents = False sor% = Target.Row If Cells(sor%, 2) > "" Then oszlop% = Range(Target.Address).End(xlToRight).Column + 2 For i = oszlop% To 3 Step -1 Cells(sor%, i) = Cells(sor%, i - 2) Next Cells(sor%, 3) = Cells(sor%, 40): Cells(sor%, 4) = Cells(sor%, 41) End If Cells(sor%, 2) = Date Cells(sor%, 40) = Target Cells(sor%, 41) = Date Application.EnableEvents = True End If End Sub
Ehhez az első beíráskor el kell menteni a két értéket (A és B) egy másik helyre is, mert ha már felülírtad az A-t, valahonnan elő kell bányászni az előző beírást.
A makró a T oszlopba is beírja első bevitelkor az A tartalmát, az U-ba ennek a dátumát.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False If Cells(Target.Row, 2) > "" Then Cells(Target.Row, 2) = Date Cells(Target.Row, 3) = Cells(Target.Row, 20) Cells(Target.Row, 4) = Cells(Target.Row, 21) Else Cells(Target.Row, 2) = Date Cells(Target.Row, 20) = Target Cells(Target.Row, 21) = Date End If Application.EnableEvents = True End If End Sub
Van excel táblám amiben egy olyan makrót használok ami ha egy cella értéke megvátozik (beírok egy számot) akkor a mellete lévő cellába autómatikusan beíródik az aktulis dátum.
Ezt szeretném úgy kibővíteni, hogy lenne A1 cella az érték, B1 a dátum, C2 ismét érték, D1 a hozzá tartozó dátum. Beírok egy értéket az A1 -be (B1 autómatikusan a dátum lenne) és ha utána még egy értéket beírnék az A1 -be akkor az egész eltolódna jobbra. Vagyis A1 lenne az új érték B1 a hozzá tartozó dátum és C1, D1 pedig a régi. Vagyis ha beírnék egy új értéket akkor megmaradna a régi csak jobbra tolná.
Eddig ezt a makrót használtam:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 10 Then Cells(Target.Row, 13) = DateEnd Sub
Így van. Sokat kísérleteztem vele, de csak ekkor indította el a makrót, ha bárhova a munkalapra beírtam akármit. Így meg minek, ezzel az erővel gyorsbillentyűvel is elindithatom.
a worksheet_change esemény tudtommal csak akkor fut le, ha kézzel változtatod meg egy cella értékét. Ha egy függvény szerepel a cellában és a függvény eredménye lesz más (mert mondjuk a függvény változói ugyan megváltoznak, de más munkalapon vannak), akkor szerintem nem fut le.
Kösz. Kezdem kapizsgálni. De így meg az nem tiszta, hogy mi a különbség a sub worksheet_selectionchange és a worksheet_change között. Illetve a használatukban tudom, hogy mi a különbség köztük, de nem értem, hogy miért nem ekvivalensek? Azaz SK #19647 sz-n. beposztolt makrója miért nem fut le a worksheet_selectionchange-gyel?
SK-makró:
Private Sub Worksheet_Change(ByVal Target As Range) If Cells(4, 5) > 1000 Then Cells(4, 9) = "Jéééé!" End If End Sub
A Target mindegyik esetben Range típusú, tehát cellát v. cellatartományt jelöl.
SelectionChange esetén az, amit újonnan kijelölsz.
Change esetén az, aminek az értékét megváltoztatod.
DoubleClick és RightClick esetén az, amelyikre kattintasz.
De nem a tartomány címe, hanem maga a tartomány, ez fontos, ami az első két esetben több cella is lehet.
Itt egy kis makrógyűjetemény, próbáld ki, és megérted a Target működését:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim A As Range Set A = Me.Range("A" & Rows.Count).End(xlUp).Offset(1) Application.EnableEvents = False A = Target.Address A.Offset(, 1) = "DoubleClick" Application.EnableEvents = True End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim A As Range Set A = Me.Range("A" & Rows.Count).End(xlUp).Offset(1) Application.EnableEvents = False A = Target.Address A.Offset(, 1) = "RightClick" Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim A As Range Set A = Me.Range("A" & Rows.Count).End(xlUp).Offset(1) Application.EnableEvents = False A = Target.Address A.Offset(, 1) = "Change" Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim A As Range Set A = Me.Range("A" & Rows.Count).End(xlUp).Offset(1) Application.EnableEvents = False A = Target.Address A.Offset(, 1) = "SelectionChange" Application.EnableEvents = True End Sub
Tanulgatom az eseményvezérléses makrókészítést. Megyeget is, de nem igen értem. Pl. azt, hogy hogyan kell értelmezni a „byval target”-t. Kb addig jutottam, hogy az alábbi eseményeknél
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
a target az, ahova klikkelek.
Míg a Private Sub Worksheet_Change(ByVal Target As Range)-ben maga a munkalap.
Mivel bizonytalan vagyok abban, hogy jók-e ezek az olvasatok, kérem, hogy aki ért hozzá, erősítse meg, illetve pontosítsa.
Na most tételezzük fel, hogy jó az olvasatom: Akkor meg azt nem értem, hogy a Private Sub WorksheetChange-hez miért kell a byval target, amikor a szintén az egész munkalapra vonatkozó activate és calculate eseményeknél nem használatos.
Ha valakinek van e kérdésre jó magyarázata, kérem ossza meg velem.
A heti 2 nap megjelölést neked kell bírnod az A3..A4 be minden lapon. Ha garantált a napok közötti 2 nap különbség akkor az A4-be bírhatod ezt a képletet:
=HA(a3+2>8;a3+2-7;a3+2), de ez gyakorlatilag nulla nyereség, mert az A2..A3-t így is neked kell kitölteni minden lapon. Ha már most tudod, hogy melyik hónapban melyik 2 napot kell kiválasztanod (és persze igaz köztük a 2 nap különbség), akkor csinálhatsz mondjuk egy I1:J12 táblázatot, amelyben az I oszlop 1-12 ig a hónapokat tartalmazza, a J pedig az egyes hónapokhoz tartozó első megjelölt napot. Ekkor A3: =fkeres(a2;i1:j12;2;0). De még így is be kell írnod A2-be a hónap számát. Tehát ez se igazi nyereség. Persze a hónap száma levehető a munkapfülről, de akkor meg a lapfüleket kell átírnod. Illetve írható erre vagy az egész folyamatra egy makró, ami után valóban csak egy gombnyomás és kész az egész éves tervezeted. Viszont annyira macerás ennek a megcsinálása, hogy szerintem nem érdemes vele foglalkozni. Egyszerűen nem éri meg, hogy egy évenkénti 5 perces munkát (azaz 12 munkalap A2:A4 beírását) ekkora hókuszpókusszal váltsál ki. Ráadásul olyannal, aminek a módosítása sem olyan egyszerű, mint az a3:a4 cellák esetenként szűkségessé váló átírása.
Azért nem működik Hó.utolsó.nap néven, mert csak a Helpjét fordították le, a függvény nevét elfelejtették átírni. Van iyen. Én is már harmadszor javítom sobodk munkalapját, és könnyen lehet, hogy még most sem 100%-os. Csak 99,9%-nyira. Ami murphy szerint bőven elég a galibához :))).
Örülök, hogy tudtam segíteni. Mert nem voltam benne biztos, hogy megfelel-e neked a munkalapformátumom. Ezért igyekeztem a lehető legdinamikusabbra alkotni a képleteket, hogy minél szabadabban variálhasd. De sajnos még így sem tökéletes. Ezért előfordulhat, hogy bizonyos cellamozgatásokra hibával, vagy ami még rosszabb, helytelen eredménnyel reagál. A problémát okozható kódot kijavítottam, és sobodk-3 néven feltettem a data.hu. Ezt a vátozatot még bátrabban variálhatod. Persze, ha változtatás nem szükséges, akkor a sobodk-2 is tökéletesen megfelelő.
Így van. A Ho.utolso.nap=eomonth. Ez ott volt nekem is, csak nem esett le a tantusz hogy az eo=end of, amit a sugóban lefordítottak a függvényeknél meg nem. Kösz.
Az összefésült kódot beírtam egy üres lapba. A cellák formátumát szövegre állítottam, és az első kódhoz még a sima "Time" helyett "Target.Value = Format(Time, "hh:mm")" írtam.
Így a dupla klikkes idő beírás remek.
De a manuális bevitel esetén, dobja az msgbox-ot, hogy "ilyen időpont nem létezik".
A két makró külön-külön remekül fut, de mivel a cellákat eltérően kell formázni (az egyiket időpontként, a másikat szövegként), így azonos területen valamelyik nem fog megfelelő eredményt hozni.
Magyar nyelvű excel 2007 sugójában van egy olyan függvényleírás, hogy HÓNAP.UTOLSÓ.NAP. A munkalapra beírva azonban az excel nem ismeri fel, és a függvénytárban sem szerepel. Honnan lehet rátölteni?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.EnableEvents = False On Error GoTo Hiba Pass = "jelszo" ActiveSheet.Unprotect Pass If Not Intersect(Target, Range("B34:B133, G34:G133")) Is Nothing Then Target.Value = Time Cancel = True End If Hiba: ActiveSheet.Protect Password:="jelszo" Application.EnableEvents = True End Sub
--------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range) Dim ido, ertek If (Not Intersect(Target, Range("U39")) Is Nothing) Or (Not Intersect(Target, Range("B34:B133, G34:G133")) Is Nothing) Then If Range(Target.Address) = "" Then Exit Sub Application.EnableEvents = False On Error GoTo Hiba ertek = Target * 1 ActiveSheet.Unprotect Password:="jelszo" If ertek > 2359 Or ertek < 0 Or Right(ertek, 2) > 59 Then GoTo Hiba Else Select Case Len(ertek) Case 1, 2 ido = "00:" & ertek Case 3 ido = "0" & Left(ertek, 1) & ":" & Right(ertek, 2) Case Else ido = Left(Target, 2) & ":" & Right(Target, 2) End Select Target.Value = Format(ido, "hh:mm") End If End If ActiveSheet.Protect Password:="jelszo" Application.EnableEvents = True Exit Sub
Hiba:
MsgBox "Hiba!" & Chr(10) & "Ilyen időpont nem létezik", vbInformation
Van két makróm, amik külön táblázatban vannak, és most egybe szeretném gyúrni őket, hogy egy területen bármelyiket tudjam használni.
- Az egyik dupla klikkre beírja az aktuális időpontot, (itt a cella formátuma "időpont")
- míg a másik a manuális időpont bevitelt könnyíti meg oly módon, hogy csak a 4 számot kell egymás után beírni (1235) és az enter után időformátum (12:35) lesz belőle. (itt a cella formátuma "szöveg")
Most arra gondoltam, hogy ugyanazon cellába mindkettőt tudjam használni.
Egymás alá másoltam, és próbálkoztam mindenféle szabdalással, de nem ment :-(. Az első gond az eltérő formázás volt.
Az időpont beviteli makrót egyébként a nagyszerű Delila alkotta számomra, de egyrészt nem akartam már csak őt zavarni, ráadásul, ha valakinek kellene ilyesmi makró, akkor tudja használni :-)
----------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Pass = "jelszo"
ActiveSheet.Unprotect Pass If Not Intersect(Target, Range("B34:B133, G34:G133")) Is Nothing Then
Target.Value = Time
Cancel = True
ActiveSheet.Protect Pass
End If
End Sub
--------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ido, ertek
If Not Intersect(Target, Range("U39")) Is Nothing Then
If Range(Target.Address) = "" Then Exit Sub
Application.EnableEvents = False
On Error GoTo Hiba
ertek = Target * 1
ActiveSheet.Unprotect Password:="jelszo"
If ertek > 2359 Or ertek < 0 Or Right(ertek, 2) > 59 Then
Úgy igaz, félmegoldás. Ezért egy másik módszert alkalmaztam végül. Nevezetesen, hogy a szomszédos oszlopban az eredeti oszlop értékeihez hozzáadtam 0-t, mert ebben az oszlopban már rá lehetett keresni a nullára. Kétségtelenül gagyibb megoldás, mint retro szuper tömbképlete. De az adott célnak megfelelt.
Nálam a ""-t tartalmazó cellát az üres(cella) fgv hamisnak látja, ami tök érthetőnek tűnik annak fényében, hogy a cella már ránézésre sem üres, mivel a második macskakörmöt karakterként ábrázolja.
Szenzációs! Sosem jöttem volna rá magamtól, hogy a vannak függvények, amelyek a ""-t csak üres stringnek látják (mint pl a hol.van), míg más függvények (mint pl. a boolean-ok) meg üres cellának is. Kösz.
Amikor az excel nem az excel, hanem a lotus kiértékelési metódusa szerint számol. Az excel beállításai/special legalján lehet választani. Néhány függvénynél más eredményt ad, mint az excel. Pl. Igaz/hamis helyett 1/0-t ad eredményül, amikkel utána normál számértékként lehet számolni, a string+1 összeadásnál a stringet nullának tekinti. Ez előnyös lehet, ha egy táblázat oszlopában a cellák értéke a cella fölötti+1, mert akkor ez a képlet a fejléc alatti sorban 1-t ad és nem hibajelzést, mint az excel. Az üres cellát nullának látja, ami nekem most ugyan kapóra jött, de általában inkább előnytelen. Ezért általában nem kapcsolom be. A súgóban egyébként leírja a két számítás különbségeit.
Lenne egy kis problémám amiben remélem tudtok segíteni :) C143-ba beírom, hogy 12 E143-ba HA(I143=C143;"minden ok";"nem ok") I143= 1215/100 És a kerekítés miatt azt írja ki, hogy "nem ok". Hogyan lehetne megoldani, hogy egész számokat vegye csak figyelembe.A cellaformázásnál a kerekítést próbáltam de nem nagyon hatotta meg sajnos.
Közben találtam egy megoldást, amit azonban jó lenne elkerülni. A hol.van(0;a1:a10;0) alapból nem találja meg az üres cellát a1:a10-ben, de a másodlagos képletkiértékeléssel igen. Ezt a számításmódot kéne valahogy alkalmazni kizárólag erre az egy képletre.
A HÉT.NAPJA függvénnyel operálnék. Az egyes lapokra felírnám valahova, a hét hanyadik napjait színezze, és ezekre a cellákra utalva állítanám be a feltételes formátumot az A oszlopban.
A X-eket HA függvénnyel íratnám be, szintén ezekre a cellákra hivatkozva.
Mindkét képletben szerepelnie kell a VAGY függvénynek is így első látásra.
És amikor két gépen készítesz egy táblázatot és mindenféle Excel-verziókban mented és teszteled és rászánod az időt és feltöltöd, akkor jön a user, akinek Libre Office van a munkahelyén, és nem úgy értelmezi az érvényesítési feltételt, mint az Excel, és akkor kezdheted vakarni a fejed!
Click on Excel option>Trust center>Trust center settings>privacy options> then in "Document specific settings" uncheck "Remove personal information from file properties on save"
vagy ha nem ez, akkor:
Re: Privacy warning disable Go to 'Developer Ribbon'. Click Macro Security. Click 'Privacy Options'. Uncheck all notifications.
"Biztonsági figyelmeztetés: Ez a dokumentum makrókat, ActiveX-vezérlőket, XML nyelvi bővítőcsomagokkal kapcsolatos információkat vagy webösszetevőket tartalmaz. Ezekben szerepelhetnek olyan személyi adatok, melyeket a Dokumentumfigyelő nem távolít el."
Baromi rendes az Excel, hogy erre figyelmeztet, de rejtett oszlopok, sorok, illetve makrók valóban vannak a fájlban. Keresgéltem, hogy valahol ki lehet-e kapcsolni ezt a figyelmeztetést, de nem találtam...
Éjjel egy után semmiképpen, amikor már minden normális makró alszik. :-) Szerintem olyan makrót lehet írni, ami állandóan figyel, de csak akkor leplezi le magát, ha elérte a kívánt értéket a cella.
Ez a régebbi verziókban is így érhető el. Egy ikont tettem ki hozzá (a többi huszon... mellé). Azért nem szeretem a 2003-nál frissebb verziókat, mert ott nem tudok saját, a tartalomra utaló rajzot rendelni az ikonokhoz.
Áááááá! És akkor van arcuk azt írni, hogy a korábban jól működő testreszabási lehetőség azért szűnt meg, mert a mostani elrendezés logikus és punktum! Tiszta Mac-filozófia: semmihez semmi közöd.
Sub masol() Dim lap%, oszlop%, WS As Worksheet, lapnev$ Set WS = Sheets("BEO")
For lap% = 2 To Worksheets.Count oszlop% = Sheets(lap%).Cells(1, "L") lapnev$ = Sheets(lap%).Name WS.Range(Cells(3, oszlop%), Cells(52, oszlop%)).Copy Sheets(lapnev$).Range("D2") Next End Sub
Ezzel fixen beírhatod a BEO lap megfelelő oszlopát az egyes lapok D oszlopába.
Makróval, nyomógombbal szeretném azért megoldani, mert ezt az átmásolást a hónap elején csak egyszer szeretném megcsinálni. Ez lenne a tervezett beosztás, de ha változtatok a beo lapon, akkor nem szeretném, ha követné a változást.
A napi fülön a terv beosztás mellett kellene vezetni az esetleges változást is, látni kellene, hogy mi volt az eredeti, és "mivé" változott.
Biztos? A1-be begépeltem, hogy ezer (betűkkel), A2-be, hogy =A1>2, és IGAZ értéket írt ki. Jogosan, hiszen ezer>2. :-) Szépséghiba, hogy A1-be a mínusz ezer szöveget írva is igazat ad ki. :-)
A másikra tud valaki valamit? Ha nem, akkor le kell vennem a cellaérvényesítést. :-(
Pontosan így szól az egyik képlet: =ÉS(SZÁM(B6);HA(F5="Magyarország";ÉS(B6>1000;B6<10000);IGAZ))
Erre jön a hibaüzenet (nem a hibaablakból, hanem a súgóból másolom, mert onnan lehet):
Ez a munkalap a kijelölt fájlformátumban a sorokra és oszlopokra vonatkozó korlátozásokon kívül eső cellákban tartalmaz adatokat. A 256 oszlopon (IV) és 65 536 sorból álló tartományon kívül eső adatokat az Excel nem fogja menteni. Az ebben a tartományban szereplő adatokra mutató képlethivatkozások eredménye #HIV! hiba lesz.
A másolós, szinezős táblázatban az egyik cellában egy indirekt függvénnyel hoztad ki azt a területet (beo!c3:c52), ahol keresni kellene.
A napi lapokra (mondjuk a B6-tól) egy gomb segítségével ezt a területet egyben is át szeretném másolni. Tehát a másolandó területet az indirektes cellából venné a makró (hogy bármelyik lapon szeretném másolni, a megfelelő területet másolja).
"Biztonsági figyelmeztetés: Ez a dokumentum makrókat, ActiveX-vezérlőket, XML nyelvi bővítőcsomagokkal kapcsolatos információkat vagy webösszetevőket tartalmaz. Ezekben szerepelhetnek olyan személyi adatok, melyeket a Dokumentumfigyelő nem távolít el."
Baromi rendes az Excel, hogy erre figyelmeztet, de rejtett oszlopok, sorok, illetve makrók valóban vannak a fájlban. Keresgéltem, hogy valahol ki lehet-e kapcsolni ezt a figyelmeztetést, de nem találtam...
Tudtommal a régebbi verziókban max. 256 karakter helyezhető el 1 cellában.
A cellák egyesítése helyett mindig inkább a "A kijelölés közepére" megoldást alkalmazom a vízszintes elrendezésnél, mert az egyesítés sok galibát okozhat.
Érvényesítésből is működik azon a lapon, amelyikhez hozzárendelted a makrót, és az érvényesítést az A1 cellába tetted.
A makró a Terület, Kód, és Személy választására reagál színezéssel. Írd át azokra a szövegekre (és cellára), amiket alkalmazni akarsz. A Select Case listát bővítheted.
Excel 2007-ben készítek egy 2000-2003 formátumú xls-t (netről tudja le- és kitölteni az is, akinek nincs förmedvénye).
1. Hogy képtelen vagyok egy halványszürke hátteret beállítani egy cellának, hgy ne visítson formátumvesztésért a mentéskor, az érthetetlen, de még lenyelhető.
2. Két cellában összetett érvényesítési képlet van, valami olyasmivel, hogy =ÉS(szám(ez a cella); HA(F5="Magyarország";cella saját intervalluma;IGAZ)). (Irányítószám, mobilszám korlátozása.) Na erre kiírja mentéskor, hogy inkompatibilis, mert túlléptem a 256 oszlopot és 65536 sort, pedig nem! És ezt a két cellát dobja ki. De nem minden mentéskor, és talán az is számít, melyik cellán van mentéskor a kurzor. Látott már valaki ilyesmit? Itthon 2000-ben simán megnyitja.
3. Van egy ló nagy egyesített cella, amelybe hosszú szöveget írtam sortöréssel, van benne egy enter is. Jól nézett ki, de itthon 2000-es Excelben megnyitva a sortörés csak az első bekezdés közepéig tart, onnantól átvált bekezdésenként egysoros üzemmódba, és nem látszik a szöveg. Igen, vannak szóközök. És nem is tudom kijavítani!
Találkozott ilyen parajelenségekkel valaki?
Most viszem be a laptopot, hogy kétféle Excelem legyen ma odabent.
Sajnos, csak az L oszloptól tudok felvenni segédoszlopokat a data részhez egyáltalán nem nyúlhatok. + Sajnos a kritérium mezőt nem használhatom, főleg, hogy szűrésnél bármelyik mezőre szűrhet, nem csak termékre...
Mindenesetre egy szóval igen.. ez lenne a megoldás, csak olyan speckó képlettel a G,H,I oszlopokban ami autoszűrésnél is működik...
Nos, csináltam egy ilyet. Ráadásul nem csak a számítások veszik figyelembe az autoszűrést, de a diagram is igazodik az autoszűréshez. Frankón. Ez ugyan az excel érdeme, de azért én is meg vagyok elégedve magammal :))). Remélem a barátod meg meg lesz elégedve veled. Felraktam a data.hu-ra. Sok sikert hozzá. Ha valami kérdésed lenne a működésével kapcsolatban, csak szólj. De nem hiszem, hogy lenne, mert elég részletes magyarázatokat fűztem hozzá a w16 cellától.
Remélem ez megteszi. A ThisWorkbook modulba kell bemásolni. Hátránya, hogy csak akkor fut (nyilván), ha a user engedélyezi a makrókat.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Sheet1").Range("B15") = "" Then MsgBox "Kérlek töltsd ki a B15-ös cellát, mielőtt kilépsz!" Application.Goto Sheets("Sheet1").Range("B15") Cancel = True End If
Van egy cella, mondjuk B15 (ha nem az, majd átjavítom), ami alapból üres, de le fogom korlátozni egy igen-nem választásra. Kéne egy automatikusan futó makró, amelyik mentési kísérletnél ellenőrzi ezt a cellát, és ha üres, akkor barátságosan, de teljes határozottsággal arra kéri a usert, hogy mentés előtt töltse ki. :-)
A legjobb meg az, amikor kombinálod a kettőt. Adatbáziskezelővel szépen előkészíted az adatot, Excellel meg hozzáteszed a csicsát. És mindezt azár gombnyomásra.
"Megnéztem a felrakott példádat, amelyből nagy nehezen sikerült kihámoznom, hogy különböző szűréseket csinálsz, amelyek időbeli lefutását ugyanúgy akarod értékelni, mint a teljes táblázatét. Tehát ha pl. ing-re és pólóra szűrsz, azt úgy kell elképzelni, hogyha nadrág és pulóver nem lenne, akkor milyen lenne az eredményesség időbeli lefutása."
Pontosan így gondolom, és a megoldás grafikon nélküli része el is fogadható, hiszen működik...csak akinek csinálom sajnos nem hajlandó - pontosabban nem tud és szeretne autoszűrő nélkül - létezni.
A teljes táblázat 1 pici részét másoltam csak ide... ezen kívül még igen sok lekérdezést kell csinálnia. És mivel ott nincs egy fölöttes cellára hivatkozás... működik rendesen.
Csak szemléltetés képpen a teljes táblázat A17:CP607 ig tart. És ebből csak ez a 3 oszlop ami szűrésnél el...sz..ródik. Szóval .....
Mindenesetre egy szóval igen.. ez lenne a megoldás, csak olyan speckó képlettel a G,H,I oszlopokban ami autoszűrésnél is működik...
Azért ott a pont a részemről és hálás köszönet a segítségért....
"a feladványszerző azt szeretné, hogy minden egyes szűrésnél dinamikusan igazodjanak a szűrési outputokhoz"
Erre alapvetően fel vannak készítve az adatbázis-kezelők, az Accessben pl. frissítő lekérdezésnek hívják.
Egyszer kell megírni, és utána gombnyomásra fut, nem kell többé szűrőkkel vacakolni.
Amiben az Access kevesebb az Excelnél, az a szépen formázott színes-szagos kimenet meg a diagramkészítés. Efféle számításokban viszont jobb, főleg, ha ismétlődnek. A szűréseket Excelben minden alkalommal meg kell csinálni, adatbázis-kezelőben egyszer.
Az viszont igaz, hogy az adatbázisok más filozófia szerint működnek, mint az Excel, és olyan személeti váltást jelentenek, amit a legtöbb embernek nehéz meglépni. Nekem is az volt, de örülök, hogy megtettem.
A konkrét példába nem ástam bele magam mélyebben, de a nagyon bonyolult szűrés és a szűrési eredmény visszacsatolása két olyan indikátor, ami azt mutatja, hogy érdemes elgondolkodni a szemléletváltáson.
Még annyit hozzáfűznék, hogy a táblázatodat célszerű volna egy 0-ik sorral kibővíteni, a termékoszlopba beírni hogy kezdő, a halmozott egyenlegbe az i1-ből az 5729-t, a változás és a valami oszlopokba meg 0-t, valamint a ghi oszlopok képleteit az új helyzetnek megfelelően átalakítani. Továbbá minden szűrésbe a kezdőt is belevenni. Enélkül ugyanis minden szűrésed más bázisról indul. Az eltérő bázisok ugyan nem okoznak jelentős eltéréseket, de gondltam megemlítem, ha már észrevettem.
Biztos igazad van. De ha valaki nem ismeri az adatbáziskezelőket csak az excelt, az kénytelen az excellel dolgozni. Azonkívül ez egy olyan speciális probléma, hogy adatbáziskezelővel is elég keserves lehet. Mivel nem az excel adatbáziskezelése okozza a nehézséget, hanem az, hogy az adattábla képletei a szűrésekkor megőrzik az alapviszonyulásaikat, míg a feladványszerző azt szeretné, hogy minden egyes szűrésnél dinamikusan igazodjanak a szűrési outputokhoz. Én sem értek az adatbáziskezelőkhöz, de az a gyanum, hogy erre azok sincsenek igazán felkészítve.
Ilyenkor jövök én az offolásommal, hogy az ennyire összetett lekérdezéseket már sokkal célszerűbb volna adatbázis-kezelőben megoldani. Az ilyen feladatokra rá lehet ugyan erőszakolni az Excelt, ha valaki nagyon szeretné, de nem erre van kitalálva és nem ez a természetes módja.
Szerintem úgy minden további nélkül megcsinálható, hogy a 2. táblázat 1-6 sorára cellánként elvégzed a kiértékelést amikhez persze elég komplikált képletek kellenek, ami ha igaz, beírod amit kell, ha hamis akkor meg üresstring. Persze elég az első sorban veszkődni velük, mert tovább másolhatók. A végén az üresen maradt sorokat törlöd és az első oszlopot újra sorszámozod.
Megnéztem a felrakott példádat, amelyből nagy nehezen sikerült kihámoznom, hogy különböző szűréseket csinálsz, amelyek időbeli lefutását ugyanúgy akarod értékelni, mint a teljes táblázatét. Tehát ha pl. ing-re és pólóra szűrsz, azt úgy kell elképzelni, hogyha nadrág és pulóver nem lenne, akkor milyen lenne az eredményesség időbeli lefutása. Ha valóban ez a feladat, akkor a következőket tudom mondani: Sajnos autófilterrel nem oldható meg, csak special szűréssel. Nem tudom mennyire vagy otthon benne, ha kevéssé, akkor muszáj lesz egy kicsit foglalkoznod vele. Hogy megkönnyítsem a dolgot, kidolgoztam a megoldást, elláttam magyarázatokkal is az L12 cellától, és feltettem a data.hu-ra. A letöltő linkje:
A felső mondjuk a munkalap1-en mig az alsó a munkalap 2-n található
A munkalap2 táblája egy olyan összefoglaló táblázat amely a munka1 táblázat sorait, azoknak "kulcs" oszlopában található értékei alapján gyűjti össze, úgy hogy a kritérium az hogy a "kulcs" oszlop tartalmazza a "zöld" szót. Ha a "kulcs" oszlop nem tartalmazza a "zöld" szót, vagy más "szint" tartalmaz, nem kerül be 2. táblázatba.
A 2.táblázat tartalmazza az első "dátum", "nap", "Érték" oszlopait és a felsorolást a dátum oszlop értékei szerinti növekvő sorrendben állitja föl, úgy hogy az egymást követő sorok között nem marad üres hely!!
A 2. táblázatban a név1,név2, névstb oszlopok egymástól függetlenül szerepelnek, DE a "szöveg" oszlop mindegyikkel kapcsolatban van:
Ha a 2. táblázat 1. sorának név 1 oszlopában van érték, akkor a táblázat "szöveg" oszlopa az 1. sorban tartalmazza az első táblázat név1 rész "szöveg" cellájának tartalmát.(kép alapján talán egyértelműbb)
Ha azonban a 2. táblázat valamely sora mind a név 1 mind a név 2 (és igy tovább) oszlopok metszésében tartalmaz "értéket" akkor a sor "szöveg" cellájában minden oszlop szövegének benne kellene lennie. (képen szintén látszik)
nem tudom hogy lehetséges e egyáltalán ilyet csinálni, de ha igen és valaki tud benne segiteni akkor nagyon hálás lennék.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("J28:J127")) Is Nothing Then
Target.Value = Application.UserName
Cancel = True
End If
End Sub
A felhasználónevek sajnos csak annyi, hogy "kovács", vagy "szabó", de azt szeretném, ha a teljes nevet beírná. Tehát, ha a felhasználóneve "kovács", akkor Kovács Istvánt, ha "szabó", akkor Szabó Károlyt stb
Akkor a fenti kódba kellene egy select case-t valahogy beszúrni?
Nézz utána a SUBTOTAL (RÉSZOSSZEG?) függvénynek. Ha a SUBTOTAL első paramétere 100-nál több akkor nem veszi figyelembe az elrejtett cellák tartalmát.
Annyit kell tegyél, hogy minden képletben a pld. B5 helyett a SUBTOTAL(109,B5)-öt használod. Ekkor a B5 értékét nem veszi figyelembe (nullának veszi) ha a B5 cella rejtett.
Ha az A oszlopot és az első sort úgy töltöd ki, mint a példádban, akkor a C-oszlopban állítsd át a számformátumot 0:00 formátumra, majd c2-től a képletek: $c$1+$a2*60/86400, es akkor a kivánt formatumot kapod. (A 86400 magyarázata hogy egy nap a 86400 sec, mivel 60*60*24=86400
A B C
0 Moszkva tér 6:00)
3 János kórház 6:03
5 Budagyöngye 6:05
8 Pasarét 6:08
18 Hüvösvölgy 6:18
Ha az A oszlopot időformátumban adod meg, azaz 0:00, 0:03, 0:05 stb, akkor a c-oszlop képletek leegyszerüsödnek: : $c$1+$a2, stb. Így is a kivánt formátumot kapod.
Ha több kezdőponttal is meg akarod kapni az állomási időket, akkor nem elég a c1 továbbmásolása, hanem a teljes c-oszlopot kell továbbmásolgatnod. Ekkor mindegyik oszlop a saját indulási idejéhez igazodik.