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.
Lehet, hogy nem vagyok profi, az is lehet, hogy néhány lépést feleslegesen csinálok manuálisan kulimunka módon, de megoldottam.
Html oldalak lementve, összefűzve, notepaden keresztül egyszerű szöveggé alakítva. Beilleszte az excelbe, aztán másfél óra másolgatás beillesztgetés, felesleges tartalmak törlése, és kész is, kb 25ezer soros adattábla.
Egy egyszerűnek tűnő feladat megoldásában szeretnék segítséget kérni. Lehet, hogy mégsem olyan könnyű, mert nekem nem sikerült megcsinálnom. Az automatikus javítás funkcióval próbálkoztam, de mivel mindíg más az érték, az nem jött be. Tudna valaki segíteni? Nem vagyok egy EXCEL guru...:)
A következő lenne a feladat:
- Adott táblázat oszlopában csak időformátumok szerepelnek, cellánként más és más, a következő formátumban pl;01.23.56.
- A kérdés az, meg lehet azt oldani valamilyen módon, hogy a beírásnál ne kelljen a pontokat kitenni, csak a számokat folyamatosan írva, ezt elvégezze a program?
- Erre gondoltam: 012356 beírása után az excel javítja 01.23.56. formátumra. Természetesen mindíg más számok állnak az adott helyen, azaz változó értékűek.
Én is kíváncsian várom azt a profit, aki majd megoldja néhányszáz weboldalról az ismeretlen szerkezetű, ismeretlen formátumú táblázat beolvasását egy(?) excel munkalapra.
Közben találtam egy programot, ami összefűzi a sok rohadt html-t, és az úgy egész egyszerű megoldás. Lesz belőle egy borzalmasan hosszú html file, abból meg három kattintással lesz egyszerű szöveg tabulátorokkal elválasztva, és már mehet is a táblázatba. Ott meg könnyedén kitörlöm belőle a resztliket.
Aztán már csak azt kell megoldanom, hogy csoportonként legyenek sorba rendezve, mert a html-ek elnevezése - és emiatt az időrendisége sem - nem követi a tartalmuk időrendjét.
Minden évből, minden hétről van két-két tábla, és ezek sajnos - ahogy lejönnek a szerverről - a fileneveikben nem követik az időrendiséget, emiatt a beillesztett tartalom is blokkonként (heti két-két tábla) összevissza lesz. De azt már megcsinálom kézzel. Minden blokk elejére beszúrok egy kezdő-dátumot, azt végigcopyzom szépen minden sora elé, aztán utána az egész bazinagy táblát dátum szerint sorbarendezem, és kész is vagyok.
Az alábbi feladványra keresek ötleteket, hogy hogyan lehetne gyorsan kivitelezni.
Van egy halom (kb 500db) lementett weboldalam, mindegyiken van egy-egy rész, ami egy táblázatba rendezett rész.
Ezekből szeretném az adatokat egyszerű szöveges mezőkként excelbe importálni, méghozzá attól egy kicsit gyorsabb módszerrel, mint hogy megnyitom az egyiket, kijelölöm a kérdéses részt, ctrl-c, beillesztem egy notepad-be, hogy egyszerű szöveg legyen csak, aztán megint ctrl-a, ctrl-c, majd az excelben beillesztem.
Ráadásul kb 500 önálló oldallal kéne megcsinálni ezt. Van valami ötletetek?
(még az is eszembe jutott, hogy valami módon az önálló html-eket összefűzni egyetlen bazinagy lappá, és onnan egyetlen kijelölés-másolás-beillesztéssel be lehetne hányni az egészet az excelbe)
Első pillanatban arra gondoltam, hogy ez lehetetlen. Aztán találtam egy programot. Megnézve a kódját, arra gondoltam, hogy ez marhaság, így sose fogja megtalálni a lapvédelem jelszavát. Azért kíváncsiságból elindítottam. És legnagyobb döbbenetemre 1-2 percen belül feloldotta a védelmet. Legalábbis Excel 2003 alatt. Az igaz, hogy az általa megtalált feloldó jelszónak semmi köze ahhoz, amit én beállítottam, de működik. Feltételezem, hogy valami apró szoftverhibát használ ki. Nézd meg, hogy nálad is működik-e:
Sub PasswordBreaker()
'Author unknown but submitted by brettdj of www.experts-exchange.com
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
Mivel lehet egy excel tábla lapvédelmét feloldani ha nem tudom a jelszót? Az excel a neten elérhető nyilvánosan, semmi iilegális vagy ilyesmi, csak módosítani szeretnénk benne 1-2 apróságot a saját felhasználásunknak megfelelően. Köszi.
Excel 2007 verzióban importálok adatokat a webről.
Klikkek: 1. Külső adatok importálása webről. 2. Az előugró ablakba bekopizom az url-címet és klikk "Keresés". 3. Megjelenik a kívánt oldal, de mielőtt klikkelnék az "Importálás"-ra, a jobb felső sarokban meg kell nyitnom a "Beállítások"-at, mert 4. be kell pipálnom a "Dátumfelismerás kikapcsolása" üres jelölőnégyzetet, mivel nem akarom, hogy dátumként kezeljen adatokat. Majd 5. "Importálás"
A 4. lépéssel van bajom, mert minden egyes új importáláskor mindig be kell jelelnöm újra a "Dátumfelismerás kikapcsolása" négyzetet, mert üres.
Kérdésem: hogyan lehet elérni, hogy ez a négyzet legyen mindig bepipálva? Ugyanis sokat kell importálnom, ezért az állandó pipálgatás és okézás elég fárasztó és uncsi, de sajnos nem találtam erre a problémára sehol megoldást.
Örülök, mert ez nekem is újdonság volt. Ki is próbáltam, de még azt nem találtam meg, hogy miként tudom megakadályozni az "Invalid property value" hibaüzenetet. Lévén, hogy jobban szeretem magam fogalmazni a hibaüzenetet.
Köszi a linket. Sajnos itthon nem tudom kipróbálni végig, mert a 2013 Outlokban nincs .xls exportálási lehetőség, csak calendar, és vesszővel ellátott formátum. Az utóbbival próbálkoztam de ez így már nagyon bonyolult, mert excelből csak .csv-be tudok menteni, onnan meg megint át kell ültetni vesszősbe. Az egész tovább tart, mintha egyenként bevinném az eseményeket. :( Nem is értem miért butítanak ilyen irányba programot egy új verziónál. A Picture Managert is kiszedték.
Én úgy oldottam meg, hogy a programban a Combobox change eseményében annak .ListIndex tulajdonságát vizsgálom. Ha az -1, akkor a tartományon kívül eső elemet választott.
Na majd mindjárt megérted. Mint ahogy nekem meg ez a válaszod kellett ahhoz, hogy ne a Sugó-ban, hanem a Sugó menűben keressem a Hibajavítást. Mivel az olyan nüansznyi különbségeken, mint Sugó vagy Sugó menü, gyakran átsiklok :(((. Bár inkább :)))).
Bemásolod egy üres modulba a két makrót. Látod, hogy az elején a Function kulcsszót (így kell ezt írni?) találod, ami meghatározza, hogy ez egy függvény. A függvény két argumentuma, ahogy már Jimmy is írta, a Mintacella, és a Tartomany.
A SZUM függvény argumentuma a tartomány, amiknek az értékét összegezni akarod. Ennél a két függvénynél meg kell adnod első argumentumként azt a cellát, aminek a háttérszíne szerint akarod összegezni, ill. megszámlálni a második argumentumként megadott tartományban lévő, azonos háttérszínű cellákat.
Van egy sejtésem, de én mint látszik nem értek a makrokhoz. Csak felvettem a recorderrel gyakori cslekedeteket, elneveztem és amikor hasonló feladatokat kellett gépiesen megoldani elindítottam és megcsinálta. Ennyi a macro tapasztalatom. Ahogy próbálom értelmezni ezek saját függvények is lehetnének és ezeket lehetne egy cellában parancsként függvényként behívni. Így akár logikusnak is tünhet, de hova kell akkor beírni és hogy hívom elő fx-ekkel? Kicsit olyan ez nekem, mint amikor az ősembher kézigránát működését gyakorlatban próbálja tanulmányozni. Na jó, nem ősember, hanem viking harcos. :)
Bocs, de nagyon benne vok a kerekerdőben. Ha kitörlöm "Sub a() hogy indtsam el a macrot, mert "a" a neve. Kér vmi macronevet. Vagy nem a makrok megjelenítése menűből kell indítani?
Ezek a kések felhasználói függények. Úgy kell használni őket, mint a beépített függvényeket (SZUM, ÁTLAG, stb). A Mintacella és a Tartomany a függvény argumentumai.
Egyébként az egyik lapon kijelöltem egy tartományt, amelyet elneveztem "Mintacella"-nak.
A macrot A-nak. Próbáltam indítani és az elején lelökött. Ja, ha másik lapon akorom a műveleteket át kell lépnem a kérdéses lapra? Lehet olyamt, hogy a mintacella cella mellé írja az eredményt? Mi van akkor, ha több színt akarok összesíteni.? Csinálni kell az igény szerint "Mintacella1, Mintacella2, Mintacellan cellákat színezve és értelemszerűen annyiszor módosítva másolni a macrot?
Lehet elég gyógyi kérdések lehetnek, de ha már kést adtál a kezemb tudjam, hogy mit kell fogni és mivel vág:)
2 makró (nem írtam). Az egyik a mintacellának megfelelő hátterű cellák összegét adja, a másik ezeknek a darabszámát.
Function SumColor(Mintacella As Range, Tartomany As Range) 'A mintaként bejelölt hátterű cellákban szereplő számokat összegzi Dim rngCell As Range nColor = Mintacella.Interior.Color nResult = 0 For Each rngCell In Tartomany If rngCell.Interior.Color = nColor Then nResult = nResult + WorksheetFunction.Sum(rngCell) End If Next rngCell SumColor = nResult End Function
Function CountColor(Mintacella As Range, Tartomany As Range) 'Összeszámolja, hogy a mintaként jelölt háttérszínű cellából hány darab 'van a kijelölt tartományban. Dim rngCell As Range nColor = Mintacella.Interior.Color nResult = 0 For Each rngCell In Tartomany If rngCell.Interior.Color = nColor Then nResult = nResult + 1 End If Next rngCell CountColor = nResult End Function
Azt tudom, de néhézkes online számoltatni és világos + sötétebb zöld más szűrés. Az elegánsabb az, ha beszíneznel egy cellád mondjuk zöldre és a zöldek számolója azonnal eggyel nő!
Köszi, műkszik minden. Apropó volt régebben egy olyan problémám amiben segített volna egy fx, amely lefordítja a színeket RGB színkódokká. Arról van szó, hogy sok alapfelhasználó egy táblázatban manuálisan (nem feltételes) formázással színekkel jelöl cellákat. Ez jó, de későbbi gyors számolásokat nem tudok belőle indítani. Ha lehetne egy fx-t alkalmazni, amelyik meg tudná adni pl RGB kóddal a cella színét akkor utána akár ki lehetne számoltatni a pirosok, sárgák, zöldek számát!stb.
Van egy elég komplex excel rendszerem több xls-ből mf-ből ami összefügg mindennel.
Szeretném dokumentálni, hogy milyen függvény mit csinál illetve hogyan épül fel a rendszer. Valamint későbbi fejlesztési ötleteket megjelölni.
Ez ügyben már adtatok 1-2szer tanácsot.
De nem létezik valami olyan progi ahol mondjuk a táblázatok kapcsolatát tudom ábrázolni, kommenteket fűzni stb. Szóval létezik valami "dokumentálós progi" egyben?
Ha nem nagy kérés a számok nézésénél még meg tudnád nézni, hogy az alapszineke is lehessen változtatni. Pl egyik hasábrész kék bal sraff, felette kék jobb sraff. 3 rész a hasábokban piros jobb sraff, negyedik bal piros sraff.
A VBA megoldás sokkal egyszerűbb mint gondolnád. Szájbarágósan.
1.) Excelben jelöld ki az a grafikon darabot amit straffolni szeretnél.
2.) Nyomd le és tartsd lenyomva az ALT billentyűt és nyomd le az F11-et. Ez felnyitja a visual basic editort (VBE).
3.) Nézd meg, hogy van-e a VBE-ben egy Immediate nevű panel. Ha nincs nyomd le és tartsd lenyomva a Ctrl billentyűt és nyomd le a "g" billentyűt.
4.) Kattints a VBE Immediate paneljába és írd be a következőd: selection.fill.patterned (4)
5.) Válts vissza excelbe és a kiválasztott grafikonelem straffozott lesz. Ha nem akkor játsz a fenti kódban lévő számmal.
6.) A fenti játékot csináld meg mindegyik grafikonelemmel.
7.) Mikor végeztél, csak simán lépj ki a VBE-ből.
A zárójelben lévő szám (a fenti példában 4) egy xlpattern nevű változó értékének felel meg, ha van egy kis időm belinkelem milyen értékei lehetnek. Addig csak próbálkozz különféle számokkal.
Valóban. Nálam azért nem csinálta mert a windows7-en levő excel 2003-mal próbálkoztam. Ezen a gépen párhuzamosan fent van az excel 2007 is, így a 2 excel időnként valszeg összegabalyodik. De az XP-gépen a szoló 2003-as nálam is úgy viselkedett ahogy leírtad.
Sraffozás ügyben elgépeltem a dolgot. Bocs, de a lényeg, hogy az én verziómban nincs alapból ilyen lehetőség. Sajna se angolban, se programozásban nem vagyok olyan penge, hogy a beépített macrokat be tudjam tenni. A linken beadot angolnyelvű magyarázat akár jó is lehet. Szóval, aki szán rám időt, az lsz "felhasználóbarát módban", magyarul szájbarágosan írja le, mit kell beépíteni, hogy a diagram ne csak "csepészni, hanem sakkozni" is tudjon. :)
1: C:Program FilesMicrosoft OfficeOFFICExxXLSTART (ahol xx az excel verziójától függő szám: 2003-nál 11, 2007-nél 12, a többit nem tudom)
2: C:Documents and Settings<Felhasználónév>Application DataMicrosoftExcelXLSTART
A PERSONAL.XLS akkor jön létre, ha például kérsz egy új makró rögzítést, és a rögzítés helyének az "Egyéni makró-munkafüzetben" helyet adod meg. A programból kilépve rákérdez, hogy mented-e a változásokat az Egyéni makró-munkafüzetbe. Ha igent mondasz, akkor készül el a PERSONAL.XLS.
Érdekes, hogy a Kovalcsik féle - Excel 97-ről szóló - tankönyvben a fájl az első változat szerinti helyre kerül, nálam az Excel 2003-as verzióban a második helyre.
Ha a megadott helyen megvan a PERSONAL.XLS fájl, akkor az Excel minden indításakor betölti azt a háttérben, és az ott lévő makrók automatikusan elérhetők, és használhatók.
Nekem most a földszinten van a 2010-es exceles gépem, szóval fizikai lehetetlenség kipróbálni ( :-) ), de lehet a 2010-esbe visszarakták, csak a 2007-esben nincs.
Megnéztem itt bent is, tudok "kitöltés mintával" menüpontból sraffozni, itt is és otthon is 14.0 a verziószám, MS Office Prof Plus 2010. Szóval akkor most nem értem...
Szóval sraffozás ügyben azt találtam, hogy kivették a user interface-ből, szóval hagyományos módon nem lehet sraffozni. DE, az object modelben benthagyták, szóval VBA-ből lehet.
Igazad van. Ott volt a tévedés a részemről, hogy azt hittem, hogy a cimke=név. Vagy egy félórát studiroztam a válaszod nyomán, míg erre rájöttem. És most már kezdem kapisgálni. De egy valami változatlanul merő homály. A 2003-ban mire való a Beszúrás/Név/Cimke/Cimketartomány felvétele?
Szvsz nem biztos hogy szükséges volt. Mivel kipróbálva a javaslatod, azt tapasztaltam hogy secko jedno, hogy ki van-e pipálva a cimkék elfogadása vagy nincs kipipálva. Én se értem....
Kösz. Megint tanultam valamit. Most már csak azt áruld el, hogy sikerült a 21874 képen a számfomátumú évszámokat sorcimkeként elfogadtatni. Mert nekem ezt nem hajlandó.
Az elérhető, hogy a 2003-as verzióban a Képletekben címkék is használhatók beállítás meg is őrződjön, és az excel megnyitásakor ez legyen az alapértelmezés? Vagy éppen azért tartják a "Munkafüzet-beállítások" név alatt, mert minden munkafüzetnél külön kell megadni?
A 2007-ben előre ki kell jelölnöd a táblázatot, Képletek | Definiált nevek | Kijelölésből új | Felső sorból + Bal oszlopból. Ezután már működik, de nagyon finnyás, a szám-, vagy számmal kezdődő-, vagy szóközt is tartalmazó neveket szívből utálja.
Írhatsz pl. Év 2010, Év 2011-et, a névadásban átalakítja Év_2010-re és Év_2011-re. Hivatkozni is így tudsz rá.
A cellába beírod az egyenlőségjelet, F3-ra előjönnek a nevek, amik közül választasz, szóköz, és ismét F3 a másik névhez.
Próbáltam, hogy az éveket eleve szöveg formátumban adtam meg, ekkor a névadásnál _2010 lesz belőle.
Sziasztok, segítsetek lécci: olyat szeretnék, hogy ha egy cellába beírok egy értéket, vagy bármit, akkor felugorjon egy ablak, és rákérdezzen, hogy valóban helyes-e a beírt érték, megjelenítve a panelen a beírt értéket is. Kösz, üdv.
Minden bizonnyal másképp értelmezik a tömböt mint te meg én. De csak itt, máshol nem.
Annak meg szerintem nem kéne problémának lennie, hogy a HOL.VAN csak egy számot ad vissza egy kétdimenziós tömbben. Miután azt minden további nélkül megoldották, hogy a cells(x) formula egyértelműen meghatározza a cellát. Pl. a
Range("a1:j10").cells(24) egyértelműen a D3 cellát.
A vlookup és a match kombinálása ötletes és sok esetben nagyon hasznos, (emiatt én is gyakran csinálok összetett vlookup-t), de pont inverze az általam felvetett problémának. Itt ugyanis a sor és az oszlop alapján határozzuk meg a keresett cellát, míg a felvetett problémánál a cellaérték alapján kéne a cellát meghatározni, majd a sorszáma alapján a hozzátartozó az oszlopot és a sort.
De kösz hogy leírtad véleményed. Ez is kellett hozza, hogy megnyugodjak abban, hogy a Hol.van csak egy dimenziós tömbön működik.
Az a gyanúm, hogy maga a hol.van függvény ezt nem tudja. Hiszen ehhez két adatot kellene visszaadnia, egy sor- és egy oszlopszámot. Márpedig a függvény egyetlen relativ számot ad vissza, mégpedig a keresett értéknek a megadott (az összes példában egydimenziós) tartományon belüli elhelyezkedését (ha pontos keresést kértünk).
Mellesleg én a súgóban nem találtam utalást a két dimenziós tömbben való keresésre, csak az a gyanúm, hogy a MS súgója a tábla és a tömb fogalmakat kicsit másképp használja, mint ahogy én gondolom. Mert az én gondolkodásomban a tábla/adattábla kétdimenziósként jelenik meg, hacsak nem teszem hozzá, hogy egy sorra, vagy oszlopra gondolok, azaz egydimenziósról tábláról van szó.
Ha jól értem, hogy mit értesz straffolás alatt, akkor a becsatolt kép szerint a 'Kitöltés képpel vagy anyagmintával'-t kell választanod. Az anyagminta az amit keresel.
Nem értem. Mi a visszalépés? A 14-es verzió a 2010-es. Ha ennél magasabb verziószámod van, akkor egyrészt neked most jó, másrészt meg esélyesen nem 2010-esed, hanem 2013-asod van :)
Jobb katt a területen, amit sraffoznál, ~terület formázása -> kitöltés -> kitöltés mintával és már válogathatsz is a sraffozásokból. Ugyanitt kép, anyagminta, szín, akármi is beállítható.
Régi (2007-es) Excelben a grafikon területeinek mintázattal (sraffoással) való ellátása könnyű volt. A 2010-es Excelben ezt nem tudom hogy kell. Tudja-e vki, hogy hogyan lehet 2010 Excelben a grafikon területeit sraffozzni. Fekete-fehér nyomtatónál könnyebb lenne a megkülömböztetés.
Gondolom, visszavonható a tiltás, annyira csak nem pancserek már, hogy kihagyják ezt.
Valóban van ilyen jelenség, hogy hosszan megnyitott ablakból elszáll a hozzászólás, de egy percnél azért sokkal hosszabb ez az idő. Megoldás lehet az is, hogy az ember itt írja, és küldés előtt bemásolja vágólapra, de szövegszerkesztőben írni is bölcs dolog, csak vigyázni kell, hogy jól legyen beillesztve (nem tudom, mikor jönnek elő ezek a borzalmas Office salátaszövegek).
Az igazán hosszúkat persze mindig eleve Wordben írom, mondjuk a túrabeszámolókat.
Nem értem a problémát. Egészitsd ki a táblázatodat a Keresosor/oszlop segédtartományokkal, igazitsd hozzájuk a D6-D7 cellák képleteit, és írd be D1-be a szükséges vasalás számítását. És kész. A D6-D7-ben ott az eredmény
Nagyon szépen köszönöm a segítséget annyi a probléma, hogy láttam hogy az itteni példa táblázatban benne van a 4780-as érték egyszer. Nekem az a problémám, a 4780 egy külön számolás eredménye. Ennyi mm2 vasalás szükséges a keresztmetszetbe. Az én táblázatom pedig a vasak átmérőjének és darabszámának függvényében tünteti fel és ebben a táblázatban kellene megállapítani, hogy melyik átmérő és melyik darabszám a megfelelő. Tényleg köszi a segítséget.
A Min és Kicsi képletekben a $B$11:$F$23+200 részlet természetesen hibás. A 200 helyett jó nagy baca számot kell beírni, minimálisan nagyobbat mint a D1 kritérium minusz a táblázat legkisebb száma.
Restellem, de ez van. A 200 azért lett 200, mert a megoldást 0-100 közötti számokon teszteltem 50 kritériummal. Arra pedig jó volt.
E feladat kapcsán szembesültem azzal, hogy a Hol.van fgv súgója nem tökéletes, (vagy én vagyok béna). A súgó szerint ugyanis:
HOL.VAN(keresési_érték;tábla;egyezés_típus)
Tábla: Azon értékeket tartalmazó összefüggő cellatartomány, amelyek között a HOL.VAN függvény a keresési_értéket keresi. A tábla tömb vagy tömbhivatkozás lehet.
És sehol egy árva utalás arra, hogy az összefüggő cellatartomány csak 1 dimenziós lehet (tehát vagy 1 sor, vagy 1 oszlop).
Na most kérdésem, hogy ez valóban így van-e, vagy van-e valamilyen forsza hogy a Hol.van n*k tömbben is tud keresni.
Makróval viszonylag könnyen kielégíthető a kívánságod. De itt egy makró nélküli megoldás is. A képen látható mintapélda hivatkozásait kell majd a táblázatodra applikálni.
B11:F23: adattáblázat
D1: adatkritérium, esetünkben 4870
D3: A 4870-t felülről legjobban közelítő szám. Az esetünkben pont 4870.
A D3-D4 képletek {}-jeles tömbképletek, tehát ctrl+shift+enterrel kell bevinni őket
C4: Az n-ik legközelebbi a kritérumhoz
D5: Vagy a legkisebb keresett szám, vagy a következő (Manuális beállítás: =D3 v. =D4)
D6: A keresett szám melyik oszlopban van.
Képlete:
=HOL.VAN(MAX(B25:F25);B25:F25;0) Mellette F6-ban = INDEX-szel szövegesen
D7: A keresett szám oszlopa. A képlete:
=HOL.VAN(MAX(H11:H23);H11:H23;0)
A Sor Oszlop meghatározáshoz fel kell venni az adattábla mellé a Keressor-t és Keresoszlop-t.
A képleteik:
Keressor: =HAHIBA(HOL.VAN($D$5;B11:F11;0);0)
Keresoszlop: '=HAHIBA(HOL.VAN($D$5;B11:B23;0);0)
A cellaazonosítókat (sor,oszlop) csak akkor adja meg egyértelműen, ha csak 1 keresett szám van. Ha több van belőlük, akkor az első megtaláltat adja vissza (Az is lehet, hogy nem ugyanazét). Az esetleges problémákra figyelmeztetnek az F4-F5 cellák, amelyek azt mutatják , hogy az adott számból hány db van a táblázatban (darabteli-vel).
A mintapélda forrását feltettem a datahu-ra. Írjál át néhány számot a táblázatban, vagy változtasd meg a D1 kritériumot, majd F9, és ellenőrizd hogy jól számolt-e.
Segítséget szeretnék kérni excellel kapcsolatban. Még most kezek komolyabban foglalkozni a programmal és van egy probléma amit nem tudok megoldani. A probléma a következő: Van egy adott kiszámolt szám 4870 és az lenne a feladat hogy egy táblázatban az ehhez legközelebb eső számot keresse meg úgy hogy az felülről közelítse ezt a számot. Valamint jó lenne hogy olyat is lehetne hogy amikor ezt a számot megtalálta a táblázatban akkor a táblázat sorának és oszlopánal fejlécét is ki kéne iratva másik mezőbe. Remélem érthetően mondtam el hogy mit szeretnék. Előre is kösznöm a segítséget ha tud valaki segíteni
Hát ha nincs leírás, akkor marad a kisérletezés, de az bizony veszélyekkel jár. Itt van pl-ul ez a nick tiltás. Ha meggondolom magam, felodhatom? Mit tudsz erről?
A hsz zabrálás alatt azt értem, hogy ha 1 percnél továbbtart egy comment megírása, akkor azt jó eséllyel írhatod újra, mert a motor elzabrálja. (Ezt elkerülendő írom ezt hsz-t is szövegszerkesztőbe)
Ez komoly? Átprogramozták a fórumot, nem a te géped állítódott el, ebből következően sehogy nem lehet visszaállítani. (A fórummotor valószínűleg nagyrészt maradt, csak a renderelés változott, de a felhasználó tiltása pl. új funkció, eddig nem volt, és ezért sokan fordultak barkácsmegoldásokhoz a trollok kiszűrésére.)
Eddig még nem láttam visszacsináló szkriptet, de a legegyszerűbb, amit tehetsz, hogy megszokod. Ez a fórum új ruhája, nem borulás, fejlesztésnek szánták.
A gépemen valamiért megborult a fórum commentek fejléce. A közepéről eltünt a "válasz", a "könyvjelző" stb linkek, és ikonként kikerültek a jobb szélre. Aztán vannak olyan kommentek, ahol volt valami fekete biszbasz a jobbszélen a kommentsorszám mellett. Ezek meg bejöttek középre.
Hogy lehet visszaállítani a megszokott formatumra?
És vajon miért állítódott el? Tegnap még a szokásos volt, a mai bekapcsoláskor meg az új.
Az XP-gépen random nálam is elő szok fordulni. Próbáld meg a következőt. Helyezz el egy Personal filet az xlstart könyvtárba. Azt valszeg akkor is megtalálja, ha az xls filet nem. A sikertelen filebehvás után klikkelj újra a behívandó filera, ami most már feltehetőleg bejön. Nálam legalábbis igy működik.
Az nem jó, hogy b9-be egyszerűen beírod, hogy =B8-A8? Ha pozitív, akkor a tetejéből van többlet, ha negatív, akkor az aljából, ha 0, akkor nincs maradék.
Ha viszont az Excel már fut, amikor a fájlra duplakattintok, akkor megnyitja.
Ha jól emlékszem, akkor ezen a gépen akkor sem nyitotta meg.
Amúgy azt hiszem, összekevertem egy kicsit a két választ, de a lényeg az, hogy nem látszik semmiféle kérdés vagy hibaüzenet, simán elindul az Excel, csupáncsak a táblázatot nem nyitja meg.
Kösz a tippet, de ez se jön be. Mondom, hogy egyébként minden működik, a programból már simán megnyitja, anélkül, hogy bármit is telepíteni akarna, csak éppen az xls-sel indítva nem jelenik meg a táblázat.
Ilyennel, vagy ehhez hasonlóval már többször találkoztam.
Duplakatt a fáljra a mappában, erre elindul az Excel, aztán rájön, hogy neki még itt valamit konfigurálni/telepíteni kell a munkafüzet megnyitása érdekében. Megcsinálja a konfigurálást/telepítést, de közben elfelejti, hogy a fájlt is meg kéne nyitni.
Ha viszont az Excel már fut, amikor a fájlra duplakattintok, akkor megnyitja.
Nem lehet hogy felhoz nyitas kozben egy ablakot amiben kerdez vmit (serult a file - megjavitsam e? v hasonlot), csak ez valamiert a hatterben van es nem latod. Ez gyakran elofordul.
Probald ki h megnyitod a kerdeses filet es amikor ugytunik h nem tortenik semmi nyomsz egy Windows gomb + D-t ami visszarak a desktopra es vagy ott vagy alt+tabbal megkeresni a kisablakot. Ha nincs akkor viszont passz.
Én is beleszaladtam most egy ilyen problémába, azaz az Excel 2003 csak akkor jeleníti meg a táblázatot, ha a programból nyitom meg, de ha az xls-t próbálom elindítani, akkor elindul az Excel, de a táblázatnak se híre, se hamva. Nem minimalizálva van, hanem egyszerűen nincs sehol. Találkozott már valaki egy megoldással erre a problémára? Vagy volna valami jó ötlet rá? Állítólag azután jelentkezett a hiba, hogy egyszer elhasalt a gép, és kikapcsolták. De a program egyébként működik, akkor mi lehet a gond?
Igazából már régóta használom ezt a módszert bizonyos feltételeknek eleget tevő sorok elrejtésére, törlésére, stb.
Kell egy segédoszlop, benne egy képlet, ami a "jó" sorokra 1-et ad, a "rossz" sorokra meg pl "x"-et. A képlet kiszámolása (akár az egész oszlopra) villámgyors, és aztán csak a SpecialCells segítségével kell kiszűrni az 1-eseket. Főleg nagy méretű táblázatoknál nyilvánvaló a módszer előnye.
Ráadásul egy jól összerakott képlettel sokkal bonyolultabb szűrést is el lehet végezni, mint hogy üres-e a C oszlop vagy sem. Amely szűrés a favágós (For...Next) módszerrel esetleg még lassabb lenne.
Sub Auto_Open() Dim ws As Worksheet, Rng1 As Range, Rng2 As Range, Lap As Long, Sorok As Long
For Lap = 2 To Worksheets.Count Set ws = ThisWorkbook.Worksheets(Lap) ws.Activate Sorok = ws.Cells.SpecialCells(xlLastCell).Row
'Felfedjük mindegyiket ws.Rows.Hidden = False
Application.ScreenUpdating = False 'Letiltjuk a képernyő frissítését
'Magic is at work here... Set Rng1 = ws.Range("C4").Resize(Sorok) Set Rng2 = ws.Cells(4, ws.Columns.Count).Resize(Sorok) Rng1.Copy Rng2.PasteSpecial xlPasteValues Rng2.Replace what:="", replacement:=1
'4. sortól rejtünk csak ha 3. oszlop értéke üres On Error Resume Next Rng2.SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow.Hidden = True Application.ScreenUpdating = True Rng2.EntireColumn.ClearContents ws.Range("A1").Activate Next MsgBox ("Kész van."), vbOKOnly End Sub
Sok a lap és a sor, de pont ez az, amit jelentősen nincs esélyem csökkenteni. Talán 1-2 lap és 10-20 sor eltűnik belőle, de az nem tétel össz. 420 sornál és 26 lapnál.
'4. sortól rejtünk csak ha 3. oszlop értéke üres For sor% = sorok% To 4 Step -1 If .Cells(sor%, 3).Value = "" Then .Rows(sor%).Hidden = True Next End With Next
Application.ScreenUpdating = True MsgBox ("Kész van."), vbOKOnly End Sub
Korábban jártam már erre a leltárlistámmal. Most kezdtük el újra használni, feltölteni, stb és feltűnt, hogy ha nem erőgépen futtatom, akkor iszonyú lassú. Lehet szerintetek gyorsítani rajta valahogyan, vagy ez ilyen?
'4. sortól rejtünk csak ha 2. oszlop értéke hamis For sor% = sorok% To 4 Step -1 If Cells(sor%, 3).Value = "" Then _ Rows(sor%).Hidden = True Next Next End With End Sub
Nálam ez kiadad Wrong number arguments or invalid property assignment hibajelzéssel. 3 verzióban próbáltam ki, ugyanezt az eredményt kaptam. Pedig logikusnak látszik.
Olyan sincs. Van ugyan egy Empty keyword, de a súgó szerint az meg a még nem inicializált változók értéke. De hogy ez mit jelent, nem tudom. Halvány fogalmam sincs, hogy mit jelent a nem inicializált változó. Talán csak annyit, hogy még nem kapott értéket.
Szerintetek makróval hogyan lehet felismerni az üres cellát? Nálam az alábbi makró megkülönbözteti az üres cellát a nem 0 értékűtől (ami lehet string is), de a 0 tartalmút és az üreset egyaránt üresnek jelzi. Hogyan kellene megírni a makrót, hogy a 0-t ne nézze uresnek? Gondoltam jó lesz rá az isblank, de olyan vba függvény nincs. Vagy legalábbis nem találtam.
Sub ures() Dim a, b a = ActiveCell If a = Empty Then b = "ures" Else b = "nem ures" End Sub
Nem vagyok biztos benne, de azt hiszem, a CrLf a sortörésen kívül visszalépést is jelent (kocsi vissza).
Kipróbáltam, hogy az aktuális terület bal felső celláján állva is jó értéket ad a CrLf-es utasítás, míg ha fel-, és balra ugrással próbálom kikeresni a kezdés helyét, feltételeket kell adnom, másként hamis eredményt kapok.
If Selection.Offset(-1) > "" Then sor = Selection.End(xlUp).Row Else sor = Selection.Row End If
If Selection.Offset(0, -1) > "" Then oszlop = Selection.End(xlToLeft).Column Else oszlop = Selection.Column End If
Azt reméltem, hogy a kérdésemre valaki csak tudja a választ. Mármint azt, hogy a currentregion balfelső cellájának a címét közvetlenül le lehet-e kérdezni, és ha igen hogyan.
A "If Target.Column = 3 Then"-ban a "3" az oszlopszámot jelöli? Ha igen akkor a másik lapon a 3-at helyettesítsem az ott beírandó oszloszámmal? Gondolok arra, hogy ha a "D" oszlopba írok azon a lapon, akkor ott "4"-el helyettesítsem?
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 3 Then Rows(Target.Row - 1).Copy Range("A" & Target.Row - 1).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False End If End Sub
Belegondolva, hogy előbb azt kérted, másolja az Excel önállóan a képleteket is, utólagos engedelmeddel úgy írtam meg, hogy mikor a C oszlopba beírsz egy értéket, az előző sor képleteit illeszti be értékként a helyükre. Ha a beírás sorát íratnám felül az értékekkel, elvesznek a másolandó képleteid. :)
Ha mégis az aktuálist sort akarod felülíratni, két helyen vedd ki a -1-et.
Még arra keresnék megoldást, hogy a beírtak feletti sorban lévő függvényértékek számmá legyenek alakíthatóak, amikor beírom a következő sort. Gondolok arra, mint a "másolás" majd "irányított beillesztés értékként"
A terület bármelyik celláján állva aktívvá teszi a bal felső cellát, majd kiírja a címét.
Sub nn() Dim Fsor As Integer, Boszlop As Integer, cim As String With Selection.CurrentRegion Fsor = .Row Boszlop = .Column Cells(Fsor & vbCrLf, Boszlop & vbCrLf).Activate cim = ActiveCell.Address MsgBox cim End With End Sub
Van es meg makro sem kell hozza ha 2007-es v ujabb exceled van.
Home tabon -> Format as Table-t kell hasznalni a tablazaton.
Ekkor nem kell a fuggvenyekkel szarozni, hanem amint beirsz a C oszlop aljara egy uj erteket (sort) vagy tobbet vegigszamolja automatan az osszes tobbi oszlopban levo fuggvenyt arra a sorra v sorokra.
Egy (számomra) nehéz makrós dologban kérném a segítségeteket.
Adott egy táblázat, A-Z ig, melyben C kivételével minden oszlopban függvény van. Azt szeretném megoldani, hogy csak akkor másolódjanak be a függvények a következő sorba, ha kitöltöm a "C" oszlopban lévő aktuális utolsó cellát. Ez több munkalapon is így szerepel, és ha előre végigmásolnám a függvényeket a sorokban, nagyon nagy lenne a munkafüzet.
Az időbeosztás az lehet Délelőtt(DE) és Délután(DU)
Műszak meg lehet I vagy II
Ez kb 400 adatsorral van feltöltve
A problémám az, hogy van a Darabszámnak egy minimum limitje amit ki kell gyűjtenem hogy mikor volt alatta valamelyik műszak. De Egy dátum alá eshet több termék aminek az összege adja ki hogy 1000db felett van vagy alatta az adott műszak.
Pl:
2013.07.30 | DE | I | 800 | típus1 | megnevezés1
2013.07.30 | DE | I | 300 | típus2 | megnevezés2
A feltételes formázással meg tudom adni, hogy szóljon ami mondjuk 1000db alatt van. És itt mind kettőre szólna, hogy 1000db alatt van de ugye ez fals infó mert ennek az összegét kell nézzem a délelőtös műszakra ami 1100.
Van valami hatékony módszer hogy sipákoljon nekem ha valamelyik műszak alá megy összesen limitnek valamelyik műszak?
Ezt inkább valami rendszergazdafórumban kéne megkérdezni. Olyat még nem hallottam, hogy az SSD aludni menjen, hiszen nincs benne mozgó alkatrész, nincs értelme. Ez olyan, mintha a RAM menne aludni. Sokkal hihetőbb, hogy a winchesterek lassú felpörgése veri ki a biztosítékot, de tanácsot nem tudnék adni a konkrét esetre.
Sokszor olvaslak benneteket és sokszor ámulok rajtatok, remélem nekem is tudtok segíteni!
A problémám Excelnél és Wordnél is előfordul. A gépemen egy SSD-re telepített W7 működik, a munkaállományok pedig egy D-link NAS szerveren vannak. A megnyitás után, ha már régen nem volt hozzáfordulás, felpörögnek a NAS wincsik és megnyitja az illető Word vagy Excel állományt. Sokszor előfordul, hogy ha menteni szeretnék akkor "lefagy" a Word és Excel, kifehéredik és a címsorban a "nem válaszol" üzenet van. Aztán van, hogy mégis csak elmenti, de sokszor erőszakosan kell bezárnom.
Van tippetek a megoldásra? Lehet, hogy a rendszer SSD is elmegy aludni és ekkor van probléma?
Megoldható, hogy a Word/Excel állomány munkapéldánya, ami a megnyitáskor jön létre az aktuális könyvtárban, ne a NAS-on, hanem az SSD-n jöjjön létre?
Bár több kiváló megoldás született a problémádra, de talán nem lesz érdektelen az alábbi is. Első sorban azért, mert írtad hogy
Olyan képletet keresek, hogy mérőóránként (gyári szám) kikeresi a két legjabb dátumú óraállást
pl. az AB12-nél ez a 07.31-es (1867) és a 07.15-ös (1145) óraállás.
Kimásolnám a gyári számokat (ismétlődések eltávolítását lefuttatom) és a keresett képletet végighúzva mindegyik gyári szám mellé kiírja a keresett óraállásokat.
Nyilván a MAX(B:B) és a NAGY (B:B;2) nem megy, mert a mérők gyári számait nem veszi figyelembe
De bizony, a max és a nagy fgv-k nagyon jól használhatók. Amint azt a bemásolt mintapédán láthatod. Amin a mérési adatok az A:C oszlopban vannak, a kigyüjtések pedig az E:G-ben.
Első lépésben tehát le kell másolni a gyári számokat az ismétlődéseket eltávolítva. (E oszlop). Majd bemásolni ezt a képletet a listához igazítva:
A bevitelnél arra ügyelni hogy ez tömbképlet, tehát CTRL+SHIFT+ENTER-rel kell bevinni.
A képletben a NAGY(HA($A$2:$A$12=$A14;$B$2:$B$12);F$2/G$2) kiválasztja a mérőhely legnagyobb ill. a második dátumértékét
a HOL.VAN(NAGY(HA($A$2:$A$12=$A14;$B$2:$B$12);F$2/G$2);$B$2:$B$12;0) meghatározza, hogy hol van a kérdéses dátum a B-oszlopban
majd a kiveszi az INDEX-szel ezt a sorszámú elemet a C-oszlopból.
Sajnos ez a megoldás csak akkor ad 100%-ban jó eredményt, ha egy dátumhoz, csak egy mérőóraállás tartozik. Mivel valószinűleg ez a feltétel nem teljesül ezért a B oszlop dátumait agyusztálni kell ezzel a képlettel:
=DARABTELI($B$2:B2;B2)/100+B2 (ha egy dátumhoz 100-nál kevesebb mérőóra tartozik)
amit mondjuk a D-oszlopban veszel fel, majd értékként rámásolod a B-oszlopra. Ilyen adatok vannak a kép B-oszlopában, bár nem látszik a dátumformátum miatt.
A rámásolásnál azonban praktikusabb a tömbképlet B oszlop hivatkozásai helyett az agyusztáló oszlop hivatkozásait megadni.
Gondolom, akkor kell törölni az oszlopot, ha az első sorban üres a cella.
Sub OszlopTorles() Dim oszlop As Integer, uoszlop As Integer
uoszlop = Cells(1, Columns.Count).End(xlToLeft).Column For oszlop = uoszlop To 1 Step -1 If Cells(1, oszlop) = "" Then Columns(oszlop).Delete Next End Sub
A sortörlésnél nincs szükség a cellára ráállni, az lassítja a program futását.
Sub SorTorles() Dim sor As Integer, usor As Integer usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = usor To 1 Step -1 If Cells(sor, 1) = "" Then Rows(sor).Delete Next End Sub
Az utolsó oszlop és sor meghatározását a ciklus elé tettem, másképp minden egyes ciklusban kiszámoltatnám, ami szintén lassúlást okozna.
Bocsánat, a képlet ugyan működik, de nem így akartam elküldeni, hanem így: =HA(VAGY(ÜRES(A1);ÜRES(B1);ÜRES(C1));"van üres";""). Ebből persze látszik, hogy az ÜRES(A1) forma helyett az A1="" is alkalmazható.
Sok oszlopod van? Mert ha csak néhány, akkor én az első nem használt oszlopba írnám a következő képletet: =HA(VAGY(A1="";ÜRES(B1);ÜRES(C1));"van üres";""), ahol a VAGY részben folytatható a felsorolás D1, E1 stb-vel. És ha bármelyik üres, akkor ezt jelzi a képlet, ha viszont rendben van a sor, akkor üresen marad ez a cella. És ha ezzel lefelé kitöltöd a teljes táblázatot, akkor csak azoknál a soroknál látsz megjegyzést, ahol van probléma. És azt is csak addig, amig ki nem javítottad.
Sajnos ezt rendesen csak makróval lehetne csinálni, azt meg letiltják a felhasználók. Marad a feltételes formázás. Én is ezzel küzdök, de ha valakinek van makró nélküli jó megoldása, nem sajnálnék érte egy tábla csokit.
Sziasztok! Hogy tudnam elerni excelben, hogy adott táblázatban mindenképp szerepeltetni kelljen adatot bizonyos cellákban(többen, nem csak egyben), ellenkező esetben legyen valami figyelmeztetes, hogy ejnye. Tehát ne lehessen uresen hagyni egy egy cellát, mivel nekem a 0 is fontos adat, de az adatszolgáltatók erről gyakran megfeledkeznek.
ha csak egy cellát érintene én ezt használnám:
HA(G12<>"";"";"Töltsd ki!")
de nem csak egy cella(G12) ra kell ez igaz legyen, hanem többre is, amik szetszórva vannak, nem tömbben.
Ettől persze még jogos az észrevétel, hogy célszerűbb, és biztonságosabb hátulról kezdeni a törlést. De azért megnézve a MS eredeti példáját (ami kijelölt tartományra vonatkozik!), nekem szellemesnek tűnik az a megoldás, ahogy egy logikai változó ki-be kapcsolgatásával éri el, hogy az egyik lépésben töröl, a másikban pedig növeli a törlendő sor számát, ezzel érve el, hogy valóban csak minden második sor törlődjön.
Lehet, hogy nálad azért nem működött, mert elindítás előtt nem jelölted ki a munkaterületet, amelyen a törlést végre kell hajtani. Ld. a mintapélda 6. pontját: "Váltson az adatokat tartalmazó munkalapra, majd jelölje ki az A1:A9 tartományt.". Nálad természetesen az A1:A9 helyett a saját tartományod első oszlopát kellett volna kijelölni.
Amúgy meg kibújt a szög a zsákból, mert nem minden második sor - hanem az "üres" sorok törlésére volt szüksége. Az első kérdése csak a "mit akarok" laikus megfogalmazása volt. Gondolom minden második sora üres volt ;)
Arra meg az a jó, amit utána mutatott (Az EntireRow.Del-es hsz)
Ez kb. olyan, mint azt kérdezni, hogy miért nem működik egy dízelautó repülőbenzinnel. Nem mindegy?
Van egy ciklus, ami megy előre, és maga alatt vágja a fát. Innentől bármi megtörténhet.
Ha sikerül működésre bírni, akkor is gányolás lesz.
Ilyesmit normálisan egy visszafelé futó ciklusban lehetne megírni, ahol a törlendő sorok sorszáma nem változik menet közben a már elvégzett törlések következtében. És ezért nem kell a bal fülünket a jobb kezünkkel vakarni sem, és csodálkozni, hogy miért nem megy.
Nem erre gondolok. Hanem arra, hogy a beírások (esetünkben a 11-ek) hol helyezkednek el a cellában. A súgó szerint a cellabeírás lehet jobbra zárt, balra zárt, lent, fent, de a pivotcelláké szemmel láthatólag nem ilyen. A beírások valszeg 1-2-3 tabulator után kezdődnek. Na azt szeretném lekérdezni, hogy hol.
Megjegyzem a pivotcellák font típusát sem egyszerű lekérdezni, mert a Font.Fontstyle akkor is Normal-t ír ki, ha az szemmel láthatólag bold. De ezt megoldottam.
Azt szeretném megkérdezni, hogy egy pivottábla Sorcimkék oszlopában levő beírások pozicióját hogyan lehet lekérdezni. Tehát például a bemutatott képen az A4 és A5 11-k pozicióit.
Még egy kérdés: tudja valaki, mivel lehet ilyen videót készíteni, ami felvétel közben zoomol meg nyilakat lehet benne mozgatni? Én a CamStudióval próbálkoztam, de az szerintem nem tud ilyeneket.
1. csinálj egy pivottáblát az adatokból. Oszlopmező: dátum; sormező: gyártási szám; adatmező: mérőállás szumma. Így egy olyan pivottáblát kapsz, ami dátumonként és gyártási számonként összegzi a leolvasott mérőállásokat. A dátumnál mezőnél állítsd be, hogy csökkenő sorrendben legyen. (angol excelnél ez: jobbklikk a dátumra, field settings, sort descending)
2. jelöld ki az egész pivottáblát és másold valahova máshova, mondjuk egy új munkalapra
3. jelöld ki az egész átmásolt területet, F5 (go to menüt hozza fel), üres cellák (blanks), OK. (Így kijelölöd az összes üres cellát a korábbi kijelölésben.) Jobbklikk, törlés, cellák eltolása balra (shift cells left).
Így egy olyan táblázatot kapsz, aminek az első oszlopa a gyári szám, utána pedig jobbra sorrendben egyre régebbi mérőállások vannak. Azt nem lehet azonosítani, hogy melyik dátumhoz valók, csak hogy melyik a legfrissebb.
Sub Oszlopba() Dim ter As Range, sor As Long, CV As Object
Range("A1").Select '****************** Set ter = Selection.CurrentRegion sor = 1
For Each CV In ter CV.Copy Cells(sor, "G") '*************** sor = sor + 1 Next End Sub
Ez a makró az A1 cellában kezdődő táblázatból készít 1 oszlopot a G oszlopba. Csillagokat tettem két sor végére, ahol változtathatsz. Az elsőnél a táblázat bal felső celláját állíthatod át, a másodiknál a kigyűjtés oszlopát.
Sziasztok, újabb érdekes problémában kérem segítségeteket.
Adott egy kiexportált adatfájl, 3 oszloppal, töb ezer sorral.
A oszlop: mérőóra gyári szám
B oszlop: leolavásás dátuma
C oszlop: óraállás
Tehát pl.
gy.sz. dátum állás
AB12 07.15 1145
CD34 07.04 3456
AB12 06.22. 1023
EF56 06.30 4545
EF56 06.05. 3367
AB12 06.10. 999
CD34 06.11. 2999
AB12 07.31. 1867
stb.
Olyan képletet keresek, hogy mérőóránként (gyári szám) kikeresi a két legjabb dátumú óraállást
pl. az AB12-nél ez a 07.31-es (1867) és a 07.15-ös (1145) óraállás.
Kimásolnám a gyári számokat (ismétlődések eltávolítását lefuttatom) és a keresett képletet végighúzva mindegyik gyári szám mellé kiírja a keresett óraállásokat.
Nyilván a MAX(B:B) és a NAGY (B:B;2) nem megy, mert a mérők gyári számait nem veszi figyelembe
De ha így nem megy, akkor a lényeg annyi lenne, hogy az a másik program, ahova be akarom illeszteni az excel táblát, A1 Enter, B1 Enter, C1 Enter, D1 Enter, A2 Enter, B2 Enter, stb sorrendben „értelmezze”. Ha minden az A oszlopban lenne, akkor úgy értelmezné…
Tud valaki arra módot, hogy egy tábzázatból 1 db oszlopot csináljak, úgy hogy a balról jobbra haladva az értékek mind egymás alatt legyenek, majd a 2. sor ez alá. Valahogy így (persze jóval nagyobb táblázatot kell elképzelni):
1234
5678
1
2
3
4
5
6
7
8
Ha ez nehéz, akkor az is elég lenne, ha az eredeti táblázatot be tudnám illeszteni egy másik programba úgy, hogy mikor beillesztem balról jobbra olvassa be az értékeket és minden érték utána legyen egy Enter.
Köszönöm az ötleteket. Mostanra megszállt az ihlet, és megtaláltam a megoldást. Ismeritek a viccet, aminek az a poénja, hogy hogyan fogsz egy elefántot? Fogsz kettőt, és az egyiket elengeded. Na én is ezt fogom csinálni. Miután a felhasználó megnyitotta az adatfájlt, akkor listázáskor az egészet átmásolom új néven. Ez viszi magával az eredeti jelszavakat. Majd ebbe a fájlba írom bele a az elkészítendő új munkalapo(ka)t. (Második elefánt). Majd törlöm az eredeti munkafüzetből származó, itt már felesleges eredeti munkalapo(kat). (Egyik elefánt elengedése).
És amint hazaérek a szabadságomról, neki is látok megvalósítani.
Egy ötletem van, de nem tudom megvalósítható-e. Nem akarod a jelszókat kezelni. Ok. A felhasználó kezeli a saját jelszavait. Tehát az elvileg az ő felelőssége, hogy mentéskor is adjon meg jelszót. Én úgy tudom, hogy az excel párbeszédpaneljei meghívhatók VBA-ból is. Párat már én is használtam.
Tehát elvileg a feladat az lenne, hogy nem a programod menti el a fájlt saveas-al, hanem csak meghívja a mentés másként párbeszédpanelt kitöltve a szükséges elemeit (név, elérési út stb). Itt a felhasználó megadhatja a jelszavakat közvetlenül az Excelnek.
Illetve a jelszavak kezelése egy másik beállítás párbeszédpanelon történik, de nem tartom kizártnak, hogy akár azt is meg lehet szólítani közvetlenül, és akkor már maradhat a saveas parancs is, mert a felhasználó már közölte a szükséges jelszavakat az Excellel.
A megvalósítást ne kérdezt, mert ennyire még nem ástam bele magam a témába, de szerintem vannak itt profik akik akár kapásból tudják.
Szerintem semmivel sem nagyobb a biztonsági veszélye, mint hogy pisztollyal fenyegetnek, hogy add meg a jelszót. Mivel a jelszót manuálisan kell megadni, amit csak addig őriz meg a gép, amíg be nem csukod a makrót tartalmazó füzetet. De hát te tudod.
Na most ha mindenképp el akarod kerülni, hogy a jelszót tartalmazó változó hozzáférhető legyen, használhatod az első változatot is.
Manuálisan bekéred a forrásfilet.
Amit az elindított makró azonnal visszament valami kiegészítéssel és bezár, majd rögvest megnyit. Ekkor persze újra bekéri a jelszót. De innentől van egy forrásfile duplikátumod új névvel, amin megcsinálhatod a generált listádat, majd Mentés másként-tal tetszőleges névvel lementheted. Ez a file is védett lesz az eredeti jelszavakkal.
Köszönöm. Ez a megoldás az én agyamon is átvillant egy pillanatra. És persze működne is. De azért nem akartam alkalmazni, mert szerettem volna elkerülni, hogy függetlenítsem a rendszertől a jelszó bekérést. Érzek benne némi biztonsági veszélyt is. Ilyen megoldást csak a legvégső elkeseredésemben fogok alkalmazni.
Kicsit körbejártam a problémádat és oda jutottam, hogy amig nem oldódik meg password property beállítása az alábbiakat lehetne csinálni:
Ha a célfile-d az átírt forrásfüzet, akkor nem kell foglalkozni a jelszókkal, mert a Mentés másként megtartja a füzet védett státuszát, és a jelszavakat is.
Ha meg a generált listád új füzetbe kerül akkor az alábbi makrók is megfelelők lehetnek. Ezekben a forrásfile bekérése nem a normál módon történik, hanem inputboxokkal, amelyekkel megadod a forrasfilenevet, meg a jelszavakat, ez utóbbiak így megőrződnek a mentésekhez, hogy ott csak a célfilenevet kelljen megadni.
********
Dim forrasfile$, celfile$, pw1$, pw2$ ’ modulváltozók lesznek tehát a makrókon kívül helyezd el őket
Az én programom nem látja a jelszavakat. Azokat az Excel kéri be az általam nem kezelt rendszeren keresztül. (Próbáld ki! Védj le egy adatfájlt, majd nyisd meg egy másik munkafüzetben lévő makróval. )
Én csak annyit tudok tenni, hogy a hibakezelő rendszer segítségével megakadályozom, hogy rossz kód esetén az Excel angol nyelvű hibával leálljon. Sőt vissza tudom küldeni (éppen egy korábban Jimmy által javasolt technikával), hogy adja meg újr a jelszót.
Szóval az excel nem teszi lehetővé - nagyon helyesen -, hogy a programom "lássa" a jelszót. Enélkül könnyű lenne kicselezni a jelszavas védelmet.
Tehát én pusztán azt szeretném, amit a microsoft állít erről a password property tulajdonságnál (http://msdn.microsoft.com/en-us/library/office/aa224992(v=office.11).aspx), hogy visszaadja és beállítsa (returns and sets the password) az egyik munkafüzet objektumból kiolvasva, és a másikban beállítva az - általam ismeretlen - jelszót.
És az miért nem jó, hogy amikor a megnyitáskor kéri a file a jelszavakat, nem csak a filet nyitja meg velük, hanem elhelyezi őket 2 változóba? Amiket aztán az újonnan generált filek mentésekor felhasználhat.
A program egy adatfájlt nyit meg. Azt előzőleg a felhasználó közvetlenül a beállítások menüben védte le 2 jelszóval. Az olvasási és az írási használatával. Amikor pedig a program megnyitja a fájlt, a rendszer ugyanúgy bekéri a jelszót(szavakat), mintha program nélkül nyitnád a fájlt. És ezeket a jelszavakat szeretném - nem kiolvasni, csak továbbítani a program által generált listafájloknak. Hogy azokat is csak ugyanazokkal a jelszavakkal lehessen nyitni, amit a felhasználó pötyög be.
Nem értem a problémádat. A WorksheetChange csak akkor lép életbe, ha megváltozott a munkalap. Na most ha a beírni szándékozott adatot a cellaérvényesítés nem fogadja el, akkor nincs change, tehát a makró sem tud elindulni. Szerintem.
Microsoft Office Excel 2007-ben dolgozom. Van egy oszlopnyi szövegem, melyekből több vannak elhelyezve egymás mellett, mindegyik más-más adathoz kapcsolódik.
Azt szeretném elérni, hogy a másolt oszlopok szöveges értékei, az első megváltoztatásával cellánként változzanak, azaz ha az A1 cella szövegét átírom, akkor annak B1-es másolata is ugyanúgy átíródik.
Ha van erre lehetőség, örülnék ha valki megosztaná velem.
úgy értettem, hogy a validálást meghagyod és a change csak azt figyeli, hogy változik e a cella tartalma. (Ha változik, akkor a validálás sikeres volt)
Nem tudom, hogy van e valamilyen visszatérési érték, amikor a validálás igaz/nem igaz, ill ezt hogy lehetne megfogni.
A validált cellákat megadnám egy olyan eseménykezelőben, amely a cellák tartalmának változására fut le és oda írnám meg a makrót. (Change, SelectionChange)
Van egy olvasási és írási jelszóval védett excel fájlom. Egy tőle független excel munkafüzetben lévő program nyitja meg. Ezzel a programmal adatokat írok be a védett fájlba, és különböző célú listákat készítek belőle. Amikor egy listát összeállítottam és kimentem, akkor az ActiveWorkbook.SaveAs Filename:=célfile, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ....
parancsban tudok jelszavakat beírni.
A kérdésem az, hogy megoldható-e, hogy az eredeti jelszavakat (amelyekkel a fájlt megnyitottam) használja a program az új munkafüzetnél is. Más szavakkal a megnyitáskor beírt jelszót tárolja-e a rendszer valamilyen módon?
Ez két okból lenne szükséges: Egyrészt nem szeretném a forrásszövegben megjeleníteni a titkos jelszavakat, másrészt a használat során a felhasználó dönthet úgy, hogy megváltoztatja azokat, amit a program már végképp nem tud követni.
Sose használtam ezt a cuccot, de próbáld ki. Ez egy szabványos szövegformátum, bármilyen buta programmal szerkeszthető. Problémát inkább a túl okos program okoz, ha nem figyelnek a mentésnél a fileformátumra. Egyébként legvalószínűbben ez lehetett a hiba oka.
Szeretnék az outlook naptáramból egyes eseményeket importálni google naptárba.
Az outlook-ból a csv importálása ok. Ha az egészet importálom a googlbe, akkor jó. Ha viszont akár egy sort is törlök, már hibaüzenet jön, ls nem sikerül az import.
Hogyan kell úgy törölni sorokat a kiexportált fájlból, hogy az utána importálható legyen?
Nekem ez picit fura. Mi rengeteg megosztott excel fileal dolgozunk halozati meghajton, de ez az 5 perc mulva frissulos dolog meg sosem jott elo. Sot, ha valaki csinal valamit benne majd mondjuk en ramentek akkor azonnal kiirja es mutatja azokat a cellakat amik modosultak amiota megnyitottam.
Talán valaki tudja a következőt. Adott egy Excell file ami meg van osztva. Különböző gépekről lehet rá kapcsolódni. Prímán működik egy kis hibával. Ha valaki módosít rajta az csak 5 perc múlva jelenik meg a többinél. Az autofrissítő utasításnak a Help szerint 5 perc a reakció ideje.
A kérdés az? nem tud -e valaki olyan VBA utasításról ami real time-ban (de mondjuk 1percen belül) frissít.
Múltkor már küzdöttünk ezzel egy kört: a bal felső sarokban az üres téglalappal mindent kijelöl, és utána jobb klikk fent a betűkre az oszlopok felett.
Amikor egy cella (vagy tartomány) ki van jelölve, akkor annak a jobb alsó sarkában van egy kis fekete négyzet. Arra kell ráállni az egérrel, és azt kell húzni lefelé - és közben vagy kell nyomni a Ctrl-t, vagy nem, ahogy ez az előbb elhangzott.
Időközben találtam valamit. Ha az egérrel, vagy a Shift-el kijelölöm a kitöltendő területet, és a szerkesztés->kitöltés->sorozatok opciót választom, akkor valóban el tudom érni, hogy növelje a számokat. De a beszélgetésetekben úgy tűnik, hogy nem erről a megoldásról van szó, hanem valami egyszerűbbről.
Akkor egyfelől elnézést kérek Eredő Vektortól, másrészt megkérdezem, hogy hogyan működik ez az egérrel másolás? Mert ha beírom egy cellába, hogy 2013/0001, akkor semmilyen módon nem tudom elérni, hogy az én Excel2003-asomon, hogy automatikusan növelje a számot. De most éppen kipróbáltam, hogy ha simán 1001-et írok be, akkor sem tudom ezt elérni. Mit csinálok rosszul?
Lineáris soroknál a lépésközt a kijelölés határozza meg. Ha egyesével kell növelni, akkor elég az elsőt, ha többel, akkor kell többet kijelölni. Pl. 1,3 bővített exponenciális sora 5,7,9 lesz stb...
Alfanumerikus, de számjegyeket tartalmazó cellák egérrel történő másolásakor automatikusan nő az érték 1-gyel, numerikus adatnál ehhez a Ctrl billentyűt nyomva kell tartani.
Én egész egyszerűen készítenék egy oszlopot, amiben egyesével növekvően megvannak a számlaszámok. (Első cellába beírom, hogy 2013/0001 és lehúzom - növelni fogja a sorszámot automatikusan. A létrejött oszlop mellé fkeressel összekeresném a két oszlopot egy harmadikba. Ahol #HIÁNYZIK van, az nincs benne.
Ha egyszeri feladatról van szó, akkor nem kell makró. Tételezzük fel, hogy az egyébként következetlenül megadott számlaszámokról annyit biztosan tudonk, hogy 2013/-el kezdődnek, és utánuk szám jön, akár két számjeggyel, akár többel, de maximum 4 számjeggyel.
Legyenek az alapadataid az A oszlopban. Akkor a B1 cellába a következőt írod: =ÉRTÉK(KÖZÉP(A1;6;4)). Ezzel lefelé kitöltöd az összes cellát B-ben, majd rendezed a táblázatot a B oszlop szerint.
Ezután a C2 (vigyázat, nem a C1) cellába írod a következőt: =HA(B2=B1+1;"";"hiányzó szám"). Majd a képlettel kitöltöd a C oszlop összes celláját. A lyukak utáni sorban a C oszlopban megjelenik a hiányzó szám szöveg
Nem vagyok egy nagy Excel guru, de nem hiszem, hogy a program tudhatná, hogy mi az, aminek ott kellene lennie, de nincs. Ha ezt jól lehet specifikálni, akkor biztos lehet rá makrót írni, de talán nem is szükséges. Én azt csinálnám, hogy egyszerűen sorba rendezném az adatokat a számlaszám szerint (utána persze nem fontos elmenteni a változásokat, illetve vissza lehet vonni a rendezést, ha kell), és így már a sorok számozása alapján könnyen ellenőrizhetném, hogy folyamatosak-e a számlaszámok. Főleg, ha szükség esetén beszúrok annyi sort, hogy pl. a 2013/11-es számlaszám a 21-es sorban legyen, mert így mindig csak az utolsó számjegyet kellene figyelni. De persze az Autoszűrő segítségével is lehet ellenőrizni az oszlopban előforduló adatokat, mert az is sorba rakja őket, de ebben az esetben macerásabb ellenőrizni az egész listát.
Tudna nekem tanácsot adni valaki, hogy ha egy táblában több számlaszám szerepel, akkor hogy lehetne a hiányzót jeleztetni az excellel? Makrót lehet ehhez írni?
Pl: az oszlopban egymás alatt, de nem sorban vannak a számok: 2013/0011, 2013/0013, 2013/10, 2013/....
Sziasztok, azt ugye jól látom, hogy combobox és listbox használatánál (hosszú listánál) az egér görgető nem működik?
Találtam ugyan egy elég bonyolult megoldást(http://www.xtremevbtalk.com/showpost.php?p=1119288&postcount=5), de a szerző maga is megírja, hogy ha a program bármilyen okból megáll, az Excel valószínűleg összeomlik. Más meg erről megírta máshol, hogy nem valószínűleg, hanem biztosan.
Az elsőben már egyszerű kivonási műveletek is eltérést mutatnak a valóságos értéktől. De azt is kiderítik, hogy nem csak az egyszeres, hanem még a dupla pontosságú lebegőpontos számok is okozhatnak problémát. A legpontosabb a decimális típus. (máshol kiderül, hogy ehhez kell egy kis ügyeskedés, és egyébként ezzzel meg lassabbak a számolások)
A másodikban meg szóba kerül, hogy implicit adatkonverziók is okozhatják a jelenséget, és vannak példák a round-al kapcsolatos anomáliákra is.
Nem valószínű, hogy rájövök magamtól. Már csak azért sem, mert e tekintetben a súgó sem ad eligazítást. A VBA Round-nál például nem jelzi, hogy az argumentumoknak double-knak kell lenniük, míg WSF Round-nál igen. Talán majd valaki a spilerek közül.
Kösz, hogy foglalkoztál a kérdésemmel. A Round(6+2/10,1) nekem is helyes eredményt adott. De nézd meg az alábbi makrót, és az eredménylistáit.
Az excel munkalapon első blikkre úgy néz ki, hogy csak a WorksheetFunctionos (sor14) változat a kerekített. A többi nem. Ennek ellenére úgy néz ki, mintha a VBA-right a sor11-12-ben mégis a 6,2-t kerekítette volna. Hogy a c13 és a c15-ben miért 4-t írt, arról lövésem sincs. És az is meglepő, hogy a vba és az E-oszlopban levő munkalap rightok más számokat látnak.
Nemkülönben érdekes a vba változók listája. Ami szerint mintha a Round kerekítés barmolná el a kerekítést. De ez sem igaz, mert akkor az eredm3-nek meg kellene egyeznie a hossz változóval. De nem egyezik.
summa summárum: A Round és a Worksheet,Round mást számol. Most már csak az a kérdésem, hogy mit számol a Round. Tudja valaki?
Sub kerzur()
Dim a%, kulonbseg%, hossz!, ahossz!, eredm1#, eredm2#, eredm3#
kulonbseg = 8: hossz = 6
a = kulonbseg - hossz
ahossz = hossz + a / 10
hossz = hossz + a / 10
eredm1 = Round(hossz, 1) ''Nem kerekít
eredm2 = Application.Round(hossz, 1) ''Kerekít
eredm3 = hossz ''Kerekités nélkül természets, hogy nem kerekít
Sub kerekit() Dim a As Double, b As Double, c As Double a = 6.19999999809 b = Round(a, 1) c = Application.WorksheetFunction.Round(a, 1) Range("A1:A3").Select Selection.NumberFormat = "0.00000000000" Cells(1, 1) = a Cells(2, 1) = b Cells(3, 1) = c End Sub
Még annyit hozzáfűznék, hogy az a bizonyos 6,2, amit a a round nem kerekített az 6+2/10 müvelet erdményeképp jött létre. Tehát egy osztás is van benne. De megcsináltam ezt az összeadást egy rövid függvényben is, ahol viszont a round normálisan működött. ????
Azt szeretném kérdezni, hogy mi a különbség a Round és az Application.Worksheetfunction.Round között? A súgó alapján úgy véltem, hogy illene egyforma eredményt adniuk. Ezzel szemben azt tapasztaltam, hogy van amikor a Round cseszik kerekitett értéket rakni a munkalapra. Ilyenkor pont azt az eredményt adja mint Round nélkül. Ami ráadásul a forrásváltozóban levő számmal sem egyezik meg-
A Névadásnak nincs függvénye. Eljárást lehet rá írni. De annak szvsz nincs túl sok értelme, mert seperc alatt végigkattogtatható, aztán amíg nem törlöd, használhatod. De ha valami okból mégis szeretnéd makrósítani, semmi gond: a kattogtatás elött bekapcsolod a makrórögzítőt.
Köszönöm. A 2. pontot nem volt könnyű teljesíteni, de nagy nehezen rájöttem, hogy az ietimer.cab egy tömörített fájl, tehát tömörítővel kibontottam. Az így kapott ietimer.ocx fájlt bemásoltam C:Windowssystem könyvtárba. És a regisztráció céljából lefuttattam a regsvr32 ietimer.ocx parancsot. Innentől ment minden, mint a karikacsapás. Működik is. Mellesleg én is Excel 2003 alatt dolgozom.
Mindenesetre csak saját célra fogom használni, a kezemből kiadandó program esetén mégsem merem alkalmazni, mert valóban olyan igényeket támaszt, ami nem minden gépen teljesül.
"És még egy dolog: az Accessben ez a funkció gyárilag benne van :)". Most már befejezem azt, amit excelben kezdtem el, de ősszel nekiállok megtanulni az Accesst, és átgondolom, hogy ugyanezt a feladatot hogyan tudom majd ott megoldani.
Először is köszönöm szépen a gyors választ, mert excelben működik a dolog! Ezt a függvény használom a több cellásnál is, így itt sem hagytam ki, változtattam meg,hogy egységes legyen és az egyszerűség kedvéért másoltam ki egy két cellás példát.
Valójában Google apps(excel alapú) táblázatba szeretném ezt adoptálni, ahol jelenleg még nem találtam meg ezt a lehetőséget, de ha már excelben tudom mit, hol keressek ott is egyszerűbb lesz a dolog, vagy hasonló megoldást keresek esetleg beírható fv formájában. Szóval a segítség hasznos volt.
Ez így ebben a formában nem egzakt. Az igaz, hogy a program működése feltételez egy bizonyos telepített környezetet. Pl. kell hozzá, hogy a timer vezérlő telepítve legyen. De ugyanúgy kell hozzá az is, hogy az Excel telepítve legyen. Ebben szerintem nincs semmi különös. Számtalan program van, amihez .NET Framework ez-az-amaz kell, különben nem megy. Ez még nem von le semmit a program értékéből, viszont ha használni akarják, előzőleg a megfelelő keretrendszert telepíteni kell.
2. Ezt regisztrálni kell a Windows alá, hogy használni lehessen.
3. A VB Editorban Tools/References alatt fel kell venni a referenciák közé.
4. A VB Editorban Tools/Additional Controls közül ki kell választani a Timer Objectet, és ezzel felvenni a Toolbox-ba. A toolboxból már rá lehet tenni a formra.
Innetől kezdve az IeTimer1 object 1000 ms-onként generál egy eseményt (amit a félreérthetőség kedvéért "Timer" néven ismernek), amit ezzel az eseménykezelővel lehet kezelni:
Private Sub IeTimer1_Timer()
'tetszőleges kód
End Sub
Magnak azt raksz be, amit akarsz, lehet kétféle háttérszínt váltogatni (villogás), vagy akár minden tikk-takknál random színt beadni, esetleg másodpercenként lekérdezni egy adatbázist. (Tudom, most nem ez a feladat, csak jelzem, hogy másra (akármire) is alkalmas a timer.)
Ha meguntad a villózást, akkor
IeTimer1.Enabled = ValFalse 'kikapcsol a timer
Annyi még, hogy ezt 2003-as Excellel teszteltem, 32 bites XP alatt. A letöltési linkből arra következtetel, hogy internet explorer is kell hozzá, bár mondjuk az van minden ablakban. Szóval lehet, hogy más környezetben nem fog menni, vagy másik verziójú ActiveX vezérlő kell hozzá.
És még egy dolog: az Accessben ez a funkció gyárilag benne van :)
Szintén színekkel kapcsolatos az én gondom is. Amikor egy formon inicializáláskor a boxokat feltöltöm az adatállományba korábban bevitt adatokkal, mellékesen tesztelem, hogy nincs-e valami súlyos adathiba. (Amit adatbevitelkor természetesen nem engedek meg, de az ördög nem alszik, egyéb okokból talán mégsem teljesen kizárt, hogy hibás adat kerülne a boxba). A hiba esetére felkészülve a boxba (combobox) is beírok egy hibaüzenetet, és a box hátterét pirosra állítom a .backcolor tulajdonság beállításával. És még a form inicializálásakor hibaüzenettel figyelmeztetem is a felhasználót a hibára.
Kérdések
1. Azt is szerettem volna, hogy a boxba írt szöveg villogjon. Erre egyértelmű találatot kaptam a keresgélés során, hogy nem megoldható. Valóban nincs erre megoldás?
2. Azt sajnos nem tudom elérni, hogy az inicializálás során megtalált hibánál a hibaüzenetem csak akkor jelenjen meg, amikor már látható a form adatfelviteli képernyője, mert az inicializálás közben még a behívó form (pl. menü) képernyője látszik. Van erre megoldás?
Sub Szinek() Dim i As Long, c0 As Long, cR As Long, cG As Long, cB As Long Range("A1:E1") = Split("ColorIndex,R,G,B,Color", ",") For i = 1 To 56 With Range("A" & i + 1) .Value = i .Interior.ColorIndex = i c0 = .Interior.Color cR = c0 And 255 cG = (c0 And (CLng(255) * CLng(256))) / 256 cB = (c0 And CLng(255) * CLng(256) * CLng(256)) / 256 / 256 .Offset(, 1) = cR .Offset(, 2) = cG .Offset(, 3) = cB .Offset(, 4) = c0 End With Next End Sub
Köszi! Most már nekem sem kell naponta bejelentkeznem, amikor hazajövök! :-)
Azelőtt ez az indapassos belépő ott volt felül egy fekete sávban, de nemrég eltűnt, és amikor egyszer kijelentkeztem valamiért, hogy megnézzem úgy is a fórumot, akkor elkezdett kidobálni, és szomorú voltam.
A képen az Excel 2000 színválasztója látható (mint látszik, nincs mellette RGB-kód). Honnan tudhatnám, mi ezeknek a színeknek a képzési szabálya? Excel 2007-ben akarok úgy színezni, hogy xls-be mentéskor ne kapjak kompatibilitási hibát, ill. funkciócsökkenési figyelmeztetést. Azt már észrevettem, hogy ha olyan "kerek" számokat írok az RGB-komponensekhez, mint 128, 192, 255, akkor elfogadja.
A számoknak amiket betükkel akarsz helyettesíteni adj nevet.
Van egy olyan parancsa az excelnek, hogy NÉV megadása kijelölésből. Esetedben valszeg ezt célszerű használni. Veszel két egymás melletti oszlopot valahol a munkalapodon (vagy kár egy másik munkalapon). Az első oszlopba beirod a betüidet, a másodikba a hozzájuk tartozó számokat.
Ezután kijelölöd ezt a tartományt, majd a 2007-es excelben Képletek/Definiált nevek/Kijelölésből új kattintgatások után értelemszerűen pipálsz. És kész.
Innentől használhatod a betüket számaid helyett.
Ps. Lesznek betük, amik nem használhatók valamiért . Mint pl. a 'c'. Azok helyett válassz másikat.
Erre is van megoldás. De kell hozzá egy segédoszlop, amit persze elrejthetsz.
Mondjuk A11-től indulnak az 1-50 számok. Az oszlop akármilyen hosszú lehet. Az itteni mintapéldában a vonatkozó képletet úgy írtam meg, hogy A200-ig tarthat.
Segítséget szeretnék kérni az alábbiban. Egy százalék számítással egybe kötött, kerekítés függvényt használva, szeretném azt elérni, ha egy betűt adok meg szám helyett, akkor is értéknek vegye a függvény. Pl:"1" helyett "p" betűt írok, akkor is pl:1-nek számítsa.
Jelenleg használt függvény: " =ROUNDUP((100%-COUNT(lap!D12;lap!E12)/2),1) "
nekem olyan megoldásra van szükségem, ami automatikusan változik ha például az első oszlopba beírok egy új számot akkor az a második oszlopba is jelenjen meg, és ne kelljen újra és újra megcsinálni a szűrőt. Erre van megoldás?
Ezt a kérdést már többször feltették itt, és többször megválaszolták. A 2 legegyszerübb megoldás:
1. A Beszúrás/Kimutatás-sal megadod hogy hova listázzon, majd továbblépsz és az 1-50 oszlop fejcímét az un. sorcimkék kvadránsba húzod, és kész.
2. Special (Irányitott) szűrő, kipipálod, hogy mindegyiket csak egyszer, hogy ne helyben szűrjön, hanem "máshova", aztán megadod hogy hova, a kritériumcellába beírod, hogy >0, majd szűrés és kész.
A két eredménylista abban fog különbözni, hogy a kimutatásé nagyság szerint rendezi az számaidat, a szűrőnél pedig megmaradnak az adatoszlop sorrendjében.
Sziasztok, az alábbi problémát nem tudom megoldani:
Van egy oszlop tele számokkal 1-50-ig. Van, hogy egy szám többször is szerepel az oszlopban, de van olyan szám is 1-50-ig, ami egyáltalán nem szerepel az oszlopban, illetve van az oszlopban olyan sor is, ahol egyáltalán nincsen szám.
A feladat a következő lenne. Egy másik oszlopba egymás alá ki kéne listázni azokat a számokat, amik szerepelnek az első oszlopban, de ebben a második oszlopban, már csak egyszer szerepeljen mnden szám.
Hi Folks, Another bug? Replace does not work on a protected sheet even with UserInterfaceOnly set to True?
Maybe more interestingly, it doesn't throw and error?
Is the only workaround to unprotect a reprotect?
Tehát: Ismét egy poloska (bug)? A replace nem működik a védett lapon akkor sem, ha a UserInterfaceOnly értéke true?
...Az egyedüli megoldás, ha ki-, majd visszakapcsoljuk a védelmet?
És a microsoft szakértő válasza: ...this is a very old problem. i wouldn't say that it is a bug. This feature is simply not available. But here is a workaround.
...ez egy nagyon régi probléma. Én nem mondanám, hogy poloska. Ez a tulajdonság egyszerűen nem érhető el.
Nálam is. Az a kérdés, hogy unprotect nélkül miért nem működik? Mikor minden más módosítás működik a védett adatlapon. Még egyszer hangsúlyozom, a kérdésem elvi jellegű, a problémát meg tudom oldani, csak nem értem, hogy miért van így.
Egy olyan problémám van, hogy e-mailben kapott excel dokumentumot a program nem tud megnyitni. Bejön az excel ablak, de maga a munkalap nem jelenik meg. Más exel dokumentumot a program gond nélkül megnyit. Mi lehet a probléma?
Kedves Delila, köszönöm. De azt hiszem, félreértetted a kérdésemet. (Emlékeim szerint ez eddig először történt meg).
Szóval nem az volt a gondom, hogy hogyan tudom a lapvédelmet feloldani. Hiszen ahogy a programban letiltom az esetleges kézi módosítások lehetőségét az ActiveSheet.Protect userinterfaceonly:=True paranccsal, ugyanúgy könnyedén vissza tudom kapcsolni az ActiveSheet.Unprotect paranccsal.
Engem az zavart, hogy amig a program a protect parancs ellenére eddig minden adatmódosítást (beírás, törlés, rendezés stb.) gond nélkül végrehajtott (hiszen a tiltás elvileg csak a kézi beavatkozásokra érvényes), addig a replace parancs esetében megtagadta a végrehajtást.
Tehát a kérdésem inkább elvi volt. Létezik, hogy a replace parancs "szabálytalanul" viselkedik, avagy én hibázok el valamit? Illetve, ha a replace a hibás, akkor vannak-e még más, unortodox módon viselkedő parancsok?
Pedig ez a beállítás is megőrződik, csak az Excelnek van egy speciális, de érthető tulajdonsága. Ahogy előttem is írták ez a beállítás az egész Excelre vonatkozik. Az automatikus/kézi számolási beállítást az Excel mindig a legelső megnyitott fájlból állítja be. Tehát ha ezt a fájlt nyitod meg elsőnek, akkor kézi számolásod lesz. Viszont ha ezután még megnyitsz másik tíz munkalapot, akkor azokban a munkalapokban is kézi lesz a számolás, majd ha ezt a másik tíz munkalapot mented, akkor azok is lementik magukkal a kézi számolás beállítását. Ha viszont már van nyitva egy munkafüzeted, amiben automatikus a számolás, és ezután megnyitod a kézi számolásos fájlt akkor viszont abban is az automatikus beállítás lesz érvényes.
Én meg azt gondolom, hogy ez az Excel beállítása lehet és nem a munkafüzeté. A visszavonás gombbal vissza lehet vonni egy ilyen beállítást? Felteszem, nem.
Meglepő jelenséget produkált az Excelem (2003). Hónapok óta dolgozom a programomon, ahol a munkafüzet jelszavas védelmén túlmenően magát az alapadatokat tartalmazó munkalapokon is beállítottam a lapvédelmet. Amit ugyan nem nehéz kikerülni, de azért jobbnak láttam, ha az Excel nem engedi a kézi módosításokat. A program elején bekapcsolom a lapvédelmet (ha valamiért kikapcsolódott volna), és ez így is marad. A kikapcsolást nem használom. A program így is tud írni bele. Annyit tudtam, hogy a védelem az autoszűrő használatát is tiltja, de sebaj, azzal úgysem dolgozom.
Erre most egy ponton használnom kellett a search and replace parancsot, és legnagyobb megdöbbenésemre egyrészt hibaüzenetet kaptam, hogy a módosítani kívánt cella írásvédett.... Az üzenet még nem lett volna gond, azt le lehet tiltani, de a cserét nem hajtotta végre a program. Amúgy ez sem nem nagy gond, egy programsorral fel tudom oldani, majd egy másikkal vissza, inkább elvileg zavar. Nem találom dokumentálva a dolgot.
Én szúrtam el valamit, vagy a Replace funkció nem működik a védett lapokon. És ha az utóbbi igaz, fog-e vajon érni még más meglepetés is további parancsoknál?
Azt be lehet állítani az Excel 2007-ben, hogy amikor lementek egy füzetet a "Képletek kiszámítása csak kérésre" beállítással, akkor azt így is nyissa ki? Mert nálam mindig visszavált az automatikus kiszámítási módra.
Vagy lehet valahogy mondani neki, hogy a "D" oszlop összes sorára értelmezze.
Nem értem a problémád. Már miért ne lehetne mondjuk az E oszlop adatait a D oszlop celláiból származtatni? Ez a BAL fgv-nyel is ugyanúgy megy mint bármelyik függvénnyel. l
A C1-nél az első 8 karakterre van szükségem csak. És itt van az, hogy az eleje azonos a termékeknél de a vége eltér ezért logikusan a táblázat külön értéknek veszi.
Köszi a tippet! De az a baj, hogy egy txt file-ból olvassa be ami minden nap csak növekszik. Szóval az összes sorra meg kellene írnom szerintem a left() fgv-t. Vagy lehet valahogy mondani neki, hogy a "D" oszlop összes sorára értelmezze.
Szerintem nem. De ha az A és a B oszlopban van a két dátum, akkor a C-ben elő lehet állítani ezt dátum- és szövegkezelő függvényekkel, és az első kettőt elrejteni, Viszont azokkal lehet számolni tovább.
Az automatikus beléptetés nálam is csak a saját asztali gépemen érvényes. Más gépen be kell jelentkeznem (bár máshol ezt szándékosan nem is indapassal teszem, hiszen ott nem akarok bejelentkezve maradni), de az nem érinti a saját asztali gépemet. Itt azután sem kell bejelentkeznem hazatérés után.
Indapassozol? Elvileg mostanra muszáj volna. Ha igen, akkor ne a forum.index.hu-ról jelentkezz be, hanem pötyögd be, hogy indapass.hu, ugyanazzal a loginnal lépj be a jobb felső sarokban lévő belépés gombbal, böngésző bezár, majd irány a parancsikon. Elméletileg így működnie kellene.
Emlékeim szerint nekem ebben az indapassal való összekötés segített. Csak az újrainstallálás kapcsolta ki. Akkor újra összekapcsoltam, és azóta is eleve bejelentkezve vagyok a saját gépemen. Csak már régrn volt, és a pontos technikára nem emlékszem.
Kösz a választ. Nem töröltem semmilyen böngészési előzményt. De ha töröltem volna is, be kellene tudni állítani valahogy egyszerűen. Mintahogy előszörre sikerült. Ha már akkor is bejelentkezés nélkül müködött volna, belenyugodtam volna, hogy csak így müxik. De az előzmények miatt tudom, hogy van bejelentkezéses forma is. Így hát keresem.
A kukikat hol kell megnézni? És egyáltalán: átírhatók?
Az Excel fórumnak csináltam egy inditó ikont az Asztalra. Hosszú ideig, ha rákattintottam. úgy hozta fórumot, hogy már be is voltam jelentkezve. Kb két hete azonban meghülyült, és belentkezés nélkül adja a fórumot. Próbálkoztam mindenféle beállítással, de nem sikerült a bejelentkezéses változatot összehoznom. Tudna valaki segíteni?
Sőt, a left-es (Bal függvényes) alakhoz nem is kell külön kereső oszlop, mert az FKERES függvényt is elfogad kritérumként. Tehát:
=FKERES(BAL(1234567,6); stb) 123456-ra fog keresni.
A 2007-es excelnél mindegy, hogy az 1234567 szám- vagy szövegformátumú, a 2003-asnál azonban úgy emlékszem, hogy szövegfüggvényhez csak szövegformátum passzintható. És viszont
Majd megpróbálok valamit mert azért bosszant, hogy nem tudom megoldani.
Most egy másik kérdésem lenne már ha el tudom magyarázni :D
Van három munkafüzetem. Munkafüzet1-en van vonalkód időbélyeggel. Munkafüzet2-n van egy értékpárom ahol a vonalkód és a hozzá tartozó termék neve van és az Fkeres() fgv-hez kell. Munkafüzet3-n egy kimuatás van a vonalkódból ami a munkafüzet1-en szerepel
A munkafüzet3 A oszlopába írom az Fkeres() fgv-t azért hogy ne vonalkódokat kelljen keresni hanem ott legyen a termék neve.
A problémám, hogy a vonalkód vége változhat ami a terméket nézve nem fontos mert a szállítmányozáshoz kell. Pl:
0123456 ==>Csoki1
0654321 ==>Csoki2
0123459 ==>Csoki1
0654329 ==>Csoki2
Így a kimutatás táblázatban összesen 4 sor van ha a példát nézzük. Nem lehet megvalósítani valahogy hogy összevontan jelenítse meg? Azaz mindegy hogy 0123456 vagy 0123459 mind a két bejegyzés a harmadik munkafüzeten a csoki1-hez tartozzon?
James42: az a fontos, hogy te elégedett légy, ne törődj a világgal.
Pimre: a youtube oldalon, az alatt, hogy "Published on..." van egy link. Arra kattintasz, majd a link alatti leírást követve a feljövő oldalon megkeresed a file-t (legalul van), a videón 1:14-től mutatja hogy találod meg.
Bizonyára hasznosak a Youtube videói, bár én a linkből nem igazán tudom kihámozni a kereshető listát. Nincs egy jobb lista?
Egyébként a magam részéről ha igazán alapos gyűjteményt keresek, akkor jobban szeretem az írásos - tartalomjegyzékkel elláttott, lapozható - összeállításokat. És ebben számomra a csúcs eddig a következő volt: http://www.ozgrid.com/Excel/free-training/basic-index.htm
Például ennek az 5. leckesorozatából tanultam meg a Userformok használatánap alapjait.
Na de oda tartoznak még a szajkók és a szarkák is, és azok sokkal szebbek. Viszont a lényeg az, hogy most legalább már érthető, hogy mit akartál, és még link is van hozzá. Tehát a hozzászólásomat sikeresnek nyilvánítom. :-)
Nekem a varjúk történetesen nem jönnek be, de virágozzék ezer virág!
A két név akiket ezek szerint nem ismersz, a youtube-ra töltenek fel videókat az excel használatáról, többnyire függvényekről. Most csináltak egy kereshető listát az összes videójukról excel file formátumban.
A makrók tudtommal nem. De a hozzájuk rendelt billentyűkiosztás felül írja az excel billentyűkiosztását. Nálatok valszeg nem ez van, mert arra csak emlékeznétek, hogy csináltatok beszúrás és eltolás makrókat, amihez pont ezt a két betűt rendeltétek.
Egyébként akartam is javasolni, hogy ha minden kötél szakad, megoldás lehet, hogy lemakrózzátok a másolás és beillesztés parancsot és kiosztjátok nekik ezt a két betűt. Ha ezt az excel elfogadja és normálisan működik, akkor az exceletek állítódott át. De az is lehet, hogy figyelmeztet, hogy a két betű foglalt, válasszatok más betűt. Ekkor szerencsétek van, mert csak a betűket lefoglaló makrókat kell megkeresni és átállítani, hogy helyre álljon a rend.
Korábban rendben volt, de hogy mi váltotta ki, nem tudom (nem az én gépem, kolléga kínlódik a jelenséggel). Makrófuttatás elkavarhatja vajon ennyire az excel lelkivilágát?
2007-es Excellel akadt egy kis összetűzésünk. A Ctrl+C és a Ctrl+V billentyűkombók nem épp az elvárt módon működnek. A Ctrl+C a másolás helyett a "Beszúrás..." helyi menű tartalmát szedi elő, a Ctrl+V pedig ugyanez pepitában, csak nem a beszúrást, hanem az eltolást erőlteti. Mi lehet vajon félretekerve? Van ötletetek?
A Ctrl+X normálisan működik, illetve az egérrel elérhető másolás és beillesztés menüpontok is teszik a dolgukat normálisan.
De a viccet félretéve, talán mégis megoldható a problémád. Valahogy úgy, ahogy pdw javasolta. Külön oszlopban vezetve a változást, majd egy harmadikban történne a 2 oszlop összedolgozása (amihez esetleg további segédoszlopok felvétele is előnyös lehet).
Olyan kérdésem lenne, hogy megvalósítható-e automatizáltan a következő:
Van egy txt file amiből számol nekem az excel szép kis számokat. Hó végén ellenörzöm a raktárat. Többnyire egy kis eltérés van a tényleges és az excelben található értékek között.
Egy sima kivonással kiszámolom a raktár és a tényleges közti különbséget majd ezzel az értékkel korrigálom is a készletet.
De ezt az ellenörzést csak havi szinten csinálom meg. És az a kérdésem hogyan lehetne megoldani, hogy a január végén beolvasott értékek statikusak maradjonak mert februárban már nem annyi a készlet. Egyenlőre csak a copy paste megoldást találtam mint használható dolog
példával:
A "Készlet mf A1"-be szum függvénnyel beolvassa a "scanner munkafüzetből", hogy 100db
Kimentem a raktárba és 150db-ot találtam.
Amit be is írok a "leltár mf A1" oszloba.
Azaz 50 db az eltérés amit hozzá is adok a "Készlet mf A1"-hez és így 150 db lesz. Magyarul egyezik az excel és a valóság
Kimegyek következő hónapban ugyan ezt a procedúrát megcsinálom. Csak az a baj, hogy akkor már a "scanner munkafüzetbe" nem 100db lesz hanem 500db. Így az előző hónapnál nem 50 darab az eltérésem.
Ja és a helyes adat, amit ki akarsz nyerni, se nem 51800Ft (ez így helytelen), se nem 51800 Ft, ami csak ránézésre helyes, hanem 51800 (szám), pénznemként megformázva. Mert ha kinyerted az általad leírt 51800Ft adatot, azzal megint nem tudsz semmit kezdeni a nyomtatáson kívül (pl. áfát számolni, összeadni...). Ha azt csinálod, amit írtam, akkor a Ft stringek külön oszlopba kerülnek és egyszerűen törölheted őket, a pénzt tartalmazó oszlopok pedig számformátumúak lesznek.
Delila nagyon fürgén ír makrókat kora reggel, de én egy másik, excelesebb megoldást javaslok. Ha vannak más sozlopokban is adatok, azokat húzd odébb vagy 10 oszloppal, hogy legyen helyed, utána az A oszlop kijelölésével válaszd az adatok menüben a szövegből oszlopok parancsot, tagolt, elválasztó karakter szóköz, egymást közvetlenül követő elválasztók egynek számítanak beállításokkal, és hamarosan egy valódi Excel-táblázat birtokosa leszel, amiben végezhetsz műveleteket is. Ez ugyanis egy ömlesztett szövegfile az A oszlopban, amivel az összes többi felmerülő feladatot is csak szörnyen nyakatekert módon fogod tudni megoldani.
A cellád több helyen is tartalmaz számot, azért nem jött össze.
Írtam rá egy függvényt.
Function Ft(Cella As Range) Dim betu As Integer, nev$, ujnev$ nev$ = Cella.Value For betu = Len(nev$) - 3 To 1 Step -1 If IsNumeric(Mid(nev$, betu, 1)) Then ujnev$ = Mid(nev$, betu, 1) & ujnev$ Else Ft = ujnev$ & " Ft" Exit For End If Next End Function
A B1 cellába ezt írd: =Ft(A1), ezt másolhatod az alatta lévő cellákba.
SK adatbázikus munkáról beszélt, a "bázikus" jelző pedig a lúgossal szinonim, a savasnak az ellentéte. Az adatbázikus munka közömbösíti a savas kávét.
A fűnyíróember egy másik fonál, nincs köze a sav-bázis egyensúlyhoz. Ez egy film volt valamikor a 90-es években, asszem Stephen King könyve alapján. A címszereplő **** spoiler **** annyira virtualizálódott a végére, hogy kilépett a testéből, be a számítógépes hálózatba, és ott élt tovább. Ha jól emlékszem.
Szarvashibát követtem el. Többeket (ScreenUpdating, DisplayAlerts) kikapcsoltam, és azzal voltam, hogy ezek között volt az EnableEvents is. Most vettem észre a hiányát, hogy rám olvastad.
K ö s z ö n ö m!
Off: Mikor alszol? Éjjel, és hajnalban is itt vagy. On:
Lehet, hogy a Selection.PasteSpecial Paste:=xlPasteValues helyett van olyan módszere az értékbeillesztésnek, amit nem ismerek, és nem kell a másolat helyére állni előtte?
Arról a bizonyos 11. lapról készítek másolatokat egy ciklusban, ahol szükségszerűen a másolt lap lesz aktív, akkor pedig az első lap hivatalból elé ugrik. Most a másolatok készítese után beírtam, hogy szaladjon vissza az első a helyére.
Eddig irányított beillesztéssel, értékeket illesztettem be az elsőről a 11-n. lapokra, annál rá kellett állni az n-re. Sima másolásnál nem szükséges az n. lapra állás. Ezt végül másképpen, hivatkozásokkal oldottam meg.
A teljes kód külsős rendszeren nem tesztelhető, mert a kód nagy része adatokat importál a vállalatirányítási rendszerünkből. Ha kíváncsiságból mégis szeretnél ránézni, akkor megállítom az aktuális eljárásnak megfelelő formánál és elküldöm a kód más rendszerből is használható részét. (Előtte azért letesztelem, hogy pusztán a kivágott kóddal is megakad-e, vagy csak a teljessel együtt. (Sanszos, mert bizti az aktuális kódban van valami, amitől bugzik.)
De igazából csak jó lenne az a teljes kód, mert így nem nagyon lehet reprodukálni a problémát. Van a topikleírásban egy link, hogy hová lehet pakolni a hosszú kódokat.
Ha ezt bezárom egy eljárásba, akkor azt teszi, amire hivatott. Amint beteszem a programba, onnantól csak az "A" oszlopot hajlandó elrejteni. -.- Gondoltam, hogy lehet, hogy sok az agyának, mert a 800. sor után kerül sorra, addigra lehet befárad az Excel, vagy nem is tudom... Tehát szétszedve + range lecserélve, biztos, ami ziher
2:
Columns("A:A").EntireColumn.Hidden = True
Columns("F:F").EntireColumn.Hidden = True
Columns("L:M").EntireColumn.Hidden = True
Columns("O:S").EntireColumn.Hidden = True
A 2. verzió is csak az "A"-t rejti el a programban futtatva. Sebaj, biztos retardáltra dolgozza magát az Excel, ezért összefolyik neki a parancs, ahogy nekem a betűk a szemem előtt. Íme, a never go full retard elvnek ellentmondó próbálkozás is:
3:
Columns("A:A").EntireColumn.Hidden = True
Cells(1, 2).Select 'fake
Columns("F:F").EntireColumn.Hidden = True
Cells(1, 3).Select 'fake
Columns("L:M").EntireColumn.Hidden = True
Cells(1, 2).Select 'fake
Columns("O:S").EntireColumn.Hidden = True
Persze ez is csak az A-t rejti el. Nem értem, hogy mi van... Egyébként minden próbálkozás az eredményt tekintve kiváló, ha szubrutinként hívom meg... De ez így nagyon nem elegáns. A kódot nem vágnám be, mert hosszú, de oszloptörlések vannak közvetlenül az elrejtés előtt a kódban. Ha ez lenne a baj, akkor sem értem...
Egy idétlen krimi nézése közben eszembe jutott a megoldás, míg a képernyőn gyilkolászott a tettes.
Mikor a napokat tartalmazó lapokon haladtam a ciklussal (11-től az utolsóig), az első lap mindig az aktuális elé furakodott a remek makród mellékhatásaként, felborítva a sorrendet. Ezt sikerült megoldanom: a ciklusba beírtam, hogy szaladjon vissza a helyére.
Úgy értettem, hogy egy olyan riport elkészítése életszerű lehet, ahol az előző évvel együtt folytatólagosan kérik a hetek megszámozását. Ahogy például a hónapokkal is megteszik az annuitásos törlesztőszámításnál. Ott sem 1-12 hónap van, 1-60 hónap pl. az 5 éves hitelnél. Persze hétnél ez nem jellemző, de találkoztam én már mindenféle váratlan dologgal.
Az említett pédához természetesen nem illik, kizárólag azzal példálóztam, hogy mivan, ha mégis... alapon kerüljük már meg, hogy bal() fgv helyett minden eshetőségre egy arra valót használunk, ami szépen megformázza azt a számot (szöveg())
Köszönöm. Mint kiderült, sajnos az én feladatomhoz nem jó.
Van 10+1 lapom. A +1 tartalmazza a hónap első napjának adatait. Agyba-főbe formázott, hétköznap, szombat, vasárnap, és ünnepnap oszlopai különböző háttérszínekkel a megadott dátum szerint.
Egy makró bekéri az évet és hónapot. A 11. lapból annyit másol a füzet végére, ahány nap szükséges az adott hónaphoz, pl. nem szökőévben februárnál 27-et.
A napok lapjai a füzet első lapjáról vesznek adatokat, ezért lett volna jó, ha az mindig az aktuális lap mellett van. Az n-edik lapra állva az első lap az n-1-edik helyre lép. Viszont ha rálépek az elsőre, az előre szalad, és ott vagyok, ahol voltam.
Kihagyhatnám az előre fuss utasítást, marad az első lap az n-1-edik helyen. Akkor meg más hiba lesz. Egy másik makró az elsőről irányított beillesztéssel másol oszlopokat a napok lapjaira. Itt a For lap% = 11 To Worksheets.Count bolondul meg, mert a korpa közé keveredett a disznó.
Olyasmire gondoltam, hogy ha pl. Munka1-en egy képlet munkalapokon átívelő összeadást tartalmaz (pl. lásd itt: http://www.officearticles.com/excel/sum_the_same_cell_in_multiple_microsoft_excel_worksheets.htm), akkor a lapok átrendezése rögtön körkörös hivatkozást fog okozni, ami beláthatatlan következményekkel járhat. Nekem pl. teszteléskor felugrott a körkörös hivatkozás című ablak, és azóta sem tudom bezárni :-)
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Application.EnableEvents = False Application.ScreenUpdating = False If Sh.Name <> "Munka1" Then If Sh.Index > 5 Then ThisWorkbook.Worksheets("Munka1").Move before:=Sh Else ThisWorkbook.Worksheets("Munka1").Move before:=ThisWorkbook.Worksheets(1) End If Sh.Activate End If Application.ScreenUpdating = True Application.EnableEvents = True End Sub
"Persze ha valami miatt fontos a lapok sorrendje, akkor ez a megközelítés nem jó."
Feltételezem, hogy ha fontos is a lapok sorrendje, az nem az adatbevitel közben érdekes. Ezért el tudom képzelni, hogy elegendő a munkafüzetből való kilépéskor helyreállítani:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Ez azt csinalja, hogy minden hét ele berak egy nullat, majd jobbrol (azaz a vegerol visszafele) 2 szamjegyet mutat. Ergo 1-bol 01 lesz es 01 latszik, 12bol 012 lesz de szinten csak 12 latszik.
Megj.: a RIGHT-ot nemtom mi magyarul, majd az okosok megmondjak :)
Azt, hogy a hét száma ne 1 helyértékű legyen (pl.: 1) hanem két helyértékű (pl.: 01), azt hogy lehet elérni? (mert a 2. hét után a 20., a 21....heteket jeleníti meg)
Az megoldás, hogy két külön oszlopba megjelenítem az évet (BAL függvénnyel) majd a hetet (WEEKNUM_ADD függvénnyel) majd egy harmadik oszlopba összefűzöm a két oszlop adatát. Van ennél egyszerűbb?
Szeretnék dátum adatokból grafikont készíteni, ami az elmúlt hetek adatait tartalmazza. A feladatom az, hogy már a tavalyi adatokat (heteket) is meg kell jelenítenem. Hogy lehet dátumból (2012-11-20 vagy 2013-02-10) olyan formátumot készíteni függvénnyel, ami tartalmazza az adott évet és hetet. (pl.: 2012. 47 vagy 2013. 09)
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Application.EnableEvents = False Application.ScreenUpdating = False If Sh.Name <> "Munka1" Then ThisWorkbook.Worksheets("Munka1").Move before:=Sh End If Sh.Activate Application.ScreenUpdating = True Application.EnableEvents = True End Sub
A kód mindig az éppen aktivált lap elé teszi a Munka1 nevű lapot. (Célszerű is a Munka1 fülét átszínezni, és akkor jobban látszik, hogy melyik az.)
Persze ha valami miatt fontos a lapok sorrendje, akkor ez a megközelítés nem jó.
Erre én is kíváncsi voltam, és kipróbáltam. Lehet, hogy valamit félreértek, de nekem nem egészen azt teszi, amit Alta Mira szeretne.
Mivel a szerző nem írja, hogy a makrót hova kell tenni, hát a Workbook SheetActivate funkciójához rendeltem:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Worksheets(1).Activate
End Sub
Ez működik is, csak éppen egy kicsit jobban a kelleténél. Ugyanis bármely munkalapra kattintok, azonnal visszaugrik az első munkalapra. Naná, hiszen azt aktiválja. Csak éppen ezzel nem lehet dolgozni másik munkalapon. És nem is látszik egyszerre két távoli munkalap neve egy képernyőn.
Nem akarom egyszerre látni a két megnyitott munkalapot, csak azt szeretném, hogy az első munkalapfül mindig elérhető legyen.
Végülis eléggé részletkérdésnek tűnik a probléma, mert csak kicsit odébb kell görgetni... de nem magamnak csinálom, hanem a "megrendelő" így kéri. Mondtam, hogy tudtommal nem lehet így beállítani, de elkezdtem gondolkodni rajta, és már érdekel a megoldás. Amúgy érdekes kérdés az is, hogy vajon miért nem lehet ezt egyszerűen beállítani, mint a panelek rögzítésénél (erre miért nem gondoltak a program készítői)?
Az nem lenne megoldás, hogy a 30 munkalapból néhányat elrejtesz, hogy mindig az összes nem elrejtett görgetés nélkül látsszon? Ha ez jó, akkor a VBA ablakban az elrejtendő munkalapok visible tulajdonságát hidden-re kell állítanod.
Az lenne a kérdésem, hogy egy több munkalapos excelben az első munkalap fülecskéje mindig látható legyen?
A probléma az, hogy van egy 30 lapból álló munkafüzetem, az első munkalapon egy összesítő táblázat van. Azt szeretném megoldani, hogy ez az összesítő munkalapfül akkor is látható legyen, amikor mondjuk a 29. munkalapot töltöm ki, hogy oda kattintva meg tudjam nézni az összesítést is, ne kelljen görgetnem a munkalapfüleket az elejére. (Hasonlóan, mint amikor paneleket rögzítek egy munkalapon.)
Remélem van erre megoldás, előre is köszönöm a válaszokat.
A H1 cellába írtam egy számot. Végig lépkedek a D oszlop celláin. Amelyik sorban a H1-nél kisebb szám van, vagy üres a cella, vagy nem számértéket tartalmaz, azt a sort törli. Sortörlésnél az alsó sortól kell indulni felfelé, másképp nem kapsz jó eredményt.
A makróba ***-gal jelölt sorokat írtam, amik nem szükségesek a feladathoz, de megtudod belőlük a hasznos terület címét. Ebből veszem az usor változó értékét.
A D oszlop utolsó sorát így is megkaphatod:
usor = Range("D" & Rows.Count).End(xlUp).Row, ebben az esetben nincs szükség a csillagos sorokra.
Sub mmm()
Dim ter As Range, sor As Integer, usor As Integer
Dim cella As Range
Range("A1").Select '***
Set ter = Selection.CurrentRegion '***
MsgBox ter.Address 'Így tudod meg a területed címét ***
usor = ter.Rows.Count 'A terület utolsó sora
For sor = usor To 1 Step -1
Set cella = Range("D" & sor)
If cella = "" Or cella < Range("H1") Or Not IsNumeric(cella) Then
Nem tudom milyen a tábláid szerkezete, de ha az 1. sorban a mezőnevek, alatta további sorokban az adatok vannak, és más semmi (pl. összegző sor alul stb), akkor a A:D hivatkozással is végezheted az adatbázis műveleteket.
A legegyszerűbb módszer, ami nem igényel magasabb ismereteket ha elnevezed a tartományt. Kijelölöd a kérdéses területet és a szerkesztőléc bal oldalán a név mezőbe beírsz egy nevet mondjuk „alapadatok” Range("A1:E20").Select helyett Range("alapadatok").Select
Azt nem tudom hogy makroba hogy kell integralni, de ha az adathalmazra nyomsz egy "format as table" opciot akkor az ad neki egy nevet (Table1 pl.) amire aztan hivatkozhatsz a makroban.
Visszaolvasva korábbi kérdéseket próbáltam megoldást találni az alábbi problémára, de nem találtam.
A következőről lenne szó. Néhány feladatnál próbálok makró rögzítéssel, majd futtatással gyorsítani a munkámon. Ez több kevesebb sikerrel működik is. Egy olyan számomra VB-ben megoldhatatlannak látszó problémába ütköztem, amiben szeretnék segítséget kérni:
Változó nagyságú adatbázisokon szeretnék bizonyos műveleteket elvégezni, pl törölni. Ehhez valamilyen feltételeknek megfelelő sorokat kellene kijelölni és azt törölni. Viszont ezek a feltételek egy cellában helyezkednek el.
Konkrétan:
Az adatbázis mérete A1:D25, és ebből azokat a sorokat szeretném törölni, amelyikben a D oszlop adatai közül pl. nagyobb mint 100, vagy amelyik pl üres, vagy nem tartalmaz számot stb.
Viszont ha egy hagyományos módon rögzített makróval akarom ezt megoldani, akkor ezt nem érzékeli egy más méretű adatbáziban, csak az eredeti rögzítéskor kijelölt cellákkal hajtja végre a műveletet.
(Nem vagyok otthon VB-ben csak amit saját magam ellestem a makro készítése közben az Excel-től Amit próbáltam: hogy beírok a Range("A1:E20").Select –ben a 20 helyére valami cellahívatkozást, vagy képletet de ez nagy hülyeség…)
A következő makróval tudna boldoggá tenni valaki, nem tudom, mekkora munka ez. (Off. 2007)
A táblázattal azonos könyvtárban levő, fix nevű csv-t (pl. jancsika.csv) nyissa meg, cserélje le benne globálisan a CRLF (CHR(13)CHR(10)) előfordulásokat egy-egy szóközre (a sima LF marad), és mentse el, majd importálja új üres munkafüzetbe a következő paraméterekkel:
tagolt
kódolás UTF-8
tagolójel pontosvessző
szövegjelölő idézőjel
egymást közvetlenül követő szövegjelölők nem számítanak egynek (nincs pipa)
Tud ebbe valaki segíteni?
Az első feléhez nem kéne Excel, de így egy menetben lefutna és nem kéne még egy program (mivel nem én fogom használni).
Alt F11 után beillesztesz egy új modult az Insert/Modul paranccsal, majd ctrl+c ctrl+v -vel bemásolod a makrót.
Utána kijavítod. Ugyanis megfeledkeztem arról, hogy ez a kurva fórummotor elzabrálja a blackslash \ jelet. Tehát a Path után nem "" van, hanem "\". Azaz helyesen a sor:
a = ActiveWorkbook.Path & "\" & "statutso" & b ".xlsm"
Ha akarod, átírhatod még a „statutso”-t filenevet neked valami kedvezőbbre, és persze a dimorphystatmentés makrónevet is.
A makró futtatásakor az ALT F8 listából kiválasztod és Run.
A makró a filet xlsm-be (tehát makróbarátként) menti, tehát nem csak munkalapokat de a makrót is menti. Ez sajnos problémát okozhat, mert a biztonsági beállításaitok nem biztos, hogy engedik megnyitni. Akkor azokat át kell állítani. Vagy ha ezt nagyon nem akarjátok, továbbfejlesztem a makrót, hogy xlsx-ben mentsen.
Köszi szépen! Az irányított beillesztés eszembe nem jutott volna... :)
Erről a makróról tudnál mondani valamit? Semmilyen szinten nem tudok makrózni de ezt a mentés dolgot automatizálnám amennyire csak lehet. Már ha azt csinálja. Mit csinál esetleg hova kell beírnialt(alt+f11?) és hol futattom?
Megcsinálható. Én úgy csinálnám, hogy nem a Munkafüzeteket menteném stabilra , hanem a statfüzetet, pdf-ként, vagy html-ként. Vagy akár xlsx-be is, ha elötte a stat munkafüzet hivatkozásait fixálnám a ctrl+c/irányitott beillesztés/érték paranccsal. Persze nem sima mentéssel mentenék, hanem mentés másként-tel, mondjuk „utsostat” néven. Vagy ami még jobb: utsostat&datum néven.
Ezt viszonylag egyszerűen bebillentyüzheted, de itt egy makró is rá:
Most kértés merült fel bennem hogy meg lehet-e oldani, hogy van egy összesítő táblázatom ami különböző excel file-okból szedik ki az infót a felsővezetésnek.
Kérdésem az hogy meg lehet-e oldani hogy az utolsó infókat "jegyezze meg statikusan"(mintha statisztika.xlsx-be pötyögtem volna be unalmamba) az excel vagy minden Munkafüzetet le kell mentegetnem mindig a hivatkozások miatt pdf-be vagy html-be?
Adok nektek egy jó tanácsot teljesen ingyen! Sose rejtsétek el azt az oszlopot, ahol a szűrő be van kapcsolva, ha látni akarjátok az összes sort! Ááááá....
Tudja valaki, hogy az hol van leírva, hogy a#=2*b% típusú képletben a double adattipusú a# változó értéke nem léphet ki az integerekre megadott intervallumból? És hogy miért van ez?
A kérdésre válaszolva: msgbox csak akkor jön fel ha engedélye van rá. A konkrét fileben egy form jön fel amit a megrendelőnek ki kell tölteni. Semmi másra nincs jogosultsága. A raktári oldal csak két dolgot tehet: elvégezte a műveletet illetve nyomtani akar. A megfeelő helyre pipát tesz. Változtatni a táblázatban egyik sem tud.
Nincs gazdagép. Van egy Excel file a hálózatban ami megosztott. A különböző gépek shortcut-tal kapcsolónak rá. A mikor valaki műveletet kezdeményes akkor egy makró megnézi, hogy milyen jogosultsági csoportba tartozik. Csak azt engedélyezi amit neki elő van írva. Két fő csoport van. Az egyik a raktár, másik az összes többi. Az első indításkor a gépeken feljön egy kérdés: raktár vagy megrendelő vagy. Ez a kérdés többször nem jön fel.
Az hogy viselkedne megosztott munkafüzetnél, ha selection change eseményre írsz egy sima msgbox-ot a változás helyével/tartalmával? Csak a gazdagépen jelenne meg?
Amikor valaki befejezi az adatbevitelt akkor azt egy gombbal lezárja ami elindít egy kb. így kinéző makrót ami 5 perc múlva teljesképernyőre felnyitja a megnevezett gépen a kicsire csukott lapot: