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.
Egy *.xlsm munkafüzetet megnyitnak, majd, ha éppen nem dolgoznak vele (vagy pl. átváltanak word-be) "leteszik" a tálcára, és ha a tálcáról újra aktiválják, ezt kellene valahogy figyelni és egy makróval kiíratni egy üzenetet. Tehát, nem egy makró futása közben, hanem, amikor az Excel a tálcáról újra fókuszba kerül.
Sub GetWindowInfo() Dim lState As Long lState = Application.WindowState Select Case lState Case xlMaximized Debug.Print "TeljesKépernyő" Case xlMinimized Debug.Print "Tálcán" Case xlNormal Debug.Print "Normál" & vbCrLf End Select
End Sub
Az IState változó tartalmát figyeld az expression ablakban és ezt kell használnod.
Ez mire lenne jó? Amikor egy makrót futtatsz, az Excel meg van nyitva, így a tálcán megjelenik. A makró futása közben amúgy sem tudnád magát az Excel munkafüzetet manipulálni. Ha pedig a futás közben nem tudod megváltoztatni az állapotát, nincs is mit kiolvasnia a makrónak erre vonatkozóan.
Mit szeretnél tulajdonképpen? Esetleg azt, hogy egy adott munkafüzet, vagy éppen annak egy munkalapja aktív-e? Mert azt ki lehet olvasni. Sőt módosítani is, bár az utóbbi az álmoskönyvek szerint (és szerintem is) kerülendő, mert van helyette jobb megoldás.
Excel (2010) - VBA kérdésem lenne, mégpedig az, hogy lehet vba-val érzékelni azt, ha a tálcára letesszük, illetve a tálcáról ismét aktiváljuk az Excel-t?
Sajnos Pivot táblákkal alig foglalkoztam, így nem mennék bele tanácsadásba. Ellenben a Google-ban a "Pivot tábla" keresőkifejezés elég jó eredményeket ad. Érdemes körülnézni köztük.
Igen, de közvetlenül nem, mert a kritérium nem vonatkozhat egyszerre több tartományra. Ehhez fel kel venned egy segédoszlopot, legyen mondjuk az E, és az E17-be beírod, hogy =HA(D17>0;D17;0), majd a képlettel kitöltöd lefelé az E oszlopot. Ez csak a nyereségesek adatait tartalmazza. És akkor már használhatod a SZUMHA függvényt az E oszloppal, mit Összeg tartománnyal.
Igen. Próbálgasd! Használd az ÉS, VAGY stb. függvényeket. Javaslom még a google-ban az "excel függvények használata" keresőkifejezést beírni, és nagyon sok használható tipp jön az alapokra.
A függvény leírásánál a jobb alsó kockában találsz egy linket: "Súgó a függvényről" címmel.
Ha erre rákattintasz, ott van magyarázat. Igaz, néha nehezen hámozható ki a szöveg értelme, de legtöbb esetben a mellékelt példák használhatók.
A Szumha esetén a magyarázat a következő: "összegtartomány: Megadása nem kötelező. A ténylegesen összeadandó cellák, ha a tartományargumentumban megadottaktól eltérő cellákat szeretne összeadni. Ha az összegtartomány argumentumot elhagyja, az Excel a tartomány argumentumban megadott cellákat adja össze (ugyanazokat, amelyekre a feltételeket alkalmazza)."
Ez azt jelenti, hogy ha a tartományban teljesül a kritérium, akkor nem feltétlenül a tartományt fogja összeadni, hanem megadhatsz egy másik tartományt, ahol az összeadást elvégzi.
Próbáld meg tartománynak az A oszlopot megadni, kritériumnak az Északot, és adasd össze a bevételeket!
Csinálj egy segédoszlopot, amiben felváltva szerepel pl. 1 és 2 (bármilyen két - ha több kihagyásról van szó, akkor több - különböző szám vagy akár betű is lehet) - kitöltéssel is megy. Ezután az eredmény oszlopban SZUMHA - feltétel 2 összegez minden második (páros) sort, feltétel 1 összegez minden páratlan sort.
a gyorselérési eszköztárra ki lehet rakni az "értékek beillesztése" parancsot.
Ez is elérhető billentyűkombinációval. Kap egy sorszámot ha felkerül erre az eszköztárra és az ALT+"sorszám" billentyűkombináció használható gyorsbillentyűként.
Szeretném segítségeteket kérni egy olyan makró megírásában, hogy az Excel, érték beillesztéseként értelmezze, lehetőleg olyan rugalmasan, mint a CTRL+V kombináció.
A gyakorlatban így működne a dolog:
CTRL+C egy tetszőleges cella
CTRL+Q egy másik tetszőleges cella (akár másik táblázatból, vagy lapfülről) értékként beilleszt.
Tudna nekem segíteni valaki, egy nagyon exact leírásban (ma kezdtem a makrózást, szóval nagyon kezdő vagyok)
Igen, elismerem, hogy ezzel kellett volna kezdenem és nem pedig a pökhendi válaszaimmal.
Elismerem, hogy azonnal el kellett volna kezdenem bizonygatni, hogy ezek kamu adatok, aztán megkérni egy kedves admint, hogy törölje a képet, és akkor nem járt volna vele arcvesztés. Az első hibát, miután felhívták rá a figyelmemet, tetéztem egy másodikkal is, puszta virtusból. Nem várom, hogy megértse bárki is, de a másoknak okozott erkölcsi kár közönyösségemmel párosítva összeférhetetlen azzal, hogy idejövök egy önkéntes fórumra segítséget kérni.
Ezennel pedig elnézést kérek mindenkitől, akit viselkedésemmel megbántottam.
Mindenesetre azon elgondolkoztam, hogy ha valóban valós adatok szerepeltek volna a feladatban, akkor az hogyan kerülhetett volna nyilvánosságra egy nagyobb cégtől, mivel csak ott dolgoznak ennyien ilyen fizetéssel. Ki hozhatta volna nyilvánosságra őket?
1. Aki az adatokat kezeli? Nem valószínű hogy egy ilyen fórumon kér segítséget egy olyan feladathoz, amit naponta pár százszor meg kell csinálnia.
2. A főnöke? Biztosan tudja ő is.
3. Az informatikus, akinek szintén van hozzájuk hozzáférése? Biztosan tudja ő is. Ő itt inkább tanácsot adna.
4. Egy hacker, aki feltörte a rendszert? Biztosan tudja ő is. Ő itt inkább tanácsot adna.
Szóval eléggé valószínűtlen, hogy valós adatok legyenek, nem is értettem, miért kell virtusból ragaszkodni ahhoz, hogy ezek biztosan azok kell, hogy legyenek.
5. Valószínűbb, hogy egy olyan Excel példatárból, ahol életszerűbbek a feladatok.
Látod, ezzel kellett volna kezdened, nem pedig a pökhendi válaszaiddal. Jimmy nem kötekedett, hanem egy jogos aggályra kérdezett rá. A feltett képeidből nem derült ki, hogy valós, vagy fiktív személyek adatai lettek bemásolva.
Egyébként ebben a topikban nem szokás a kötözködés. Segítünk egymásnak, ahogy én is megpróbáltam a kérdéseidre válaszolni. Sajnálom, hogy így alakult.
Szerintem egyszerűbb lett volna szólni az adminoknak, hogy töröljék a képet, nem járt volna vele arcvesztés. Ehelyett azt az utat választottad, hogy az első hibát, miutánfelhívták rá a figyelmedet, tetézted egy másodikkal is, puszta virtusból. Nem várom, hogy megértsd, de a másoknak okozott erkölcsi kár iránti közönyösséged összeférhetetlen azzal, hogy idejössz egy önkéntes fórumra segítséget kérni.
Mondjuk aki a listádon rajta van, nem biztos, hogy röhögne. Bérrel és névvel.
Egyiket fel is keresem FB-n, hogy elégedett e a 162.875 Ft-os fizetésével. Mekkorát fog nézni, hogy honnan tudom - meg még pár kollégáét is. :) Mekkora poén lenne.
Kevés időráfordítással simán megtalálom a főnöködet, hogy szóljak neki. Cégen belül sem publikusak a bérek, az állásodba kerülhet :)
A fenébe a frászt hozod rám! Ennél jobban már csak akkor ijedtem meg, amikor majdnem kiderült, hogy én vagyok Hasfelmetsző Jack! Rohanok is az amulettes kosárkámhoz, ilyenkor háromszor meg kell csókolni és elmúlik az ijedtség!
De van hogy van benne egy érték mondjuk 1000 amit csak simán beírok. Majd következő héten ebből le kell vonjak 300-at meg hozzáadni 200-at. És ilyenkor F2==>elejére megy==> egyenlőségjel==>végére megy==>hozzáírom az értéket. Na ezt a macerát unom már :D
Van rá valami lehetőség arra, hogy Excelben többnyire csak számokat írok vagy valamilyen műveletet végzek azokkal hogy kapásból úgy kezdje amikor belekattintok a cellába (vagy f2 nyomok) hogy egyenlőségjel. Így nem kellene folyton azt is írnom?
Bocs, hogy belekibicelek, de jól látom, hogy éppen megosztottad egy tucat ember egyik legérzékenyebb személyes adatát? Nem mintha közöm lenne hozzá, de a helyedben sürgősen elkezdeném bizonygatni, hogy ezek kamu adatok, aztán megkérni egy kedves admint, hogy törölje a képet...
Az 1. pontot pontosítanom kell. A Mindent az egy dolgot nem visz át a képletet tartalmazó cellából, az értéket. Hiszen érték nincs is a képletet tartalmazó cellában. Az ott látható érték nem valóságos, csak látszólagos. Ezért a képletet viszi át. Hiszen az előzőekben már tisztáztuk, hogy egy cellában vagy érték, vagy képlet szerepelhet. De csak az egyik.
1. A beillesztésnél a Mindent azt jelenti, hogy az alatta lévő lista valamennyi elemét átviszi. Képletet, értéket stb.
2. Az érték az egy adat, amit közvetlenül beírsz a cellába. Szöveg, szám, vagy dátum.
3. A képlet pedig egy kiértékelhető kifejezés (ebbe a matematikai logikai kifejezések is beletartoznak, mint az ÉS, a VAGY stb., az aritmetikai alapműveletek, mint az összeadás, szorzás stb., de a szövegek összefűzése is az & jellel). Tehát nem csak függvény lehet képlet. A képletet magát a szerkesztőlécen írhatod be (pl. A TNÉV függvényed), és később is ott láthatod. A képlet által kiszámított értéket a cellában látod. Például nálad a K oszlop 2. sorától lefelé. De ha bármelyikre rákattintasz, a szerkesztőlécen látod, hogy a cella valóságos tartalma nem a benne látható név, hanem egy képlet.
Két példa a képletre: Képlet lehet két cellában lévő szám összege: =B2+C2, vagy két szöveg közéjük egy szóközt, vesszőt, kettőspontot stb., vagy más szöveget téve: =A2 & " és " & A5
4. És ha egy ilyen képletnek csak a cellában látható értékét akarod valahová bemásolni, akkor használod az irányított beillesztésnél az értéket. Ha a formázását is át akarod másolni, akkor újra rámész az irányított beillesztésre, és rámásolod a formázását is.
Mert egy cellában vagy egy adat van, vagy képlet. A kettő nem lehet egyidejűleg, hiszen akkor a képlet saját magára a cellára hivatkozna, és módosítaná saját magát. Na ilyen nincs. Ezért írt az első próbálkozásodra körkörös hivatkozás hibát. Keress rá az Excel súgójában a "körkörös hivatkozás" kifejezésre, ott találsz bővebb magyarázatot is.
Köszönöm szépen mindkettőtöknek! Sikerült összeszenvednem. De miért CSAK az értéket kell beillesztenem az irányított beillesztésnél? Gondolom alapfogalmakkal nem vagyok tisztában, épp ezért lenne jó ezeket rendberakni.
Egy függvényt nem tudsz a saját cellában érvényesíteni, mert ott vagy az eredeti adatod van, vagy a függvény. A függvényt egy üres cellába kell írnod. És nem kell kijelölni a teljes célterületet.
Hanem az első szabad oszlop (legyen mondjuk az E oszlop) 2. sorába írod a függvényt =TNÉV(A2), amire megjelenik a kívánt eredmény. Ezután lefelé kitöltéssel végighúzod a függvényt az E oszlopon az utolsó használt sorig.
Ha ezután az A oszlopban szeretnéd látni az eredményt, akkor az E oszlopot másolod, és az A oszlopba irányított beillesztéssel beilleszted csak az értéket. Ezután törölheted a függvényt tartalmazó E oszlopot.
Még egy kérdéssel kiegészíteném: "...a fennmaradt összeget az F összegből vonja ki." Hogyan készül az "F összeg? Ez tényleg összeg? Mert ha az F oszlopban eleve egy képlet van, ami összegez bizonyos adatokat, akkor annak ismerete nélkül eleve nehéz lesz úgy kivonni belőle egy számot, hogy ne sérüljön a képlet.
A C oszlopból akarom kivonni a D oszlopot. Ha a D nagyobb lenne, akkor kellene az E oszlopban 0 érték és a fennmaradt összeget az F összegből vonja ki.
A C oszlopból akarom kivonni a D oszlopot. Ha a D nagyobb lenne, akkor kellene az E oszlopban 0 érték és a fennmaradt összeget az F összegből vonja ki.
Ezt a válaszodat nem egészen értem. Viszont adtál egy jó ötletet a makró nélküli megoldáshoz. A javaslatod nélkül nem tudtam volna megtalálni. Szóval:
A táblázat 2. sor L oszlopába beírom tömbképlettel a következőt: {=INDEX(B2:K2;HOL.VAN(HAMIS;B2:K2=0;0))},
a 2. sor M oszlopába pedig ezt: {=INDEX(B$1:K$1;HOL.VAN(HAMIS;B2:K2=0;0))}
Ezután a fenti két oszlop adataival lefelé kitöltve a táblázatot a teljes táblázatban érvényesül a képlet.
Ha a kérdező még egyszer idetévedne (amire sajnos kevés esélyt látok:-(((), akkor szívesen elmagyarázom, hogyan tudja a 2. sorban a tömbképletet alkalmazni.
Én csak egy példát adtam, ami szerintem rászabható másra is.
Egyébként meg az emberek a saját koncepciójuk szerint kérdeznek - és eleve a saját szubjektív koncepciója szerint is kéne válaszolni. Ez meg azért rossz, márt általában az a saját koncepció eleve szar. (Már bocs)
Igazad van, és én is töprengtem egy darabig a függvénnyel történő megoldáson. Sajnos nem találtam olyat, ami erre a feladatra alkalmas lett volna. A HOL.VAN függvénnyel az volt a bajom, hogy a leírás szerint rendezett tömbben dolgozik. Itt pedig a tömb rendezetlen. Így kínomban írtam a makrót, nem mindenáron.
Ugyanis nem az A2:A26 tartományban kell keresni az első nullától eltérő adatot, hanem a B2:K2 tartományban. És ha erre tudnék olyan függvényt, amelyik megkeresi a sorban az első nullától eltérő adatot, akkor azt használnám. És akkor nem is kellene a tömbfüggvény, hiszen a következő sorban a B3:K3 tartományban keresünk, így elég kitölteni lefelé a függvényt.
számomra egy nagyon idegesítő dolog van az excelben ami elég logikátlan nem tudom mire jó és nem tudom hogyan tudnám kikapcsolni. Gyorsan dolgozok, gyorsan kattintok a cellákra hogy kitültsem őket, viszont amikor véletlenül a rács vonalra kattintok a cella helyett akkor elugrik véletlenszerűen valahová messze máshová a kijelölés több száz cellával arrébb. Nagyon bosszantó főleg egy 5000 bejegyzéses munkafüzet esetén. Mi ez a funkció és hogyan lehet kikapcsolbni? Próbáljátok ki nálatok csinálja e.
A "mindenre makró" megoldásokkal az a baj, hogy egy vállalati, sokfelhasználós környezetben nem előnyös.
Amolyan "ágyúval verébre"...
Ráadásul akinek használnia kell ezeket - általában nem érti a működését, megnyitáskor mindenféle (biztonsági) dolgot kiírhat - amit megint nem minden felhasználó ért.
"ami ha nagyobb mint az E oszlopban, akkor ott legyen 0"
Ez körkörös hivatkozásra vezet (ti. az E oszloppal összehasonlítod, majd ennek eredményétől függően az E oszlopot nullává teszed, tehát bele_Nyúlsz abba, amivel hasonlítasz - ez egy ördögi kör, amit az Excel (magyarul) "körkörös hivatkozás"-nak nevez).
Arra szeretnék képletet találni, hogy ha a D oszlopba írunk egy számot ami ha nagyobb mint az E oszlopban, akkor ott legyen 0, a a maradékot pedig az F oszlopból vonja.
Dim kezdosor As Long, utolsosor As Long, sor As Long, oszlop As Long
kezdosor = 2
utolsosor = Range("A" & Rows.Count).End(xlUp).Row
For sor = kezdosor To utolsosor
For oszlop = 2 To 11
If Cells(sor, oszlop) > 0 Then
Cells(sor, 12) = Cells(sor, oszlop)
Cells(sor, 13) = Cells(1, oszlop)
Exit For
End If
Next oszlop
Next sor
End Sub
Elindítás után végigmegy a táblázaton, és minden sorban kitölti a 12. és 13. oszlopokat.
Mivel a mintából nem derült ki, hogy a táblázat a munkalapon hol helyezkedik el, feltételeztem, hogy a fejlés az 1. sorban van, és az adatsorok a 2. sortól kezdődnek, a szeriálok pedig az A oszlopban vannak, a hetek a B-K oszlopokban, kitöltendő pedig az L és az M oszlop.
Egy kis segítséget szeretnék kérni! Adott egy táblázat (gyártási terv), amely különböző modellek tervezett mennyiségeit tartalmazza heti bontásban (lásd oszlopcím W1, W2...)
Szeretném kinyerni belőle soronként az első, nem 0 értéket (magyarán tehát az adott modell első gyártási hetének mennyiségét) illetve megjeleníteni a hozzá tartozó hét számát.
Talán az alábbi példa jobban mutatja, mire gondolok:
Az alábbi táblázatban azt szeretném elérni, hogy +, - oszlopokat automatikusan számolja és töltse ki, ha beírom a tényleges időt. Előre is köszönöm az ötleteket.
Szívesen. És a 28538-as hozzászólásban belinkelt könyvet megtaláltad? Persze nekem könyv formában is megvan, így azért könnyebb volt tanulni belőle, mint egy pdf fájlban olvasva. Például tudtam bele jegyzetelni is.
Azt a legkisebb dátumot keressük, ami a kiindulási dátumnál legalább 15 naptári nappal több és munkanap.
Mai lecke: Adatbázis függvények :-)
A:C oszlopok tartalmazzák az adatbázist, E2 a kiindulás nap, F2 az eredmény, H1:I2 a keresési feltételek.
F2 tartalma egy adatbázis függvény: =AB.MIN(A:C;"Dátum";H1:I2), azaz az A:C oszlopokban található adatbázisból keresem azt a legkisebb dátumot, ami megfelel a H1:I2 mezőkben leírt feltételeknek.
H2 tartalma: = ">=" & (E2+15)
H1:H2 értelme: a dátum legalább 15 nappal legyen nagyobb az E2 értékénél (ne zavarjon, hogy számként jelenik meg a dátum)
Azzal kezdem, hogy nem lett volna szükséges az egy munkalapra való másolás. Csak ebben az esetben a feltétel oszlopokat tartalmazó munkalapra kellett volna tenni a kódot, és a kódnak kellett volna a szűrést a szűrendő adatokat tartalmazó munkalapon elvégeznie. Ehhez kellett volna tudni a nevét. De nem is kellett volna tudnom, elég lett volna erre is bevezetni egy változót, amit magad tölthettél volna ki.
De ha már így alakult, akkor megírtam az egy munkalapos változatot. Amit írtál, az nekem túl bonyolultnak tűnik. Ezért egyszerűsítettem. Továbbra is van egy neveket tartalmazó oszlop (az sem baj most már, ha függvény írja bele a nevet), és van egy céloszlop, ahova szűrünk. Aztán van két oszlop, ami a feltételeket tartalmazza. Ezeknek most A, B, C és D neveket adtam, majd Te érvényesíted a feladathoz alkalmazva.
Ha a feltétel oszlopok bármelyikében változás történik, akkor újra elvégzi a szűrést. Ez arra is jó, hogy ha egy korábban szereplő név megszűnik, akkor a szűrt állományból is eltűnik.
Még annyit, hogy ha az Exceled kód területén az első sor - Option Explicit - már megvan, akkor azt nem kell ismét bemásolni. (Ez csak azt biztosítja, hogy ha mellényúlsz, és véletlenül átírod az egyik változó nevét, akkor figyelmeztet, és nem kell keresgélni, hogy mitől működik hibásan a program.) És akkor a kód:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim utolsosor As Long, nevoszlop As String, celoszlop As String, felt1oszlop As String, felt2oszlop As String
nevoszlop = "A" ' Itt vannak a nevek (név1, név2, név3 stb.)
celoszlop = "B" 'Ide szűrjük a név oszlop adatait
felt1oszlop = "C" ' A feltételt tartalmazó egyik oszlop
felt2oszlop = "D" ' A feltételt tartalmazó másik oszlop
If Target.Column = Cells(1, felt1oszlop).Column Or Target.Column = Cells(1, felt2oszlop).Column Then
' Csak akkor szűrünk, ha a feltétel oszlopok valamelyike módosult
utolsosor = Range(nevoszlop & Rows.Count).End(xlUp).Row ' A név oszlop utolsó sorát megkeressük
Azt még elfelejtettem, hogy legtöbbször a későbbi-korábbi értékek módosulnak a B oszlopban, ez alapján kellene frissülnie az ismétlődés eltávolításos listának. Nagyon köszönöm!
Az azonos munkalapra másolás nem probléma, csak akkor távolabbi oszlopokba teszem majd a képletet, és akkor a makróban is átírom a két oszlop betűjelét.
Az adatokat sajnos nem másolhatom ki, de megpróbálom a lehető legjobban vázolni a szituációt:
A oszlop: lényegtelen
B oszlop: a ha függvény egyik feltétele, vagy a "későbbi" vagy a "korábbi" értéket veszi fel (nekünk a későbbi kell)
C-H oszlop: lényegtelen
I oszlop: a ha függvény másik feltétele, vagy 0, vagy pozitív egész szám (nekünk a 0-nál nagyobb kell)
J-AN oszlop: további adatok, lényegtelen
A ha függvény lehetne pl. AT oszlopban, a feltételek teljesülése esetén J oszlop adataira van szükségünk,
AT1: cím,
AT2: 0,
AT3 és onnan tovább mondjuk 5000-ig: =HA(ÉS(A3="későbbi";I3<>0);J3;0)
Tehát az AT-be kerülnének a korábban már vázolt név1, név2, név3 stb értékek ismétlődve, és melléjük az AU-ba mehetne az ismétlődések eltávolításával kapott lista. A munkalap neve lehet bármi, módosíthatjuk bármire, nem lényeges.
Segítséget szeretnék kérni. Lenne egy feladat, amivel már tegnap zavartalak Benneteket, de továbbra sem boldogulok sajnos vele. Most jutottam el addig, hogy pontosabban meg tudom fogalmazni a kérdésem :)
Egy napon (0. nap) beérkezik egy e-mail, mellyel teendője van a munkatársnak. Az adott feladatra 15 naptári napja van.
Feltételek:
1.)Amennyiben a határidő 1. napja NEM munkanap, akkor a határidő kezdete az azt követő első MUNKANAPPAL indul.
2.)Amennyiben a határidő 15. napja NEM munkanap, akkor a határidő vége az azt követő első MUNKANAPPAL végződik.
Kérdésem, hogy lehet ezt megoldani úgy excellel? (a 15 napon belüli nem munkanapok a 15 napba bele számítanak!)
Továbbra sem vagyok gyakorlott excelben, de még mindig tanulékonynak mondom magam :) kérem szépen segítsetek!
Természetesen. Csak akkor a készülő makrót arra a munkalapra kell tenni, amelyiken a feltételek változnak, továbbá tudnom kellene a vizsgált feltételt, valamint annak a munkalapnak a nevét, amelyiken a szűrést végezni kell (ahol most a makró van).
A legegyszerűbb lenne, ha néhány sort kimásolnál a munkafüzetedből (ha bizalmasak az adatok, akkor átírva, ahogy most is tetted a név1, név2 stb. stílusban), és elérhetővé tennéd google drájvon, vagy valamelyik feltöltő oldalon (pl. data.hu).
Mostanában volt egy hasonló esetem. Nálam simán lefutott a makró, de akinek írtam, annak a nagyon gyors gépe miatt ugyanez az eset állt elő, mint amit említesz.
A ciklusba beiktattunk egy várakozást.
Application.Wait (Now + TimeValue("0:00:01"))
Ez persze lelassította a folyamatot, több ezres ciklusról lévén szó. Az
Application.Wait (Now + TimeValue("0:00:00"))-ra módosítás után minden rendbe jött.
Egy olyan gondo lenne, hogy megírtam egy makrót, amit ha F8 folyamatos lenyomásával futtatok le, akkor nem akad meg és lefut rendesen, viszont ha a F5-tel akarnám egyben lefuttatni, akkor megakad mindig. A probléma egy calcaulte és egy refreshall parancs környékén jelentkezik. Mi lehet a gond, hogyan lehet orvosolni?
a bemenő adatokat, A oszlopban minden cellában egy függvény adja, ami egy másik munkalapon soronként megvizsgál két feltételt, majd azok teljesülése esetén átírja a sor egyik elemét az A oszlopba, hamis ágon egy nullát ír. Amikor ez eredeti munkalapon módosítom a vizsgálati feltételt tartalmazó cellát, és emiatt a ha függvény hamisról igazra vált, az A oszlopban megjelenik egy új érték a nulla helyett, ekkor viszont a makró nem "számol" újra, és továbbra is a feltétel nem teljesülése esetén adott lista látszik a B oszlopban. Ha az A oszlopban kézzel végrehajtok valamilyen változtatást, akkor természetesen már megjelenik a ha függvény miatt módosult érték is B oszlopban, de egészen addig, amíg manuálisan nem nyúlok A oszlophoz, addig B változatlan marad. Van tehát arra valamilyen megoldás, hogy ha egy másik munkalapon módosítom a cella tartalmát, akkor a makrózotton újra lefusson a makró?
Akkor még az volt a címe, hogy az Excel'97 programozása. És ahogy írja is a szerző, az alapokból, ami a könyvében szerepel nagyon kevés változott. Aztán az elmúlt 5 évben nagyon sok adódott hozzá az ismereteimhez ezen a fórumon.
Köszönöm szépen, holnap ezt is ki fogom próbálni! Igazából már végső elkeseredésemben kerestem rá excel fórumra, nem gondoltam volna, hogy ilyen gyorsan megoldódik majd a probléma, még egyszer nagyon köszönöm mindenkinek a segítséget!
Másold be az alábbi kis makrót annak a munkafüzetnek a programkódjaként, amelyikben az adataid vannak. Ez a munkaoszlop bármely cellájának módosításakor elvégzi a szűrést. Egy feltétele van: Az első sorban nem lehet tényleges adat, hanem egy címnek kell szerepelnie. Enélkül az első sorban lévő adatot tekinti címnek.
A másoláskor a címet átmásolja a célterület első oszlopába. Ha viszont utólag módosítanád ezt a címet, akkor előzőleg töröld ki a célterületet, mert hibát jelez, ha eltér a forrás és a célterület címe.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim utolsosor As Long, oszlop As String, celoszlop As String
oszlop = "A"
celoszlop = "B"
If Target.Column = Cells(1, oszlop).Column Then ' Csak a megadott oszlopban nézzük
Átmásolás előtt javítsd át a 3. sorban az oszlop= után álló betűt arra az oszlopra, ahol az adataid vannak! Aztán a következő sorban a céloszlopot arra, ahova másolni akarsz!
Ha nem tudod, hogy kell bemásolni a kódot, akkor a teendőd a következő: Alt + F11-et megnyomod. A képernyő bal felső részén kell látnod a munkalapjaid nevét. Annak a munkalapnak a nevére, amelyiken az adataid vannak kattints kétszer. Ekkor valami ilyesmit látsz: Itt most a Munka1 lap kódterületét látod, ezért van szürkítve a Munka1 neve.
A jobboldali kockába másold a kódot. Aztán ismét Alt + F11, és visszatérsz a megszokott Excel képernyőre. Aztán a fájlt mentsd le .xlsm kiterjesztéssel. Ez a makróbarát munkafüzet. Enélkül nem enged az Excel programot tartalmazó munkafüzetet menteni.
És ha ezután új adatot írsz be, vagy módosítod valamelyiket a forrás oszlopban, a célterületen azonnal megjelenik a szűrt lista.
A meglévő A oszlopot átmásoltam az E oszlopba, ott hajtottam végre az ismétlődések eltávolítását. Ezt 1× kell elvégezni.
A laphoz rendeltem egy makrót. Mikor az A oszlopba új adatot viszel be, megnézi, szerepel-e már az E-ben. Ha nem, a végére írja.
A makró:
Private Sub Worksheet_Change(ByVal Target As Range) Dim ide As Long If Target.Column = 1 Then If Application.WorksheetFunction.CountIf(Columns(5), Target) = 0 Then ide = Range("E" & Rows.Count).End(xlUp).Row + 1 Cells(ide, "E") = Target End If End If End Sub
Laphoz rendelés: lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe, jobb oldalon egy nagy üres felülettel. Oda kell bemásolnod a fenti makrót. A füzetet makróbarátként (xlsm kiterjesztéssel) kell elmentened.
Én egy olyan segédtáblát vennék fel, ami csak a munkanapokat tartalmazza:
És a keresett képlet:
=INDEX(A:A; HOL.VAN(DÁTUM(2016;4;9);A:A;1) +5)
A hol.van függvény megkeresi a kiindulási dátummal megegyező (vagy, ha az nem munkanap, akkor az előző) munkanapot és hozzáadja a keresett értéket (nálam most 5-t)
2016.04.09 (szombat) helyett a 2016.04.08-t pénteket veszi kezdődátumnak és ahhoz adja hozzá a napokat: 1 esetén megtalálja 2016.04.11-t, 5 esetén 2016.04.15-t.
ez a művelet a teljes számolási folyamatnak nagyjából a közepén van, ráadásul egy teljesen másik lapon, mint amin az eredmények megjelenítésére szükség lenne. Egyébként nem lenne gond, ha maradna a kb 3200 cella ebben az oszlopban, csak ezekkel később cellánként újabb 3000 függvényt kell kiszámoltatni, ami már nagyon lelassítja a gépet. Ha viszont sikerülne végigszűrni ezt a 3200 cellát, és kiszűrnénk az ismétlődést, akkor maradna nagyjából 50-100 cella, amivel már lényegesen könnyebben végezhető a cellánkénti 3000 függvény.
Az első oszlop eredményét egy ha függvény eredménye adja. A hozzáírás, újraszámolásnak azonnal meg kell történnie, amint egy új érték kerül az oszlopba.
Nincsenek elírt nevek, és nincs olyan sem, hogy egy név több személyt takarna. Ezek igazából nem nevek, csak példaként írtam így, hogy név1, név2, stb. úgy is fogalmazhattam volna, hogy szó1, szó2, szó3, stb.
Office Professional Plus 2013-at használok.
A makrókat végképp nem ismerem, ezt hol lehet megtanulni?
Segítséget szeretnék kérni. Lenne egy feladat, amivel nem boldogulok. Van egy dátum adatbázisom, amiben cellánként jelölöm a szombatokat, vasárnapokat, munkaszüneti napokat, áthelyezett munkanapokat, áthelyezett munkaszüneti napokat. Valamint van egy másik táblázatom, ahol bizonyos cselekményekhez tartozó dátumokat kell rögzítenem, és ahhoz adva bizonyos számokat ki kell számolja a táblázat, hogy pl. 2016.04.08. plusz 1 nap az mikorra esik. Eddig ez számomra is könnyű. A problémám ott van, hogy szeretném, ha a táblázatom magától kiszámolná azt, hogy ha valami szombatra vagy vasárnapra esik, akkor mi a következő munkanap és már csak azt jelölné az adott cellában, illetve meghagyná a plusz 1 nappal való számítást, ha az adott nap munkanapra esik.
Az előbbi példánál maradva 2016.04.08-at (szombat) rögzítve plusz 1 nappal számolva nem 2016.04.09-et (vasárnap) jelölne, hanem 2016.04.10-et (hétfőt). Próbálkoztam egy másik példát elővéve ezzel a képlettel: =HA(VAGY((E2+5)=(DÁTUMÉRTÉK("2016.04.16"));(E2+5)=(DÁTUMÉRTÉK("2016.03.27")));(E2+7);(E2+5)); de egyesével beírva minden egyes nem munkanapra hogy DÁTUMÉRTÉK... stb., sajnos nem megy, mert a cellába írható karakterek száma lekorlátoz.
Mint látszik, nem vagyok gyakorlott excelben, de tanulékonynak mondom magam :) kérem szépen segítsetek!
Ha egyszer-egyszer kell ilyent csinálni, akkor azt szoktam, hogy felveszek egy segédoszlopot, ahol kb. azt vizsgálom egy HA függvénnyel, hogy a vizsgált oszlopban két egymás alatti cella egyezik-e (valami ilyesmi: =HA(B2=B1;0;1), és ezek közül természetesen az 1 eredményűek kellenek).
Majd aztán autoszűrővel leszűröm és látom, mely sorokat kell törölni.
Ez nem is olyan egyszerű, mint amilyennek gondolod. Makró nélkül az ismétlődések eltávolítása a leggyorsabb és legegyszerűbb megoldás, ami természetesen több ezer sornál is működik - ha már megvan a többezer sor, miért nem lehet ezt használni?
Hogyan jön létre az első oszlop?
Mikor kell a második oszlophoz az elsőben egyedi adatot hozzáfűzni? Amikor beírod a cellába, akkor azonnal vagy elég egy csapat új név beírása után?
Másrészt - mit csinálsz az egyébként azonos, de elírt nevekkel, az azonos nevű, de különböző személyekkel?
Milyen Excel verziót használsz?
Makróval nagyon sok variációt lehet kezelni - de kérdés, hogy lehet-e makrózni nálatok, továbbá jó lenne pontosítani a feladatot legalább az előzőekben feltett kérdések alapján.
egy viszonylag egyszerűnek tűnő feladatot már órák óta nem tudok megoldani:
Adottak a következő adatok (egy oszlopban):
név1
név2
név2
név3
név1
név1
név4
név4
név4
név4
amiből a következő oszlopot szeretném megkapni:
név1
név2
név3
név4
0
0
0
0
0
0
Tehát minden ismétlődés legyen eltávolítva, az új oszlopban minden név csak egyszer szerepeljen. Az ismétlődés eltávolítása nem játszik, mert arra külön rá kell kattintani, külön ki kell jelölni a tartományt, stb. A lényeg az lenne, hogy amikor az első oszlop létrejön, automatikusan létrejöjjön belőle a második, új oszlop, és ne kelljen kijelölni, és az ismétlődés eltávolítása gombra kattintani (a sorok száma több ezer).
Ha valakinek volt már hasonló problémája, vagy tudja a megoldást, akkor kérem segítsen, előre is köszönöm! Üdvözlettel: Attila
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) defaultColor Me.CommandButton1.BackColor = &HC0C000 End Sub
Private Sub CommandButton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) defaultColor Me.CommandButton2.BackColor = &HC0C000 End Sub
Private Sub defaultColor() Me.CommandButton1.BackColor = &H4080& Me.CommandButton2.BackColor = &H4080& End Sub
Nézd meg lsz, hogy a Commandbutton MouseMove eseményében el tudod-e intézni ezeket a kívánságokat. A színváltást szerintem biztos - bár az elvételkor pedig a visszaváltást kellene megoldani nyilván.
Van-e lehetőség userfomban levő commandbutton -ok fölé viszem az egeret és klikk nélkül autmatikusan szint vált? Ha a színt választhatók az még jobb lenne. A gombok nem léteznek a formban azokat a form megnyitásakor generálom. Működésüket classmodul biztosítja.
A CSV-t nem akarom bántani, mert azt folyamatosan írja pendrive-ra az inverter.
Azt csináltam végül, hogy az "összetermelés.xlsx"-ben lévő kimutatásba beraktam még egy számított értéket, ami a termelt mennyiség konstans számmal való osztásával jön ki. Ezek után pedig már "gyerekjáték" volt megcsinálni a min és max kimutatásokat.
"TL001_01.CSV" -> Ebből generálódik a "össztermelés.xlsx" file. A "kimutatás.xlsx" alapja "össztermelés.xlsx."
A "TL001_01.CSV" egy inverter LOG file-ja, amibe 5 percenként lementi a termelési adatokat. Ebből készül az "össztermelés.xlsx" filen-ban a termelés, ahol a CSV alapján naponta összegzi a termelt mennyiséget a kimutatás. Plusz hó végén a villanyóra állások is rögzítve vannak, így tudom nyomon követni a fogyasztást és a (plusz)termelést.
A "kimutatás.xlsx" file-ban különböző statisztikai célt szolgáló kimutatás diagramok vannak.
Jött az igyényem, hogy jó lenne látni táblázatban, hogy adott év adott hónapjában mennyi volt az össztermelés.
Szintén ide került hogy adott év/hónap-ban a napi maximum, és egy másik kimutatásban pedig a minumum jelenjen meg.
Ezek mind szépek és jók, de "sorstársaim" ötlete/kérése volt, hogy a rendszer teljesítményével, ha elosztom a maximum és minimum értékeket, akkor más rendszerekkel is jobban összehasonlíthatóvá válik. Nos, ez utóbbival nem boldogulok.
Semmiképp sem szeretném, ha más oldaná meg helyettem, jobban szeretném, ha iránymutatásokat kapnék. Sajnos a számított mezővel nem tudtam megoldani, mert vagy az adott hónap össztermelését osztotta a konstans számmal, vagy a maximumot/minimumot kaptam ismét.
A képről nem tudni, hogy milyen beállítások vannak a kimutatásodban - és így nehéz segíteni. Továbbá az adatok struktúrája is ismeretlen.
Próbáld kombinálni a mező összegzésnél (Értékösszegzési szempontok) a MAX-ot vagy Összeg-et használni. A Számított mezőben pedig MAX(mezőneve) / osztó függvényt, elosztva a konstans számoddal.
Sajnos makró témában nagyon kezdő vagyok, ezért lenne 2 kérdésem a hozzáértőkhöz.
1: Adott egy tartomány, dátumokkal, hetek napjaival, üres mezőkkel. Azt szeretném megoldani, hogy azok a sorok amiben szerepel a szombat, vasárnap, szürkével legyenek kitöltve A-tól I-ig bezárólag.
2 Adott ez a tartomány: Itt arra lenne szükségem, hogy legördülőmenüből kiválasztom a nevet, és az alatta lévő adatok automatikusan kitöltődjenek. Jelenleg azok is legördülőmenüből választhatók ki, csak szeretnék egyszerűsíteni. Van-e erre megoldás?
Két rövid makróval beírathatod a hivatkozásokat az összesítő füzetedbe. Amit módosítanod kell:
az első makróban az FN (fájlnév) változóban a saját 6 füzeted nevét add meg az "Excel munkafüzet 1" ... "Excel munkafüzet 6" helyett, a másodikban a
Range(Cells(ide + 1, 1), Cells(ide + sorok - 12, 17)) = "='[" & FN & ".xlsx]Munka1'!A13" sorban a Munka1 helyére írd be a 6 füzetben lévő (remélhetően azonos nevű) lapod nevét.
Amennyiben az összesítő-, és a 6 füzet nem azonos mappában van, a 2. makróban az útvonalat is meg kell adni.
Sub Fuzetek() Dim ide As Long, FN As String, sorok As Long
Kimutatásvarázslóban a "Több tartomány (összesítés)" lehetőséget választva több különálló adattartományt fel tudsz venni. Így kapsz 4 dimenziót (sor/oszlop/oldal/érték) amelyeket tetszés szerint rendezhetsz egérrel húzogatva.
A másik még az "Összesítés" opció (Adatok/Adateszközök/Összesítés). Azonban ez nem frissül és az azonos sor / oszlop azonosítókkal rendelkező dimenziókat összesíti (Pl ha 5 és 4 van a metszetben, akkor ugyanabban a metszetben ezek összege, a 9 lesz látható. És ez nem frissül, míg az előző igen.
Ha ezek közül egyik sem megfelelő, akkor csak makró...
"jelmagyarázatnak kizárólag az adatoszlop fejléc celláját hajlandó elfogadni, azaz a D5 cellát. Én pedig a B5 cella alatti - az adatoszlopokhoz tartozó - 9 db szöveget tartalmazó oszlopot szeretném jelmagyarázatként beállítani. Úgy, ahogy a lenti színes ábrámon sikerült is. Csak éppen reprodukálni nem tudom az eljárást, ahogy azt megoldottam."
Megoldódott a rejtély. Egészen elképesztő. Amikor kiválasztok egyetlen adatpontot, és elkezdem annak formázását, abban a pillanatban, hogy a kitöltést az automatikusról bármelyik másik lehetőségre változtatom, a vízszintes tengely alatti szövegek átmásolódnak a diagram mellé, lecserélik az eredeti magyarázatot, és ők lesznek a magyarázat. Íme az eredmény:
Bocs, hogy ezzel zaklatlak benneteket, de ez annyira váratlan, megdöbbentő és illogikus, hogy muszáj volt beszámolni róla:-)
A makrórögzítővel az a baj, hogy 1. rengeteg felesleges tulajdonságot is "rögzít" (megad), 2. néhány esetben pedig nem mutatja a közbenső lépéseket :-( a diagramoknál.
Jó bonyolult a diagramhoz tartozó objektumok és tulajdonságok viszonya sajnos.
Én is jól megszenvedtem a diagramos - grafikonos munkafüzeteimmel, de végülis meg lehet oldani, hogy akár ne is látsszon az adott sorozat vonala és jelölője sem, csak az értéket írja ki (erre akkor lehet szükség, ha két tétel összegéből keletkezik pl. az oszlop és a tetejére a kettő összegét íratjuk ki egy harmadik sorozat - ami az összeget tartalmazza - alapján), de még azt is, hogy a jelmagyarázat színe és háttere minden egyes sorozatnál eltérő legyen, minden oszlop más-más színű legyen stb. A lehetőségek szinte végtelenek, annyira, hogy már el is lehet benne veszni.
Köszönöm. Még ez sem tökéletes, de már a jó irányba mutat. Ezzel legalább el tudom érni, hogy az A oszlop számai legyenek az adatoszlopok alatt, és a B oszlop szövegei legyenek a jelmagyarázatban.
Annyi kellemetlenség még van, hogy minden egyes beszúráskor kapok egy-egy kis hasábot az első két adatoszlop között, de azt végső soron el tudom rejteni.
Majd megpróbálom makrórögzítéssel elemezni a feladatot pontosabban, hátha makróval könnyebben kezelhető lesz.
"...a sorozatok száma és a hozzárendelhető neveknek azonos db-számúaknak kell lennie."
Ezzel nem lenne gond, mert teljesül. Csak a képen hibáztam el, mert kijelöltnek látszik a teljes A1:D22 tartomány, holott csak az A5:D22 alapján készíteném a grafikont.
Az Adatok kijelölése menüpontot megtaláltam, de az vele a bajom, hogy jelmagyarázatnak kizárólag az adatoszlop fejléc celláját hajlandó elfogadni, azaz a D5 cellát. Én pedig a B5 cella alatti - az adatoszlopokhoz tartozó - 9 db szöveget tartalmazó oszlopot szeretném jelmagyarázatként beállítani. Úgy, ahogy a lenti színes ábrámon sikerült is. Csak éppen reprodukálni nem tudom az eljárást, ahogy azt megoldottam.
Most nekem is van egy gondom. Diagramot kellene készítenem, és abban nem vagyok jártas. Az adattáblázat valami ilyesmi:
Szeretnék ebből oszlopdiagramot készíteni úgy, hogy az X (azaz a vízszintes) tengely legyen a cím1 oszlop, az Y tengely a % oszlop, és jelmagyarázatként kellene a cím2 oszlop.
Az a vicc, hogy tegnap éjjel a próbálkozásaim során egy hasonlót véletlenül el tudtam érni. A cím2 oszlopot sikerült jelmagyarázatként elhelyezni a diagram jobb oldalán, de ekkor az X tengelynek nem voltak feliratai. Az eredmény valami ilyesmi volt:
A helyzet az, hogy mára már arra sem emlékszem, hogyan értem el azt, hogy jelmagyarázatként a cím2 oszlop adatai jelenjenek meg. Ma órákat töltöttem el vele, és képtelen vagyok reprodukálni. Az meg különösen bosszant, hogy a vízszintes tengely alá nem tudom a cím1 oszlop értékeit felvetetni.
Az Excel 2003 alatt még volt diagram varázsló, és azt hiszem, ott az ilyeneket meg lehetett oldani. Pontosabban meg lehetett adni, hogy a jelmagyarázat tartalma mi legyen.
Tudtok segíteni, vagy legalább valami szakirodalmat ajánlani, ahol ezek érthetően le vannak írva?
A Workbooknak van egy Colors nevű tulajdonsága, ami tartalmazza az egyes colorindexekhez tartozó színeket - összesen 56 db-ot. Ezeket a színeket át lehet definiálni, ha a megfelelő indexhez beírod az általad kívánt szín számát.
"Ha viszont a Color-t állítom be (akár az RGB függvényt használva, akár konkrét számmal), akkor minden esetben ugyanaz a szín fog megjelenni."
Teljesen igazad van, csak itt most egy nagyon egyszerű mintát akartam megadni két színnel, ezért nem foglalkoztam az RGB, illetve a konkrét color érték kezelésével.
Viszont a "színsor" beállítási lehetőség nekem új. Eddig nem ismertem. Elmagyaráznád?
Remek ötletet adtál a feltételes formázással: ha van a soroknak száma, akkor felvennék egy segédoszlopot, ahol a sorszámot maradékosan elosztanám 24-gyel. Ha a maradék 0, akkor azt a sort feltételes formázással beszinezném, ezzel jelezve egy-egy blokk végét. Ezzel megspóroltam a makróírást. :)
Mivel a másoláshoz kell tudni, hol vannak a 24 soros egységek, szerintem elég 1 sort színezni. Adatbevitelkor kék hátteret ad minden 24. sor A:D cellának a laphoz rendelt makró.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row Mod 24 = 0 Then _ Range("A" & Target.Row & ":D" & Target.Row).Interior.ColorIndex = 33 End Sub
Egyébként csináltam is egy kis makrót hozzá. Annak a munkafüzetnek a kódterületére másold be az alábbi makrót, amelyiken dolgozol. A program a kitöltés során színezi a K és L oszlopokat. Mivel nem akartam túlbonyolítani a programot, feltétel, hogy az egyes sorokat kihagyás nélkül töltsük fel. Ha a sor bármelyik adatát kitöltjük (lehet akár 0, vagy szóköz is), akkor színezi az adott sor két celláját:
Megjegyzés: A 3. és 4. sorban lévő zöld és piros színkód helyett tetszés szerinti színpár írható. Pl. -4142 esetén az egyik szín a színezés nélküli kitöltést jelenti, a 33 a kék stb.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim eddigiszin As Long, egyikszin As Long, masikszin As Long
Off: Feri, időközban olvastam amit írtál. Igazad van, a feltételes formázás tényleg egyszerűbb, de ha már elkezdtem megírni a makrót, akkor nem volt szívem, nem beírni.
Ha ugyanabba a cellába szeretnéd a hozzáfűzést, akkor makróval. Ha új cellába, akkor az összefűz függvényt lehet használni (illetve ezt rövidíti az & jelölés - =A1 & A2 az a1 és a2 cella összefűzése az eredmény).
Feltételes formázás képlettel: =PÁRATLANE(INT((SOR()-1)/24)) kitöltést beállítani, beszínezi minden második 24-es blokkot, szinezés a második 24 sorral kezdődik
=PÁROSE(INT((SOR()-1)/24)) kitöltés beállítva - beszínezi minden második 24-es blokkot, a szinezés az első 24 sorral kezdődik.
Két színt lehet így felváltva alkalmazni, vagy pedig szinezett - nem szinezett blokk verziót.
Ami pedig a szín kitöltést illeti, szerintem makró nélkül nem fog menni. Legalábbis én nem ismerek olyan függvényt, ami a színeket olvasni, vagy módosítani tudná. A feltételes formázás ugyan be tudja állítani a színt, de nem hinném, hogy a 24 soronkénti váltogatás megoldható lenne.
Egyébként, ha a makró megfelel, akkor kérdés, hogy elegendő, ha csak azt kéred, hogy oda/vissza váltogassa a színt? Azaz mondjuk az első 24 sor ne legyen színes, a következő 24 mondjuk piros, aztán ismét színezés nélküli, aztán megint piros, és így tovább? Mert ha így nem jó, akkor meglehetősen komplikált lenne egy nagy táblázatban mindig új színt keresni.
Egy xls-ben adatok vannak A-G oszlop között. Azt szeretném elérni, hogy K-L oszlopban megjelenjenek az A és G oszlop azon adatai amelyek G oszlopban nem nullák. Továbbá az is jó lenne Ha a K-L oszlopban 24 soronként különböző színkitöltéssel jelennének meg az adatok, mert 24 soronként tovább kell másolnom innen.
Nekem még mindig az a gondom, hogyan jeleníthető meg időformátumban 39:00 (39 óra)
Azt írod, összeadás eredménye ...
Megpróbáltam összeadni 19:00 (19 órát) és 20:00 (20 órát)
A1-ben van 19:00, B1-ben 20:00, C1=A1+B1 és azt írja ki ez a buta Excel, hogy 15:00
D1-nek "n ó:pp" formátumot adtam és ott 1 nap és 15 óra jelent meg (24óra +15óra = 39óra).
Van erről itt egy kép:
(Jé... itt úgy látszik megjelenik egész képként, nem úgy mint korábban, ahol csak rákatt-ra volt látható. Na ez még csak a hozzászólás írásakor látszik így, majd kiderül ...)
Persze tudok 39:00-t is egy cellába varázsolni, de ez nem idő ...
De nincs egy egyszerűbb módszer, hogy valahogy negatív időtartamot tudjak kicsikarni?
Csodálkozom és értetlenkedek ezen, hogy az Excel így kezeli ezt :-/ Miért olyan hihetetlen, hogy negatív előjelű legyen egy idő? Persze filozófálhatnánk róla.... De ha valami művelethez hiányzik x idő, akkor ott negatív előjellel jeleníteném meg.
Hogyha az órákat tizedesvesszővel jelölöm, akkor is kell átalakítás a műveleteknél, hogy pl a 14,5 az 14:30-at jelent. De igazából nem szeretnék tizedesvesszősre áttérni. Na de ha nincs más, akkor lehet, hogy mégis a leírt függvényt fogom használni.
Ok. Nálam úgy működött, hogy első körben =A1-A2 negatív esetben jött a sok #, ha utána átírtam =Abs(A1-A2)-re, óraformában jelent meg - persze a negatív előjel nem volt ott, ezt szerintem feltételes formázással lehetne esetleg szembetűnővé tenni.
Szerintem elég az Abs(A1-A2) is, ha a cellaformázás be van állítva [óó]:pp-re (a kivonási műveletnél egyébként az eredménycella "örökli" a bemenő cellák formátumát az excelnél, tehát nem is kell állítani rajta).
Valahogy meg lehet azt csinálni, hogy amikor elmentem az excel táblámat, akkor ő csináljon automatikusan egy .html file-t is? Tehát gyakorlatilag mentés másként--->weblap, viszont az nagyon fontos lenne, hogy csak azt a részt csinálja meg html-be, ami ki van jelölve. Jah és az lenne a legjobb, ha ezt a html file-t tudnám oda menteni, ahová akarom, nem pedig az excel mellé. Nem tudom, hogy ez megoldható-e, de gondoltam megkérdezem.
Egyszer dolgoztam egy olyan helyen, ahol fizetési felszólításokat kellett kiküldeni azoknak, akik már 60 napja nem rendezték a hátralékukat. Nagyon egyszerű volt: adatbázis a célprogramból kiexportál Excelbe, onnan körlevél Wordbe és mehet a nyomtatás, utána borítékolás, címke nyomtatása, tértivevény kézzel megírása stb.
A gond az volt, hogy egy adott oldalszámnál nagyobb oldalszámot nem tudott kezelni a Word (talán a 2003), kétfelé kellett venni (A-P és Q-Zs tartományokra, ha jól emlékszem). Konklúzió: hiába fért volna még "kilóra" anyag abba a doksiba, valahol mégiscsak túlcsordult egy tárolója. :-)
Egy történet: A kutató vizsgálja a százlábút. Kitépi az egyik lábát, majd rákiált: Szaladj százlábú. Szegényke mit tehet, szalad. A kutató folytatja, majd eljut a 83. lábig, aminek a kitépése után a százlábú már nem szalad, hiába mondja a kutató kétszer is, hogy szaladj százlábú.
Ekkor előveszi jegyzetfüzetét, és a következő feljegyzést írja be: Tehát a 83. láb eltávolítása után százlábú elveszti hallását.
Te is hasonlóan jártál. A Te gépeden egy - ki tudja milyen szerkezetű - fájl méretének növelésekor levontad a következtetést, miszerint a 12. mega elérésekor az Excel fájl összeomlik, ha kompatibilis módon használod. Excel 2007 (vagy 2010) alatt, mert mindkettőt leírtad. Az 1 év 4 hónapos bejegyzésedben a 2010-et, a mostaniban a 2007-et. Még az is lehet, hogy a fájlod sem volt ugyanaz:-)))
A maximális fájlméret pedig egyrészt függ a gépedben lévő RAM méretétől, a disk méretétől, és a processzor sebessége is befolyásolhatja. És az Excel 2003 által kezelhető fájlméret valahol 100 mb környékén lehet (http://help.lockergnome.com/office/Excel-2003-Maximum-File-Size--ftopict865306.html). Ha Accesst használsz, akkor ennél több is lehet.
Meg lehet adni egy cellát, ahová ugorjon ("Dokumentum egy adott pontja") Ez alapértelmezettként A1, amit Neked át kell írnod amikor a hiperhivatkozást megadod.
Meg is van a válasz: 12 megánál (adatok, képletek, grafikonok) a sima xls fájl összeomlik Office2007 alatt. Ha kimentem xlsx-be, akkor a 12 megából 4,5 mega lesz és fut tovább :)
Egy olyan kérdésem lenne, hogy az megoldható-e, hogy egy link megnyitásánál ne az oldal tetejére rakjon, mint normál esetben, hanem a megnyitott oldal egy tetszőleges pontjához, amit persze én állítok be?
Először is el kellene nevezned a képeket - "beszélő név" lenne jó, de az excel által adott név is megfelelő, csak akkor tudnod kell, hogy melyik csapaté melyik kép (segédtábla - első oszlop csapatnév, ahogy a táblázatodban szerepel, második oszlop a hozzátartozó kép neve).
A cella megváltozásakor (sheet_change esemény) a cella új értékének megfelelő kép helyzetét beállítod a cellának megfelelően (kép.top=cella.top,kép.right=cella.left+40 -ezt ki kell tapasztalni, kép.height=cella.height).
Szóval. Van egy excel fájlom, aminek bizonyos cellái csatolva vannak más excel fájlokhoz, tehát minden megnyitásnál rákérdez, hogy frissítse-e.
Gyakorlatilag foci tabellákról van szó. Az egyik munkafüzetben vezetem a meccseket, ebben pedig csak a tabellát frissíti. Ez működik is nincs vele gond.
Viszont szeretnék egy olyan makrót létrehozni, ami a csapatok címereit (egy képet) beilleszti abba a cellába, amiben a csapatok nevei vannak, jobbra igazítva, ugyanakkora méretben, mint maga a cella magassága.
A fő probléma az, hogy minden indulásnál valahogy törölni kéne a meglevő képeket, mert ugye, ha változik a tabella, akkor változik a csapatok helye.
Ezt a változást kéne valahogy követni. Tehát, ha rányomok a frissítésre induláskor, akkor ő ne csak az írásokat frissítse, hanem utána rögtön a képeket is.
Nem tudom mennyire érthető ez így. Ha én elolvasnám ezt, nem biztos, hogy érteném, mit is akarok, de remélem valaki érteni fogja, és esetleg tud majd segíteni...
A cellák, amikben a csapatok vannak: B4:B21, L4:L23, V4:V23, AF4:AF23
Ezt a makrót nem abba a füzetbe tenném a helyedben, ahol a táblázat van, hanem a personal.xls-be (2003-as és az alatti verziókban), ill. a personal.xlsb-be (az újabb verzióknál). Ha van personalod, azt az Excel minden behívásakor megnyitja a háttérben, és a benne lévő makrókat bármelyik füzetedben használhatod.
Ez a cella méretezés pontosan olyan méretűre állítja a sort és az oszlopot, ahogy megadod, mm-ben.
A personal létrehozása: rögzíts egy akármilyen makrót. 2007 előtti verzióban Eszközök/Makró/Új makró rögzítése, 2007-től Fejlesztőeszközök/Kód csoport/Makró rögzítése. Fontos, hogy a makró helyének a listából válaszd az Egyéni makró-munkafüzetben elnevezésűt. Indítod a rögzítést az Ok gombbal, pl. változtasd meg a betű színét egy cellában, majd a rögzítés vége gombbal fejezd be. Létrejött a personal, benne az első makróddal.
Ha egy új makrót akarsz ebben a füzetben létrehozni, Alt+F11-gyel lépj a VB szerkesztőbe. Bal oldalon válaszd ki a personal-t, abban is a Modules-t, benne a kész modult. A jobb oldali helyre írd be az új makrót, amit minden füzetedben alkalmazni akarsz. A personal létrehozásához készített makrót törölheted.
Igen, hasonlo az en gondolatmenetem is azzal, hogy az elejen egy valtozoba betennem a sorok szamat, de ez egy ciklusnak tunik nekem, basic vagy hasonlo programmal oldottunk meg ilyet.
Sorbatenném a tömböket méret szerint csökkenő sorrendbe.
Aztán megnézném, hogy az első sor nagyobb-e, mint a legnagyobb lehetséges sor-szám, ami egy lapra kifér. Ha igen, akkor ezt szétosztom több lapra, aztán a másodikat is megnézem, hogy elfér-e és így tovább, amíg el nem férek legalább egy tömbbel egy lapon.
Ha az első nem nagyobb, akkor elindulok a tömbökön végig és keresek egy akkora tömböt, ami éppen megfelelő méretű, és a kitölt egy oldalt az első tömbbel együtt. (Tehát addig megyek, amíg a "max. sorok száma" - "legnagyobb tömb sorszáma" > "vizsgált tömb mérete" nem teljesül, ekkor a vizsgált tömb megfelelő méretű, ezért hozzácsapom a készülő oldalamhoz.)
Ha marad még hely, mégegyszer végigmegyek és ha találok, hozzáadom azt is a "készülő" oldalhoz. Aztán még egyszer. Igazából annyiszor kell körbemenjek, hogy ne találjak már alkalmas tömböt.
Ez az oldal kész, nyomtatható, több sor nem fér rá a lehetséges tömbök közül.
Elkezdem elölről, ugyanúgy a legnagyobbat biztos felhasználom, aztán keresek hozzá egy megfelelő méretűt.
A lényeg, hogy mindig a legnagyobb tömbtől megyek a legkisebbhez, ezért kellett az elején sorbatenni őket.
Megérzésem szerint csak akkor lesz tömbön belül sortörés, ha a legnagyobb tömbök hosszabbak, mint egy oldal, egyébként nem.
Ha viszont akárhány sortörés lehet, azaz minimális papírigényre törekedtek, akkor egyszerűen egymás alá az összes tömböt, ahol kell sortörés, ott legyen, aztán kész. :) (De ezt akarjátok elkerülni.)
A kettő közötti arany középút nekem magas, legalábbis szerintem túlhalad az én tudásomon.
Vonalzóval megmértem a monitoron. A 3+3+4 szélességű 3 oszlop pontosan 3 cm, a 10-es 2,6 cm.
Készíts egy userformot.
A két gombhoz a makrók:
Private Sub cmdHeight_Click() nHeight = Val(TextHeight.Value) If nHeight <= 0 Then MsgBox "A magasságnak nagyobbnak kell lennie nullánál!", vbExclamation, "Cellaméretek" Exit Sub End If If nHeight > 144.2 Then MsgBox "A legnagyobb sormagasság: 144,2 mm!", vbExclamation, "Cellaméretek" Exit Sub End If
For nArea = 1 To Selection.Areas.Count For nRow = 0 To Selection.Areas(nArea).Rows.Count - 1 Rows(Selection.Areas(nArea).Row + nRow).RowHeight = _ Application.CentimetersToPoints(nHeight / 10) Next nRow Next nArea End Sub
Private Sub cmdWidth_Click() nWidth = Val(TextWidth.Value) If nWidth <= 0 Then MsgBox "A szélességnek nagyobbnak kell lennie nullánál!", vbExclamation, "Cellaméretek" Exit Sub End If nPoints = Application.CentimetersToPoints(nWidth / 10)
If nWidth > 473.6 Then MsgBox "A maximális szélesség: 473,6 mm", vbExclamation, "Cellaméretek" Exit Sub End If
Application.ScreenUpdating = False For nArea = 1 To Selection.Areas.Count For nCol = 0 To Selection.Areas(nArea).Columns.Count - 1 nColNo = Selection.Areas(nArea).Column + nCol
While Columns(nColNo + 1).Left - Columns(nColNo).Left - 0.1 > nPoints Columns(nColNo).ColumnWidth = Columns(nColNo).ColumnWidth - 0.1 Wend While Columns(nColNo + 1).Left - Columns(nColNo).Left + 0.1 < nPoints Columns(nColNo).ColumnWidth = Columns(nColNo).ColumnWidth + 0.1 Wend Next nCol Next nArea Application.ScreenUpdating = True End Sub
A makró a
Sub Cellameretek() 'Indítja a Méretek formot Méretek.Show False End Sub
makróval indítja a formot.
Bocsi, ilyen sok sor normális tagolását most nem vállalom.
Elbutult nálam a VBE, nem csoportosítja a füzet lapjait, a modulokat és formokat, hanem ABC rendben sorolja fel azokat. Nem találom a visszaállítás lehetőségét.
Járt már így valaki, és ha igen, hogy állította vissza?
Symbol nevezetű kód leolvasót vásároltunk. A dobozban volt egy papír, amin különböző kódok voltak, amivel kalibrálni lehetett. Sajnos a magyar nyelvet nem sikerült beállítanom, így angolra van állítva a program használatok a billentyűzet nyelvezete. Utána néztem a Google-ban, sajnos nem találtam érdemi információt más nyelvi kalibrálással kapcsolatban.
A bárkód fontja – 3 of 9_new.ttf – csak az angol ABC betűit ismeri. A rövid magyar ékezetesek úgy jelennek meg, ahogy egy magyar fontkészlettel írjuk, a hosszúak helyén szóköz (vagy annak látszó karakter) jelenik meg.
Az y és z karakterek felcserélődnek a szövegben, ahogy az angol billentyűzeten helyezkednek el, a bevitt Algopirynből beolvasás után Algopirzn lesz. Ezt meg lehetne oldani cserékkel: z-ket a szóköznek látszó karakterrel kell helyettesíteni, y-t z-re, majd az idegen karaktert y-ra változtatni, de az ékezetesek ettől nem javulnak meg.
Aztán kiderült, hogy a numerikus karaktereket jól fordítja. A gyógyszereknek, segédeszközöknek van egy számjegyekből és kötjelből álló kódja, tehát nem a nevét, hanem a kódját vesszük alapul a bárkóddá alakításhoz. Ezenél nem kell *-okat alkalmazni, bárkódos_érték=bevitt_kód. Még így sem volt jó, mert magyar billentyűzetről bevíve a kötjelet ü betűvé alakította. Ez azért is érdekes, mert az angol billentyűzetről bevitt kötjel helyén "/" jelenik meg a nem bárkódos fontkészletnél.
Végül megoldódott a kérdés. Volt egy lista, ahol az összes, a felhasználó által alkalmazott gyógyszer szerepelt, a kódjával együtt. Ezt simán be kellett másolni oda, ahova a formról egyesével kellett volna felvinni, a kötjeleket kellett cserélni magyar billentyűsről angolra. Újabb tétel felvitelénél a kódnál a cserét kell alkalmazni.
Jó tudni, hogy a leolvasónál van egy beállítási lehetőség, amivel a bevitel után a fókusz a tabindex szerinti következő beviteli pontra, gomba ugrik.
Nem a bárkódos megoldáshoz tartozik, csak leírom, hogy nincs leolvasóm, Paramedic SSD-je meg félidőben feldobta a talpát. A programot febr. 27. óta élesben használják.
Nyuszi: nem lehet egy komplett programot kitenni a fórumra. :) Cucu: a nulla és a szóköz allergiára nálunk nem került sor, valószínűleg a leolvasótól függ.
Dolgoztam gyártásban, mi is sokat vesződtünk a BAR-kód beolvasóval egy időben. Angol vagy magyar, ékezetes vagy sem, nem szerette a space-t meg a nullá, stb. stb.
Már nem emlékszem pontosan mindenre, de aztán az informatikusok megoldották.
Pár héttel ezelőtt írtam egy raktár könyvelésének kivitelezésével kapcsolatban! Ez úton is szeretném megköszönni Delila10-nek az odaadó segítségét, ő elkészítette nekünk a táblázatot és a vonalkód leolvasás lehetőségét. Nagyon szépen köszönjük! Továbbá azoknak is szeretném megköszönni, akik próbáltak tanácsokat adni, illetve reagáltak a hozzászólásomra!
Hát, nem mi nevezzük hátizsák-problémának, hanem azok a matematikusok, akik érdemben foglalkoznak ezzel. :)
( Adott méretű, de véges hátizsákot kell megtölteni dolgokkal, amik különböznek (ez lehet térfogat, tömeg, befoglaló méret.. igazából mindegy). A cél, hogy minél kevesebb hátizsák kelljen. )
Cellán belül nem lehet 1-nél több hiperhivatkozást kreálni? PL egy 10 szóból álló bejegyzésben 2 szó az külön-külön 1-1 a munkafüzetben máshova mutató link lenne. Ezzel együtt a többi 8 szó pedig nem lenne link, csak sima írás.
Ha ismert a max. sorok száma oldalanként, akkor én ismét elővenném a hátizsák-problémát:
Sorbaraknám a blokkokat méret szerint csökkenő sorrendbe és a leghosszabbhoz keresnék egyet, ami még ráfér a lapra lapdobás nélkül. Aztán, ha van még hely, még egyet keresnék. (Ha sorba van rakva méret szerint, mindig a vége felé kell továbbmennem.)
Aztán a második leghosszabbhoz keresnék és így tovább.
Van egy gyanúm, hogy azért nem jött az előzőre sem válasz, mert a kapott információk és a fájl, illetve a csatlakoztatott nyomtató ismerete nélkül, nem lehet kideríteni sem az adatszerkezetet, sem a pontos szándékot, sem a lehetőségeket. Nekem legalábbis már akkor sem sikerült, ezért is nem szóltam hozzá.
Persze abban sem vagyok biztos, hogy a fájl és a nyomtató ismeretében tudna valamelyikünk megfelelő tanácsot adni. Én szinte biztos nem.
Viszont ha nekem lenne a feladatom a nyomtatás optimalizálása, akkor (Excel 2007, vagy 2010 alatt) a fenti menü Nézet pontjában az Oldaltörés megtekintése opciót választanám. Ez a géphez csatlakoztatott nyomtató tulajdonságainak figyelembevételével megmutatja, hogy hogyan néznének ki nyomtatáskor az egyes lapok.
A margókat lehet balra-jobbra, illetve fel-le csúsztatgatni. Persze csak óvatosan, mert az Excel ilyenkor a betűmérettel operál. Tehát ha kétszer akkora területet jelölünk ki egy oldalra nyomtatni, akkor a betűméret fele akkora lehet.
Nyilván ez sem ad tökéletes megoldást, de a semminél jobb. Én ezen túlmutató nyomtatás optimalizálást nem ismerek.
Igazad van, de ezekből csak az első változat jó. Próbáld ki a képleteket az AAA oszlopban, vagy attól jobbra, és meglátod. Ezt persze én is mulasztottam :-(
A konkrét példádban, ha az XX munkalap A1 cellájában szeretnéd látni indirekt függvénnyel az XY munkalap P25796-ot, akkor írd be XX-en mondjuk A2-be, hogy XY!P25796 (Így idézőjel nélkül), majd az A1-be írd, hogy =INDIREKT($B$1)
Az indirect függvénnyel nem jutok düllöre, tudnátok segíteni! (Német excel)
Feladat: jelen esetben, adott munkalapról (legyen a neve XX) hivatkozok a másikra (XY): XY munkalap P25796 cella tartalmát kérem vissza.
='XY'!P25796 lekérdezés indirekt módon ? >>
ilyesmivel próbáltam, de nem ment: =INDIREKT(" ' " & XY & "P" & B2) - a 2. sorba írt képlet / az XY munkalapról / a P oszlop / az aktuális XX munkalap B2 cellájában szereplö sorszámú / értéket adja vissza.
*********
Még egy kérdésem lenne: a P oszlopnak a sorszámát le tudom kérdezni: =spalte() -> 16 -t ad vissza. Ehhez tudnék csinálni egy plusz táblázatot (hogy pl. 1-A .... 16-P ), de esetleg van-e egyszerübb módja?
Ismét lenne egy kérésem, amennyiben megvalósítható.
Van egy munkafüzetem, benne 3 oszlopom. Az első oszlop celláinak értéke szám, a másodiké szöveg, a harmadikban pedig 3-3 checkbox található (jelölje be melyik cég fizet: A, B vagy C). Van-e arra lehetőség, hogy miután kipipálgattam a checkboxokat egy makró átmásolja a checkbox sorában lévő 1 oszlop celláinak számát zárójelben mellé idézőjellel a második oszlop celláinak szövegét egy új munkalap celláiba, azzal a feltétellel, hogy ha az A box van kipipálva, akkor az új munkalap 1. cellájába másolja be a számot és szöveget, ha a B box, akkor pedig a második cellába és ugyanígy a C esetben.
Ami még fontos, hogy az új munkalap cellájábanban felsorolásként lenne a bemásolt adat, tehát ha 10 db. A box lett kipipálva, akkor a cellába ilyen formában kerüljön be az adat: (1) "akármi", (2) "akármi" ... (10) "akármi".
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then With Range(Cells(Target.Row, 1), Cells(Target.Row, 4)) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With If Cells(Target.Row, 3) = "" Then With Range(Cells(Target.Row, 1), Cells(Target.Row, 4)) .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeBottom).Weight = xlThin End With Else With Range(Cells(Target.Row, 1), Cells(Target.Row, 4)) .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeBottom).Weight = xlMedium End With End If End If End Sub
Uhh nagyon köszi! A 2. verzió kellett nekem. Nagyon jól működik.
Annyit még esetleg kérhetnék, hogy nekem az lenne a legjobb ha ez az egész úgy működne, hogy ha csak az A oszlopban van írva valami, de a C-be nincs, akkor sima szegélyt tegyen, csak alulra, és a két oldalra, felsőhöz viszont ne nyúljon. Ha viszont van a C-be is írva, akkor a két oldalsó szegély maradjon a sima szegély viszont, az alsó legyen vastag (medium). A felsőhöz szintén ne nyúljon.
Ez lenne a tökéletes nekem.
Ha ezt le tudnád írni nekem, nagyon sokat segítenél.
Azt nem írtad, hogy ha a C oszlop nem üres a tartományban, a teljes A:D sort, vagy csak a bevitel celláját kell keretezni.
2 makrót írtam. Az első az egyes cellákat-, a második a teljes tartomány aktuális (beviteli) sorát keretezi.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [A1:D7]) Is Nothing Then If Cells(Target.Row, 3) <> "" Then Range(Cells(Target.Row, 1), Cells(Target.Row, 4)).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium Else With Range(Cells(Target.Row, 1), Cells(Target.Row, 4)) .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone End With End If End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [A1:D7]) Is Nothing Then If Cells(Target.Row, 3) <> "" Then Range(Cells(Target.Row, 1), Cells(Target.Row, 4)).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium Else With Range(Cells(Target.Row, 1), Cells(Target.Row, 4)) .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone End With End If End If End Sub
Szívesen. Mindenesetre nem vagy valami bőbeszédű:-))) Akkor most megtudtad, és kész, azaz csak kíváncsiságból kérdezted? Vagy ezután nekivágsz, és megcsinálod? Vagy annyira rossz a bemutatott technika, hogy inkább hagyod a fenébe? Az egyik olvtárs egy még jobban kinéző megoldást talált, és privátban elküldte nekem. De ha nem érdekes, akkor ejtjük a témát:-(((
A letöltött fájlt bontsd ki (a 4 kép és a program legyen ugyanabban a könyvtárban!). Nyisd meg az Excel táblát, és kattints arra a cellára, ahol az van, hogy kattints ide. Aztán nézegesd meg a képeket, majd kattints bármelyik másik cellára. Valami ilyesmit szeretnél?
Ha igen, akkor lenen egy javaslatom. A képeket ne egy Excel munkafüzetben tárold. Tartsd őket képként. Főleg ha sok képed lesz, akkor előbb-utóbb nagyon nagy lesz az Excel fájlod a képekkel.
Az én programom a Munka1 munkalapon dolgozik. A Munka2 munkalapon vannak felsorolva az A oszlopban a képek nevei, a B oszlopban a képet tartalmazó fájlok nevei. Amikor kiválasztasz egyet, akkor a munkafüzet jobb oldalán lévő területre beolvassa a fájlból azt a képet, amit látni akarsz. Aztán máshová kattintasz, akkor eltünteti.
És a Munka2 munkalapon felsorolt nevek nem terhelik a fájlt, és szinte korlátlan mennyiségű kép nevét adhatod meg. Aztán persze nem lesz kötelező egyetlen könyvtárban tartani. Lehet a Munka2-n egy harmadik oszlopot os használni a képek helyének megadására.
Valamiért ezt a részt pirossal jelöli ki, valami nem tetszik neki.
Option Explicit Public lastrow As Long, lastcol As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) If lastcol = 7 Then ' Ha már mozdultunk, és az imént az A oszlopon voltunk If Cells(lastrow, lastcol).Interior.Color= RGB (0;176;80),Then Cells(lastrow, lastcol + 7) = "Nem" End If End If lastrow = Target.Row lastcol = Target.Column End Sub
Igen, ezt én is kipróbáltam. És egyetértek azzal, hogy megbízhatóbb a tulajdonságok vizsgálata. Végül magam is ezt alkalmaztam. De azért jóféle kis bug (na jó, legyen magyarul: poloska:-)) a magyar verzióban.
Van egy ilyen makróm, ami annyit csinál, hogyha a 7. oszlopban valahol piros kitöltés van, akkor a 14. oszlopban beír egy "Nem" szót.
Option Explicit Public lastrow As Long, lastcol As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) If lastcol = 7 Then ' Ha már mozdultunk, és az imént az A oszlopon voltunk If Cells(lastrow, lastcol).Interior.ColorIndex = 3 Then Cells(lastrow, lastcol + 7) = "Nem" End If End If lastrow = Target.Row lastcol = Target.Column End Sub
Ez tökéletesen is működik, nincs vele semmi gond. A probléma ott van, hogy megszeretném oldani, hogyha a 8.oszlopban zöld kitöltés van, akkor a 14. oszlopba egy "Igen" szót írjon be.
A gond az, hogy az új excelben már nem csak a régi color palette-ben levő 56 szín van, hanem ugye több. Nekem az a zöld kéne (RGB (0;176;80)), aminek a kódját sajnos nem találom.
Megkukucskáltam a helyzetet, az angol kulcsszavakat biztosan elfogadja a fontstyle tulajdonság beállításakor - visszadni viszont a magyar verzióban magyarul adja vissza!
Ezért szerintem is célszerűbb a bold és az italic tulajdonságok vizsgálata, mert az egyértelmű.
Mindig képes megdöbbenteni az Excel. Szerettem volna egy programban kiolvasni egy cella formátumát, különös tekintettel a Félkövér/Normál beállításra. Azért, hogy azt később egy másik cella formátumát ugyanerre formázzam. Mit gondoltok, mit kaptam az egyébként alapvetően angolul működő VBA felületen a
selection.font.FontStyle parancs lekérdezése eredményeként? Nem hittem a szememnek, azt hogy "Félkövér". Így magyarul. Ha megfeszítenek sem használnék ilyet programban értékadásra. Kipróbálni ugyan nem tudom, de biztosra veszem, hogy egy angol nyelvű Excel nem fogadná el. Végül meg tudtam kerülni a dolgot a selection.font.bold True/False értékének kiolvasásával.
Azért megkérdezem. Van szabályos megoldás a magyar Excel 2010-ben arra, hogy a Fontstyle lekérdezés eredményeként olyan értéket kapjak, amit ki merek adni a kezemből?
Az lenne a kérdésem,hogy az Excel 2010 ben nyitottam két munkafüzetet,az egyikben lista van,a másikban képek,és hozzá leírás.Azt szeretném,ha rákattintok a lista valamelyik sorára/cellájára/,előjöjjön a másik munkafüzetből a kép a leírással.Majd egy újabb kattintással el is tűnjön.
Majdnem kezdő vagyok,lehetséges ilyen megjelenítés az Excelen?
Ez nem függvény! A Ctrl+F billentyűkombinációra előjön a keresés párbeszédpanel (amin ott van a csere "lap" is). A keresett szövegbe beírod a HTML kódot pl. </b>, a csere lapon üresen hagyod a csere erre részt. Beállítod, hogy ne a teljes cellatartalomra keressen.
Ezután kipróbálsz egy cserét, majd mindet cseréli.
(persze nem árt egy mentést csinálni előtte az eredetiről, ha mégsem jól okoskodtál volna.)
Egy olyan kérdésem lenne, hogy megoldható-e , hogy az excel egy oszlopban csak azokat a cellákat adja össze, amik szűrve vannak. Akkor kicsit kifejtem, mert szerintem ez így nem annyira érthető.
Szóval. Mondjuk az A1-A10-ig fel vannak töltve a cellák 1-el és 2-vel. B1-től B10-ig szintén fel vannak töltve számokkal. Az A oszlopra csinálok egy szűrőt, mondjuk, hogy csak az 1-eseket mutassa. Ezután szeretnék csinálni egy Szum függvényt az egész B oszlopra, viszont úgy, hogy csak azokat a számokat adja össze, aminek az A oszlopa 1-es.
Nem tudom, hogy ez megoldható-e, vagy egyáltalán érthető-e, de ha valaki tudna segíteni, annak nagyon örülnék.
Akadt egy kis problémám, hátha valaki tud nekem segíteni.
A helyzet a következő : csv fájlt nyitottam meg Excelben amit el is mentettem .xls fájlba. Ez egy termék adatbázis amit a webshoppok használnak, minden a helyére került szépen, egy valami zavar csupán. Az árú leírás html kódolású és látszanak a kódok a táblázatban ez egy kicsit zavaró és összevisszaságnak tűnik. A kérdés az, hogyan tudnám kitörölni a kódokat? Egyesével nem opció mert kb 6000 termék van :(
Esetleg valaki kezelt már ilyen termék adatbázist?
Bocs a palinkas belepoert, de erosen erintve vagyok.:-(
Nyomtatasi blokkok optimalizalasa teren gondoltam, lenne itt valakinek otlete ra.
ABC-szeru blokkokat kell nyomtatni kulon, egy sor kulonbseg legyen a blokkok kozott.
Szoveg szelessegetol fuggoen 2-6 oszlopban mehet A4 meretu lapra, allitva vagy fektetve, tehat a sorok szama erosen valtozik. A blokkok szama tobbnyire 20-30 kozott van.
A blokkok nagyon eltero meretuek, pl. 1218 az osszes, a leghosszabb 114, a tobbseg 25-80 kozott van, de sok 3-15. Egy nagyobban 3 ezer sor van, ott kb. 150 es 250 a ket leghosszabb, szinten tucatnyi 30 alatti, tehat sok az "aprosag".
A nyomtatasi sorrend lenyegtelen, a lenyeg, hogy
1. minel kevesebb papir menjen el
2. minel kevesebbszer vagja el a papir a blokkokat.
Eloszor a legrovidebbeket akartak osszehozni, majd a leghosszabbak es legrovidebbek osszeparositasaval probalkoznak, de kezzel nagyon sok ideig tart.
Excelt javasoltam nekik, az megmondja, adott oszlopoknal hany sor fer ki, tehat az indulo adatok adottak, de szamitas bonyolult. Minden otletet szivesen veszek.
Akik érdekeltek a pálinka témában, azoknak közzéteszek egy összefüggést, mely megadja, hogy -mondjuk- egy óra alatt hány felest lehet/kell meginnunk. =KEREKÍTÉS((5+2*VÉL());0) A magyarázat: 5= ha jól számolom öt fő szólalt hozzá a pálinka témához; 2= legalább 2-vel több fogy, mert finom...
Sokat segítene a munkádon, ha a cikkeknek és a vevőknek is lenne egyedi azonosítójuk - mert így az esetleges azonos nevű, de más paraméterű tételek is megkülönböztethetőek lennének.
Mondjuk a szállítólevélen látok ilyet, hogy cikkszám - de a raktárkészleten nem.
A szállítólevélen a cikkszám alapján az Fkeres függvénnyel ki tudod tölteni a többi releváns adatot, ugyanígy a vevőnél is az Fkeres alkalmazható (illetve elrendezés függően mindkét esetben az Index - hol.van függvény kombinációja működhet inkább).
A szállítólevélen a cikkszám vagy megnevezés kiválasztását érvényesítési listával könnyítheted, ugyanez igaz a vevőkre is.
Köszönöm!! Természetesen küldöm a xls-t. Rövidesen válaszolok a feltett kérdésekre is! Sajnos, most egy költséges és lélekölő programom lesz: a nejemet el kell kísérnem a madaras áruházba.....
Delila köszönöm. Én is gondoltam rá, hogy el kellene kérni az alaptáblázatot, mert azt valóban nem lenne kedvem bepötyögni. És abban nem valószínű, hogy titkos adatok lennének.
pappzopappzo: Küldheted emailben (a címem nyilvános), vagy felteheted mondjuk a data.hu oldalra mindannyiunk épülésére, és akkor elég csak a letöltőlink bemásolása.
Így, hogy pimre értelmezte a feladatot, már meg lehet írni a makrót hozzá. Javaslom, küldd el neki a füzetet, hogy legalább az adatok beírásával ne kelljen foglalkoznia. Neked is jobb, hamarabb végez.
Hát nem volt könnyű, de értem. Leírom a saját szavaimmal: A légszállítási adatok (liter/óra) a 66 sorban vannak. A B oszlopban vannak a szűkítőgyűrűk átmérői (mm), és a hozzá tartozó táblázat azt tartalmazza (a továbbiakban alaptáblázat), hogy milyen légsebességek érhetők el az adott légszállítási sebesség mellett az egyes szűkítőgyűrűk alkalmazásával.
A 79. sorban szerepel, hogy milyen légszállítási sebességet szeretnétek elérni, majd mellette, hogy milyen mértékű eltérést engedtek meg a kívánttól le, illetve felfelé. (Megjegyzés: A fölé írt megengedett eltérési értékek abszolút számok, légsebességet jelentenek, nem pedig százalékot. Ezt javaslom javítani, mert nagyon félrevezető).
A feladat, hogy a program (mert én a megoldást csak makróval tudom elképzelni) az előírt sebességet, és a megengedett tartományt figyelembe véve menjen végig az alaptáblázat egyes oszlopain, nézze meg, hogy van-e az adott sebességhez tartozóan olyan szűkítőcső, amelyik a megengedett tartományon belül van.
Amelyik sebességoszlopban talál ilyet, azt írja ki az eredménytáblázatba a 86. sortól kezdődően. Egy-egy ilyen sorban írja ki a szállítási sebességet, mellette a kívánt tartományt biztosító szűkítőcsövet, valamint azt, hogy ez pontos, vagy csak közelítő eredményt ad, illetve, hogy az alsó (60-90), a középső (100-210), vagy a felső (220-280) tartományban kaptuk-e az eredményt.
És persze ezt színezze ki a feltöltött képnek megfelelően.
Lehet, hogy a hétvégén lesz egy kis időm, és megpróbálok összeütni erre egy makrót.
És akkor a kérdéseim: A képen az alaptáblázat a 65. sorban kezdődik, és a 66. sor C oszlopában van a 60 l/ó, ami tízesével növekszik 280-ig.
Feltételezem, hogy a kezdősor változhat, ezért majd paraméterezem, hogy azt magad állíthasd be. Kérdés viszont a 60-28-ig terjedő skála a C oszloptól kezdve. Az fix?
A számított sebességek a kezdősor (65) utáni 4. soron kezdődnek majd mindig, és csak 7-féle szűkítőt használtok?
Aztán az utolsó szűkítő sor utáni 3-4. sorba kerül a céltáblázat az elérni kívánt paraméterek?
Aztán az eredménytáblázatot további 5 sorral lejjebb szeretnéd látni, avagy lehet mindössze 1-2 sornyi lyukat hagyni a céltáblázat előtt.
Küldök egy valós adatokkal feltöltött táblázatot, hátha ez segít. A kiválasztás kritériuma, hogy a szűkítőgyűrűben kialakuló légsebesség egyezzen meg a méréssel megállapított légsebességgel (ez az egyetlen bemenő adat). Persze a kiválasztást meg lehet xls-nélkül, "kézzel" is csinálni -a küldött xls-ben így is történt- , de ez -nagyobb adatmennyiség esetén- meglehetősen macerás. A szűkítőgyűrűben kialakuló légsebességek a gyűrűk belső átmérőinek (dcs) ismeretében egyszerűen számíthatók, ezek szerepelnek a táblázat szürkített celláiban, a jelen feladat szempontjából konstansak tekinthetők.
Rövidre fogva az xls-tő azt várnám, hogy adja meg, hogy az adott légsebességhez mely táblázati értékek felelnek pontosan és +- eltérés esetén (A korábban használt +- 20%-ot lecsökkentettem, mert sok találatot adott). Ez utóbbi a magyarázata a %-okkal kapcsolatos kérdésednek.
A cellaszín megadás, másolás, a feltételes színkezelés persze, hogy megoldható, de az ennek a folyamatnak egy huszadrangú mellékművelete a dolog érdeméhez képest.
Nekem még mindig hiányzik, hogy miért kell optimalizálni, és miért nem lehet (szabad) a legegyszerűbb megoldást választani: mondjuk a 140 l/ó légszállítást elérni a 150-es légszivattyú beállítás 10 literrel csökkentő tömítőgyűrű alkalmazásával. De ha nincs 10 literrel csökkentő, csak hússzal, akkor miért nem lehet a 200-as beállítást 60-al csökkenteni, és így tovább. De attól tartok, sosem fogom megérteni a dolgot. Mert ahhoz kellene az összes légszállítási adat, az összes tömítőgyűrű csökkentő képességének az ismerete, valamint az, hogy mi az a feltétel, amitől nem lehet a legegyszerűbb megoldást választani. És azt is jó lenne érteni, hogy mi a következménye, ha 10-20 %-al eltérek az előírttól.
Ami a pálinkát illeti, eredetiben Móriczka ötlete volt, amikor a matektanár megkérdezte, hogyan osztanál el 15 barackot hét gyerek között. Igaz, ő csak lekvárt főzött volna belőle, de felnőtt, diabéteszes körökben jobb a pálinka:-)
Biztos bennem van a hiba... kicsit úgy érzem magam, kb. mint egy amatőr, mikor beül a csellójával a nagyzenekarba.... Most utoljára nekifutok, hátha összejön valami minimális harmónia az amatőr és a profik között.
Az alapvető probléma méréstechnikai, csak én próbáltam -mint kiderült, meglehetősen rosszul- "gyümölcsökre" és "kosarakra" lefordítani. Tehát van egy légszivattyú, melynek légszállítását lehet állítani 100, 150, 200, 300 l/ó értékekre (ezek a "kosarak"). Néhány szűkítő gyűrűvel tovább lehet szabályozni a légszállítást. (szűkítő gyűrűk=gyümölcsök). A kérdés az, hogy egy adott légszállítást, mondjuk 140 l/ó- hogyan tudunk beállítani legpontosabban? A 150-es állásban a "C" gyűrűvel, vagy a 200 l/ó állásban az "A" szűkítőgyűrűvel, vagy a 300-as állásban az "X" gyűrűvel? A +- tartomány az elfogadható bizonytalanság. Tehát a jelen probléma szempontjából a l/ó-kat tartalmazó táblázat konstansnak tekinthető és "csak" ki kell választani, hogy mely táblázati értékek felelnek meg (pontosan, és +- 20%-on belüli eltéréssel) a beállítandó (példa szerint =140 l/ó) értékeknek. A "probléma szempontjából" azt jelenti, hogy a táblázat értékei függenek a hőmérséklettől, nyomástól, páratartalomtól és a szűkítőgyűrű is belejátszik, de ezek hatása képletekkel "kezelhető'.
Más.Továbbra is kérdezem, tisztelettel, hogy a cella szín megadása-, illetve ennek értékként való másolása lehetséges e az excel-ben? (2003-as Excel)
A pálinkát jó (sőt a gyakorlat szempontjából a legjobb) ötletnek tartom. Lehet, hogy 3 feles után megérteném a hátizsák problémát is. Javítom magamat, ehhez inkább 5 feles kéne.. Nahát ez a H-féle határozatlansági relácó!!
2: a gyümölcsökből úgymond egységcsomagok vannak, azokból kell összekombinálni a minél pontosabb eredményt (szerintem :) ). Alapvetően az egységcsomagok tömege számít, az már csak egy plusz, hogy nevesítve van gyümölcsökre.
Nekem ami még kérdéses:
3: lehet-e többet is venni egy egységcsomagból?
4: max hányféléből rakható össze?
5: az egyes és a kettes eredmény miért ugyanaz? Nem az első legjobb és a második legjobb eredmény kellene legyen?
11: Nem lehetne mindig pálinkát csinálni belőle? :)
Először én is erre gondoltam. És utána is néztem azzal a céllal, hogy a kérdezőtől érdeklődjek, nem erről van-e szó. Aztán arra gondoltam, hogy nem fontoskodok, és nem küldtem el. De most, hogy Te is erre gondolsz, csak megkérdezem, nem erről van-e szó:
Egy adott hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági értéke, és egy súlya, a hátizsákba maximum összesen egy megadottsúlyt pakolhatunk. Szeretnénk úgy választani tárgyakat, hogy az összfontosság maximális legyen. Tehát feladatunk, hogy kiválasszuk a tárgyaknak olyan halmazai közül, amelyekre az összsúly nem haladja meg a megadott maximális súlyt, a lehetséges maximális összfontosság mellett.
Nekem sajnos nem elég világos a kérdés. Mintha egy feltétel hiányozna. Azt írod " Ki kell választanom, hogy adott kg esetén...". Erről az adott kg-ról lehetne valami közelebbit?
Sziasztok! Bocs a szakszerűtlenségekért, de biztos megértitek. Van 3 kosaram (kis-normál-nagy) megvan, hogy egy kosárba mennyi kg alma, v. körte, v. szilva fér el. Ki kell választanom, hogy adott kg esetén melyik kosár v. kosarak alkalmasak a vásárláshoz. Az egyik eredmény cella/cellák mutassa, ha van pontos találat, v. találatok, mondjuk zöld háttérrel, egy másik eredmény cella +- 25 %-os eltéréssel mutassa a találatokat, mondjuk sárga háttérrel. Majd az eredmények értékként, de a háttérszín megtartásával másolódjanak egy adatbázisba. Valami nagyon halvány elképzelésem van a kiválasztásra, de a színezésre és az értékkénti másolásra a szín megtartásával, gőzöm sincs. Minden választ köszönök!
A mentőben lehet akár BAR-kód beolvasó is, de a helyszínen nem lesz és idő sem lenne rá. A táskában olyanoknak kell lennie ami nem járt le. Táskán belül kell kitalálni valamiféle megkülönböztetési módot, melyet meghatározott időszakonként frissíteni kell. Itt az emberi erő ráfordítás nem megkerülhető.
Paramedic kolléga majd kitalál rá valamilyen nyomon követési eljárást.
Azt szeretném, hogy ebben az esetben a P2 cella tartalmát adja eredményül. Ezt miképpen lehetne megírni?
Egyébként jól működik, ha talál olyan értéket mint az A2 cella tartalma, csak amikor ezzel a függvénnyel kitöltök egy táblázatot, akkor van olyan sor ahol ez nem lesz jó
Köszi! Teljes siker. Tényleg ott van a beillesztés módja, eddig nem vettem észre.
Unatkoztam, kezdtem összeállítani a mentős formot, bár a kérdező távol van. Kell még egy módosítás lap is.
Ha tényleg csak bevétel és kiadás van – figyelve a készletet –, akkor nem nagy munka megcsinálni.
Sorszámot azért teszek be, mert akkor a kiadásnál arra kell csak figyelni, hogy a legkisebb sorszámú kerüljön ki. Persze csak akkor, ha nem járt le a szavatossága.
Nagy képként, rendesen? Már nem akarok próbálkozni, de ezeket az opciókat nem láttam, pedig biztosan ott voltak valahol. A saját gépedről töltötted fel?
Értem. Akkor kénytelen vagyok keresni valakit személyesen. Köszönöm az eddigi segítséget. A fogyásról meg annyit _Nyuszi, hogy engem az nem érdekel ki mit könyvel a papíron és hogyan. Tudom mire gondolsz, miről beszélsz, ismerem is a dolgokat, de amit én kiadok a raktárból az fogyásnak számít. Aztán, hogy ezt ki könyveli a menetlevelén én/mi nem követem. Kivitte a raktárból a hónap utolsó napján az 5 ampulla mondjuk Cerucalt, készleten van még mondjuk 40 darab, tehát a fogyás jelentésben azt küldöm, hogy 40 ampullánk van még készleten. Tehát engem a menetlevelen lévő fogyások nem érdekelnek, csak az, ami a raktárból kiadásra került, és az hogy még mennyi van, kell e hozzá igényelni, na megpersze hogy a jelentést el tudjuk küldeni erről.
Ahogy olvasom a kérdéseket és válaszokat, az az érzésem, hogy a feladat sokkal összetettebb annál, hogy így, egy fórumon megbeszélve eséllyel megoldhassuk. De közben azon is elgondolkodtam, hogy nem létezik-e már elkészült megoldás erre a feladatra, vagy legalábbis ahhoz nagyon hasonló. Ezért elkezdtem keresgélni az internet magyar oldalain, és találtam is valami, ami nekem, laikusnak (!!!) hasonlónak tűnik: http://www.qb.hu/patika/qb_host_program/
Ezen az oldalon látok olyat, hogy van gyógyszer modul, gyógyszer kiadások (ha jól értem, a készletből történő kiadásokról van szó) és készletgazdálkodás funkció.
Nem tudom, ismered-e őket, mindenesetre talán egy emailben meg lehetne kérdezni, hogy a rendszerük tudja-e azt, amit szeretnél, esetleg tudnak-e hasonló rendszert. Az persze nem derül ki, hogy egy ilyen szoftver költsége mennyi, és - ismerve a magyar egészségügy anyagi helyzetét, nem is vagyok optimista, de azért egy tájékozódást talán megér.
Az, hogy menetlevélen könyveli a fogyást, az rendben van. De mi van akkor, ha nem könyveli?
Mondjuk két napja fáj a lába, kimentek, a tiszt (akár te, akár más) be fogja írni a vércukorszintnek hasra, hogy 4,2 mmol/l, mert megmérni nem fogja az ápolója, az tuti. Ergó el kéne tűnni a kocsiról egy tűnek, egy stixnek és egy 5×5-ösnek. De nem tűnik el, hiszen meg sem mérték. Egy másik szitu: hypozik és mondjuk az i. v. cukorpótlás után visszaméritek, még egy szuri... Vagy csak az első, mert a branül mandrinjából néztétek az első cukrot..... Akkor mi is fogyott? Ha kell, simán elhasználok egy betegnél 2-3 pár kesztyűt is, ha beszennyeződik vagy valami miatt le kell vennem..
És akkor még nem beszéltünk arról, hogy ONE kocsiként megy egy esetkocsi és bead egy Cerucalt, No-Spat, Algót, valamit..... De könyvelni nem fogja, mert egy simán ápoló ezeket nem adhatja. (Húztam én szekundánsként ONE kocsin csíkot a LP-kal: ez a fogyás nem látszódhatna sehol.)
Hó végére nagyobb lesz a káosz és a kifésülés energiaigénye, mintha egyszerűen csinálnál egy leltárt és kész. (Ezért jutott eszembe, hogy azzal a három fajta ampullával kellene kezdeni, amiről percre pontos leltárnak kell lennie, talán ott ki lehetne tesztelni egy rendszert.)
Igazából nekem/nekünk arra lenne szükségünk, hogy a raktárból, amit kiviszünk az autóra azt tudjuk így vezetni. A menetlevélre könyvelés, na igen, teljesen igazad van, embere válogatja, bár mi erre nagyon ügyelünk... De ugye itt megyében nem mi könyveljük a menetlevélen lévő fogyást, hanem fent a megye központban, és az alapján kapunk majd utánpótlást (elvileg, és tudomásom szerint). Vagy most hogy ezt leírtam, lehet hogy az alapján van elkönyvelve a fogyás, ami kikerül a raktárból az autókra. Ha nekem menetleveleket kellene olvasgatnom, és írni hogy ennél a feladatnál 3 pár gumikesztyű fogyott, és ezt még a lent említett papírokra rákönyvelni, lehet szereznék egy kötelet. A megyében van mentőállomás, ahol ezt a technikát használják. Többször hívtam az illetékes bajtársat, hogy információt nyerjek, náluk ez hogy működik, de amikor a hetedik alkalommal is azt kapom telefonon, hogy most nem ér rá, és hívjam vissza holnap (természetesen akkor sem ér rá), úgy gondoltam hogy saját magam egyedül belevágok, és megpróbálom megcsinálni. Nem fogok könyörögni, ha nem hát nem, köszönjük szépen!
Bár az uraktól kértél segítséget, de mióta Delila is válaszolt, úgy érzem, mégsem gondoltad ezt annyira komolyan. :)
Komolyra fordítva: mentőzöm és nálunk pl. tűnnek el ampullák úgy, hogy lejártra cseréli őket az, aki elviszi (gondolom ad orvosi ügyeletet és az ottani készletben lejárókat így cseréli be). De van, amikor egyszerűen beadsz egy Cerucalt és kész, elfelejted felírni. Az 5×5-ös mullapról, fekete tűről nem is beszélve...
Nekem az az érzésem, hogy ez - ismerve a bajtársakat - veszett fejsze nyele, de állomásonként változhat, és remélem, tévedek. De egy 10 papiros éjszaka után érdekes lenne egyszer összenézni, hogy mi is fogyott pontosan.
(A kábszer az persze más, én egyébként azzal kezdeném és ha az bevállt, akkor mehetünk a Furon/No-Spa felé :D . - hátha beválik és bevezeti a régiód.)
Esetleg ha az ampullákat felsorszámozod és kap egy vonalkód-készletet mindegyik ampulla-tár.... És akkor lehúzod, hogy bement 5 Tonogen (vonalkód alapján), az 1-es ampullatartóból (mondjuk az az R táska) az 1., 2., 3., 4., 6. helyekről. És akkor - ha jól töltötted fel -, látod, hogy ezek mikor jártak le. De mi van, ha a táskát a kocsiból töltöd fel, mert diktál egy új címet? ...
Nagyon köszönöm a válaszaitokat. Nem akarom "szét spammelni" a fórumotokat, révén hogy problémákban segítetek, és nem komplett projekteket megoldani. De tényleg nagyon köszönöm a hasznos észrevételeket, a tanácsokat, és ezt a ritka segítőkészséget. A lejárati dátumokkal kapcsolatban: a lejárati dátum főként a gyógyszereknél fontos. Vannak olyan gyógyszerek, amiket nagyon súlyos állapotú betegeknél használunk, és vannak olyan gyógyszerek, amiknek nincsen ideje megvárni a lejárati dátumot, mert a hétköznapokban jobban fogynak (nyugtató, fájdalomcsillapító, görcsoldó, hányáscsillapító stb.) Szerencsére a fontosabb gyógyszerek lassabban fogynak (dormicum, szteroid gyulladáscsökkentő, morphin stb.), hála istennek nem minden nap találkozunk igazán nagyon súlyos állapotú beteggel. Egyébként ezek sem szokták megvárni a lejárati dátumukat, de előfordul azért. A többi eszközből, kötszerekből, fecskendőkből, oxigén maszkokból, tűkből stb. pedig olyan a napi szintű felhasználás, hogy azok aztán tényleg nem tudnak lejárni, tehát nem fontos a lejárati dátum. Az az észrevétel is nagyon jó, hogy a gyógyszereknél a lejárati dátum vezetése akkor ugye már bonyolultabb lenne a kivételezés miatt. Ezt át gondolva azt mondom, hogy akkor csak elég, ha jelzi hogy mi az az első dátum, amikor mondjuk az egyik allergiás reakciónál használt ampullából lesz olyan, ami lejár. Így akkor mehet az egész egy készletbe, és nem kell dobozonként felvinni. Általában egy dobozban 5 ampulla van, de ez típus és gyártó szerint eltérő. A lényeg: tudjuk, hogy van 75 ampulla, és 2016/08 lesz olyan ami lejár. Nem lesz gond, mert akkor majd dátum szerint sorrendbe rendezem a szekrényben, és felügyelem minden ellenőrzésnél, hogy kiadásra került a gyógyszer, és manuálisan majd átírom a táblázatban a következő lejárati dátumra. A kivételezésnél azért még vannak számomra olyan dolgok, amik akadályt jelenthetnek. Többek közt az, hogy infúziót nem egyesével viszünk ki a raktárból, hanem kartonjával. Egy kartonban pedig 25 darab infúzió van. Tehát ha leolvassuk az infúzió vonalkódját, akkor kellene egy mező, ahol megadjuk, hogy 25 darabot vonjon ki az aktuális készletből. Vagy pl. az EKG elektródáknál egy zacskóban 120 darab van, vagy mondjuk 5 ampulla görcsoldót veszünk ki, tehát ezeket valahol meg lehessen adni. Ne haragudjatok, hogy ezeket így írom, tudom hogy egyáltalán nem érdekel senkit miből mennyi van, csak a megértés miatt. A jelenlegi kartonról megkérdezem a főnökömet, hogy készíthetek e képet egy üresről, amibe példaképpen befirkálok. Egyébként minden eszköznek van egy cikkszáma, pl.: 2122-406452. A jelenlegi könyvelése a ki- és bevételezesnék brutális időt vesz el, és emészt fel amellett hogy lennének fontosabb dolgaink napközben, amivel épületen belül foglalkozni kellene, és hát a kivonulások között van, hogy be sem tudom néha fejezni. Egyik papíron összesítem, amit a fiúk kivételeztek, azt rávezetem heti szinten a kartonokra, majd onnan abba az egységes rendszerbe, amiben az OMSZ vezeti a mentőállomások készleteit. Tényleg horror!
Elnézést kérek, hogy pénztárszalagot gyártottam nektek, próbáltam rövidre fogni! Köszönöm a segítségeteket!
Hát, ha ilyen furfangok vannak, és azok ismertek, akkor erre minden bizonnyal fel lehet készíteni a rendszernek azt a részét, amely a vonalkódok kiértékelésével foglalkozik.
Ha nem ismertek, az gáz, de olyan rendszert úgysem készített még senki, amit ne kellene időről időre felülvizsgálni és továbbfejleszteni...
Meglehet, hogy a vonalkód tartalmazza a gyártási-, ill. a lejárati időt. Ezt jól lehetne használni, de tartok tőle, hogy minden gyártó másképp alkalmazza (ha alkalmazza).
Ez csak egy megjegyzés, ami nem viszi előbbre a dolgot. :(
Ha Sánta Kutya itt lenne, rögtön azzal kezdené, hogy miért Excel, miért nem Access. Ami egy jogos kérdés, mert ez tipikusan adatbázis-kezelési feladat, amiben Excel kolléga nem annyira erős.
A vonalkódokkal kapcsolatban azt kell tudni, hogy a vonalkód tulajdonképpen normál számok sorozata, csak a "betűtípus" speciális. A vonalkód-olvasó felismeri a pálcika-pálcika-deszka-szünet-gerenda-stb. sorozatot, de amit a számítógépbe továbbít, azok számjegyek, és innentől semmi misztikum nincs benne. Ha akarod, telepítesz egy vonalkód-betűtípust, és azzal formázod a cellát, és akkor a monitoron meg nyomtatva is úgy fog kinézni, de attól az még számérték marad.
Szia, ahogy elolvastam a szándékot, van egy gyanúm, hogy nem a vonalkód lesz a fő gondja ennek a feladatnak. Sejtettem, hogy technikailag megoldható, bár magam ilyesmivel nem foglalkoztam. Az sem lehet gond, hogy az egyes eszközöket saját vonalkóddal lásd el, és hogy a különböző méretű kötszerek is külön-külön saját vonalkódot kapjanak.
Viszont a leírásod egyéb paramétereivel kapcsolatban vannak észrevételeim, amiket nem lesz könnyű kivitelezni. Egykor magam is foglalkoztam - más jellegű - termékek előállításnak és apró tételekben történő értékesítésének összesítésével, és a termelés/értékesítés ellenőrzési kérdéseivel. És bár azok lényegesen egyszerűbbek voltak a leírásod alapján várhatónál, megpróbálom átgondolni az adatszerkezet meghatározását is érintő kérdéseket.
Hátulról kell kezdenem a gondokat:
Az első szembeötlő igény a lejárati dátumok figyelése. Ez máris megnehezíti a korábban említett szándékot a több mint száz féle eszköz ABC sorrendbe történő rendezését. Ugyanis a lejárati dátumok miatt nem látom megoldhatónak, hogy egy eszköz egyetlen sorba kerüljön.
Ez még nem lenne gond, de amikor be-, vagy kiveszünk egy eszközt, amelyiknek van lejárati dátuma, akkor bevételkor fel kell jegyezni azt, kivételkor pedig azt is megkeresni, hogy melyik lejárati dátumú tételből adjuk ki az eszközt.
Ez azt is jelenti, hogy az ilyen eszközök bevételezésekor nem elegendő a vonalkóddal az eszköz megkeresése, hanem a programnak fel kell ajánlania a meglévő lejárati dátumokat, lehetővé téve, hogy ezek egyikét növeljük a beérkezett mennyiséggel, vagy az új lejárati dátumhoz rögzítsük a tételt. A kiadás talán automatizálható, ha a programnak megadjuk, hogy mindig a legrégebbi lejáratú tételnél kezdje a kiadást, és ne bennünket zaklasson a kiválasztással.
Ez persze még nem bonyolítja túl az adatszerkezetet, hiszen a vonalkód mellett elegendő lehet egyetlen dátummező. de már ezzel is több soros lesz minden tétel. És persze az adatbevitelnél sem elég a vonalkód a tétel felismeréséhez, hanem azt manuálisan kell pontosítani a lejárati dátum kiválasztásával, vagy beírásával.
Abba egyelőre bele sem merek gondolni, hogy miként alakul a szerkezet (és a program), ha azt is figyelembe kell venni, hogy honnan (kitől) érkezett egy adott tétel. És ebből következne a további bonyolítás, ha kiadáskor is tudni kell, hogy melyik beérkezett tételből adtunk ki egy eszközt. Ami későbbi reklamációk esetén fontos adat lehet.
Szóval egyelőre ezek jutottak eszembe, mint a feladat tervezése előtt átgondolandó tételek. Adott esetben segítség lehet a tervezésnél– ha nem bizalmas – egy-egy kartonlap kinézete, és az, hogy milyen adatokat kell a programba átvezetni.
Végül a kérdésedre, hogy „az Excelben van e olyan lehetőség, hogy vonalkód alapján mondjuk az adott méretű kötszer aktuális készletéből kivonjon egyet, bevételezéskor pedig ki tudjam választani a mennyiséget, ami érkezett.” A válasz igen, abban az esetben, ha a kötszernek nincs lejárati dátuma. Ha van, az is kezelhető az előbbiek szerint. És persze az sem mindegy, hogy érdektelen-e, hogy a kiadott tétel milyen forrásból (melyik szállítótól) érkezett. Mert, ha utóbb kiderül, hogy nem volt steril, akkor érdekes lehet ennek az ismerete is. Ez is megoldható természetesen. De ez már nem az én szakterületem.
U.i.: A dolog anyagi része nem érdekel, de ezzel azt hiszem, nem vagyok egyedül ezen a fórumon. Ha tudok segíteni, szívesen teszem.
Köszönöm szépen a válaszod! A tervezés már fejben meg van, csak vázaltba kell szednem őket. Tudom pontosan, hogy mit szeretnék, csak azért nem írtam nagyobb litániát, mert ahogy olvastam, láttam hogy itt (ahogy te is említetted) nem konkrét projekteket oldanak meg a hozzáértők, hanem problémákat. Csak arra voltam kíváncsi, hogy az elképzelésem megvalósítható e, és nem e hülyeség, amit írok. Meg esetleg valamelyik szakemberrel fel tudom e venni az elképzelésemmel kapcsolatban a kapcsolatot. Persze nem ingyen, maximum a többiekkel összedobjuk rá a pénzt kollektíven. Tehát akkor ha jól értelmezem, kivitelezhető amit nagy vonalakban felvázoltam? :)
A vonalkód olvasás jó ötlet, legalább is nálam működik.
Az első lépés - a tervezés - az egyik legfontosabb lépés egy táblázat kialakításánál.
Sajnos eléggé kevés az az infó amit leírtál, ahhoz, hogy érdemben hasznos tanácsot tudjon bárki adni.
Tudni kell előre mit, hogy szeretnél, ez kb olyan, mintha azt mondaná neked valaki, hogy kérek egy gyógyszert de nem tudom mi a bajom :)
És érdemesebb valakit személyesen megkérni, hogy segítsen, mert ez így eléggé nehézkes. Annak ellenére, hogy itt az aktív tagok nagyon segítőkészek, és ügyesek, általában egy rész feladatot, oldanak meg nem pedig egy komplett projectet.
2007-es Excellben szeretnék megvalósítani valamit, és ebben szeretném kérni a segítségeteket. Egy mentőállomás egészségügyi- és gyógyszer raktárát szeretném kicsit korszerűsíteni, és ezzel a saját munkánkat is megkönnyebbíteni (nyílvántartás, leltár). Arra gondoltam, hogy azt a több mint száz féle eszközt, ami a rendelkezésünkre áll, egy Excell táblázatban rendszeresíteném ABC sorrendben. Az eszközök havi fogyásáról bizonyos időközönként jelentést kell küldenünk, és jelenleg ez A4-es papíron van vezetve, majd heti szinten több száz kartonlapra van átvezetve, onnan pedig egy programra kell manuálisan bekönyvelni... Horror!
Mivel nem csak fogy, hanem érkezik is eszköz, ezért szeretném a bevételezést is ezzel a módszerrel megoldani. Nem utolsó szempont többek közt a gyógyszerek lejárati dátumai, amire szeretném, hogy figyelmeztessen a táblázat, legalább 1 hónappal a lejárat előtt. Arra gondoltam, hogy a legegyszerűbb az lenne, ha minden eszközt egyedi vonalkóddal látnánk el. Így amikor valami kivételezésre kerül, nem kell papíron dokumentálni, elég csak hónap végén összesíteni. Viszont nem tudom az Excellben van e olyan lehetőség, hogy vonalkód alapján mondjuk az adott méretű kötszer aktuális készletéből kivonjon egyet, bevételezéskor pedig ki tudjam választani a mennyiséget, ami érkezett.
Ebben szeretném kérni a segítségeteket, illetve a tanácsaitokat, hogy szerintetek ezt hogyan érdemes kivtelezni, és a vonalkód olvasás lehetséges e.
Előre is köszönöm, várom megtisztelő válaszotokat!
Makró használatával a következő a feladatom: kimutatás készítése egy nagy táblázatból. Már eljutottam majdnem a feladat végig, most ott tartok, hogy diagramokat jelenítek meg egy gombra kattintva. A problémám az, hogy a diagramok egymáson helyezkednek el. Próbáltam őketbepozícionálni , azonban mindig csak az elsőt pakolgatja a többit ugyanúgy egymásra teszi. Ha pl beállítom az első 5 diagramnak a pozícióját akkor az elsőt berakja az 5.helyre és a többit úgyan úgyközépre,egymásra rakja. Itt a kódrészlet ahol bepozícionálom az elsőt. Valakinek van valami ötlete?
Előre is köszi minden észrevételt!
ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Szumma").Range("A2:M3") Sheets("Szumma").Select Sheets("Heti kimutatás").Select With ActiveSheet.Shapes(Chart) .Top = 50 .Left = 0 .Width = ActiveWindow.Width * 0.3 .Height = ActiveWindow.Height * 0.3 End With
A jelszavas sor nem okoz gondot, levettem a védelmet, és remeltem azt a sort, de a hiba ugyanaz.
A hivatkozásokat (mind a linkek létrehozásánál, mind a biztonsági mentésnél) abszolútra javítottam, tehát: Y:\1mappa\2mappa...stb, de ugyanaz
Csakis akkor mennek tönkre a hivatkozások, ha ez a sor lefut:
ActiveWorkbook.SaveCopyAs Filename:=
Ez most ugye a Thisworkbook-ban van benne. Próbáltam, hogy áteszem simán egy modulba, de akkor Sub workbook_open-ben nem is indult (nem tudom, mi a különbség, csak próbálkoztam). Ha áírtam private auto_open-re, akkor indult minden, de a hivatkozás megint rossz lett.
1. A főprogramban definiálsz egy Public változót Long típusúként.
2. A munkafüzetben meghívod a Private Sub Worksheet_SelectionChange eljárást. A bejövő Targetváltozót megvizsgálod, hogy azonos-e a sor és oszlop értéke a számlálandó celládéval. Ha igen, akkor a Public változód értékét megnöveled 1-el.
Próbáld már ki, hogy a biztonsági mentés készítésében egyesével ki-REM-eled a sorokat, hogy melyik okozhatja a jelenséget. Nekem különösen a Worksheet.Protect gyanús, bár nem tudnám megmondani, hogy miért....
Igen, jól érted. A megnyitott fájlban dupla klikkel hozzuk létre a linket ezzel:
Sub Hiper(sor) 'duplaklikk Dim FN As String, V As String, jelzo As Boolean
V = "\szerverneve1mappa2mappa3mappa4mappafenykepfelvetelek" V = V & Cells(sor, "G") & "" & Cells(sor, "AD") & ""
ChDir V 'Direktor váltás FN = Dir(V, vbDirectory)
Do If FN <> "." And FN <> ".." Then If Left(FN, 4) = Cells(sor, "AK") & "" Then V = V & FN ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=V, TextToDisplay:="Fotó" jelzo = True GoTo Vege End If End If FN = Dir() Loop Until FN = ""
Vege: If Not jelzo Then MsgBox "Nincs " & Cells(sor, "AK") & " számmal kezdődő mappa a " _ & Cells(sor, "AD") & " mappában!" & vbCrLf & "" & vbCrLf & "Ellenőrizd: " & _ vbCrLf & "- a dokumentum típusát, " & vbCrLf & "- a BV vagy az iktatószámot, " & _ vbCrLf & "- a szerveren a megfelelő mappába másoltad a fényképeket!", vbOKOnly + vbExclamation
End Sub
Tehát a dupla klikkel gyönyörúen létrejön a link, ami egy fényképpekkel teli mappára hivatkozik. A mappa elérési útját adott cellák tartalma alapján határozza meg. Ez így van jó két éve, működik.
Aztán most egy más fájlnál szintén remekül működő biztonsági mentés makrót tettem az elejére. És ha megnyílik a fájl (létrejön a biztonsági másolat), akkor onnantól az előzőleg létrehozott linkek nem működnek. Nem a biztonsági másolatban, hanem az eredeti fájlban, ami meg van nyitva. Ha törlöm a rossz linkeket, és újra bekattintom, akkor jó, de az újabb megnyitás után újra rossz lesz. Lépésenként futattam az open makrót, de nem lép a hiper nevezetű makróba.
Itt az open:
Sub workbook_open() Sheets("2016").ScrollArea = "$B10:$AC3513" Sheets("2016").Protect Password:="jelszo", UserInterfaceOnly:=True If Workbooks("File.xlsm").ReadOnly = False Then Worksheets("2016").Range("AQ5").Value = Environ("USERNAME") If Worksheets("2016").Range("A1") < 10 Then Worksheets("2016").Range("A1") = Worksheets("2016").Range("A1") + 1 Else Worksheets("2016").Range("A1") = 0 ActiveWorkbook.SaveCopyAs Filename:=\szerverneve1mappa2mappa3mappa4mappafenykepfelvetelekiktato & "File_" & Sheets("2016").Range("A1") & ".xlsm" 'biztonsági mentés útvonala ActiveWorkbook.Save TimerStart Else: End If End Sub
Van egy kérdésem ami segítené a tisztánlátást. (Illetve a válasz.)
Jól értem-e: a X munkafüzet megnyitásakor automatikusan készül egy másolat az eredeti fájlról (gondolom a SaveCopyAs paranccsal), aztán amikor kész, és elkezdenéd használni az X munkafüzetet, nem működnek benne a linkek, amelyeket korábban létrehoztál, és működtek is. Tehát a biztonsági mentés és a linkhasználat megkísérlése közben nem történik semmi, nincs bezárás, megnyitás, semmi, csak egyszerűen nem működik a link.
Esetleg a biztonsági mentést létrehozó kód megtekinthető?
Amit megkapirgálnék: azok a linkek teljes elérési utat tartalmaznak valahová, vagy relatív címek?
Már szétkattintgattam magam, mire sikerült behatárolni a hibát, de a megoldást csak részben tudom.
Van egy hálózaton tárolt Excel fájl, amiben többek között linkeket hozunk létre, melyek meghatározott (ugyanezen a hálózati meghajtón lévő) mappákra hivatkoznak. Tökéletesen működik, öröm, boldogság...
Most egy biztonsági mentéses makróval egészült ki a fájl megnyitása. A biztonsági mentéses fájlt ugyanerre a hálózati meghajtóra mentem.
Ha ezek után egy korábban létrehozott (mappára mutató) linkre kattintok, akkor ezt dobja:
Ha a biztonsági mentéshez egy másik hálózati meghajtót választok ki, akkor a korábbi linkre kattintva ezt írja:
Ha a biztonsági mentés helyét a saját gép valamely meghajtójára jelölöm ki, akkor minden működik.
Azt is kipróbáltam, hogy az eredeti Excel fájlt tettem máshová, de a hibák ugyanazok.
Az megoldás lenne, ha a saját gépre hoznám létre a biztonsági mentéseket. Mivel a fájlt kb. 15 ember használja, így a saját megynitáskori biztonsági mentések mindenkinek csak saját gépén lenne meg, nem pedig egy közösen hozzáférhető helyen.
Nálam volt olyan, hogy az egyik munkafüzet(sic!) év végi (záró) oszlopából a másik munkafüzet(sic!) év eleji (nyitó) oszlopába kellett másolni, ahol a képlet - értelemszerűen - nem jöhetett, csak az érték. Beillesztésnél van ún. Irányított beillesztés, amikor megkérdezi, hogy mit szeretnél beilleszteni: én itt az "érték"-et választom. Akinek átküldöm az újabb munkafüzetet, az egy darab számot lát ott, nem tudja, hogyan jött ki.
A másik, amire gondolhattál, hogy az egyik munkalapon(sic!) képlettel számolt érték egy másik munkalapon(sic!) is megjelenjen. Nos, ezt úgy a legkönnyebb megoldani, hogy pl. a Munka2 munkalapon az B2-es cellába a szerkesztőlécnél beírod azt, hogy =Munka1!A1, és akkor a Munka1 munkalap A1-es cellájába írt érték jelenik meg ott (is).
Lehet, hogy túl „egyszerű” kérdés teszek fel, de sajnos a megoldást nem találom.
Hogyan tudnék képlettel cellából másolni?
Konkrétan a munkafüzet egyik munkalapjának értékeit szeretném a másik munkalapon megjeleníteni úgy, hogy csak az elsőt szerkesztem, de az értékek a másik munkalap adott celláján is megjelenjenek. Megoldható ez makró nélkül függvénnyel?
Az előző biztonsági mentéses, visszaszámlálós makrók remekül működnek, csak éppen a fájlban lévő hivatkozásokat "rontotta" el valami.
Van benne egy dupla kattintós link létrehozsá, ami adott soronként, adott mappára mutat. Hónapok óta tökéletesen működtek, de a mai makrós változások után a korábban létrehozott linkek sem működnek (a megadott fájl nem nyitható meg). Ha kitörlöm a linket, majd dupla klikkel újat hozok létre, akkor működik, ám a bezárás/újranyitás után újra nem megy.
Mit csinálhat az open, hogy "elrontja" a korábban létrehozott hivatkozást?
Tökéletesen működik a szerveren is, köszönöm a segítséget. Hozzátettem az elejére egy másik biztonsági mentést, amit még korábban másik táblázathoz Delila segítségével alkottunk. Ideírom a kódot, hátha érdekel valakit.
Sub workbook_open() Sheets("2016").ScrollArea = "$B10:$AC3513" Sheets("2016").Protect Password:="jelszo", UserInterfaceOnly:=True If Workbooks("Fajl.xlsm").ReadOnly = False Then Worksheets("2016").Range("AQ5").Value = Environ("USERNAME") If Worksheets("2016").Range("A1") < 10 Then Worksheets("2016").Range("A1") = Worksheets("2016").Range("A1") + 1 Else Worksheets("2016").Range("A1") = 0 utvonal = Sheets("2016").Range("AE1") & "Fajl_" & Sheets("2016").Range("A1") & ".xlsm" 'biztonsági mentés útvonala ThisWorkbook.SaveCopyAs Filename:=utvonal ActiveWorkbook.Save
Timestart Else: End If End Sub
Ez a rész csinálja a biztonsági mentést. Az első sor egy megadott helyen változtat egy sorszámot 10-ig, majd újrakezdi a nulláról.
If Worksheets("2016").Range("A1") < 10 Then Worksheets("2016").Range("A1") = Worksheets("2016").Range("A1") + 1 Else Worksheets("2016").Range("A1") = 0
a 2. sorral meghatároztuk a mentés útvonalát, illetve a fájl nevét, ami így mindig emelkedik eggyel.
Ezzel a megoldással az utolsó 10 megnyitásról vannak biztonsági mentéses fájlok. A másik fájlnál before_close-ra raktuk, de itt a megnyitás volt a célszerűbb.
Csak azért kérdeztem, mert akik javaslatokat adtak (többfélét), azok azért kíváncsiak lennének, hogy melyik megoldás volt a sikeres.
A 283236-ra Delila válaszolt a 28238 és 28239-ben. Nekem az jó megoldásnak látszott. Ha megírnád, hogy mit látsz, biztos segítene. Akár ő, akár más.
Ami a 28270-et illeti, arra még nem kaptál választ. Nem tudom, hogy értem-e a kérdést. Az sem világos, hogy tömbből dolgozik-e, vagy munkalap adatokból. Mindenesetre talán próbáld meg a ListIndex értékét beolvasni, és növelni.
Ha jól értem, a "Kitöltés lefelé" funkciót keresed. Ennek többféle technikája lehetséges. Kijelölöd a 4 cellát, amit lefelé akarsz másolni, és a Shift billentyűt lenyomva tartva a Cursor le, vagy a Page Down billentyűvel addig mész lefelé, míg a kitöltési terület utolsó sorát eléred. Ez persze 50000 sornál kicsit nehézkes, ezért én hátulról kezdeném a kijelölést. A szerkesztőléc mellett balra beütöd, hogy A50000, ezzel odaugrik. Itt jelölöd ki azt a 4 cellát, ameddig majd a kitöltés tart. Ezután a Shift + Ctrl + Home billentyűkkel kijelölöd a területet az elejéig.
Ezután a jobb szélen a szerkesztés menüpontban a kitöltést választod (a lefelé mutató nyílra kattintva) és a megjelenő almenüben a "Lefelé" opciót választod. Ennek van egy gyorsbillentyűs kiváltása: Ctrl + L.
Adott egy sima tábla, első sorban a meghatározások, név, cím, akármi, stb... alattuk meg az adatok.
Ebbe a sorba teszek egy szűrőt, és mindig kiválasztom, hogy mit akarok látni. eddig ok :)
Pl. A1 cellában leszűrök egy névre, (bekattintom a kis négyzetet) erre a leszűrt értékre tudok valahogy hivatkozni, hogy azt ki tudjam íratni egy másik helyre?
Megkaptam, de egyelőre nem sok jót tudok mondani. Az biztos, hogy a fejléce jó - de a tartalmának köze sincs egy Excel táblázathoz... (hányas az az Office?)
File to be repaired: D:ExcelFilm lista.xls Fixed file: D:ExcelFilm lista_r14334813022016.xls --------------------------------------------------------------------------------------------------------------------------- Pass 1: Reading the damaged file... --------------------------------------------------------------------------------------------------------------------------- No data to recover detected --------------------------------------------------------------------------------------------------------------------------- Repair process finished
Semmi értelmezhető adatot nem talál benne, ami menthető lenne! Pedig a program jó.
„...Az Excel olvashatatlan tartalmat talált a(z) Film lista.xls munkafüzetben”
Így távolról ezt nehéz lenne eldönteni mi okozta - hacsak nem szedtél be valami jó kis Crypto vírust (Ransomware), mert ebben az esetben nincs segítség. Bár ennek más jelei is volnának, ugyanis minden dokumentumot, képet titkosít.
Ha mentésnél, vagy másolásnál sérült meg a file, akkor vannak erre javítóprogramok - a sérült fejléc pedig egy mezei HexaEditorral (HxDen) is javítható.
Két MB az nem egy nagy méret, kattints az adatlapomra és küldjed el az e-mail címemre, meglátom hogy lehet-e kezdeni vele valamit...
- a checkpoint-ot is beleraktam, csak ide elfelejtettem másolni
- ha belekattintottam egy cellába, akkor a SheetSelectionChange hibát dobott. Van pár dupla klikkes makró a háttérben, lehet, azok kavartak. Remeltem ezt a részt, és tökéletesen futott, majd be is zárta szépen. Olyan a fájllal való munka, hogy nem baj, ha figyelmezteti, így az újraindítás nem szükséges eseményhez rögzíteni. Egyelőre itthon próbáltam, hétfőn tudom szerveren tesztelni.
- amúgy a leállítása tényleg hogyan lehetséges a makrónak? Egyáltalán szükséges?
Az Application.OnTime azt teszi, hogy a 2. paraméterben megadott makrót az 1. paraméterben megadott időpontban elindítja. A leggyakrabban használt formája az időzítésnek (ami az első paraméter) az, hogy
"jelenlegi időpont" + "valamennyi várakozási idő"
a kódomban a jelenlegi időpontot a Checkpoint változó tartalmazza
a várakozási idő pedig konstans: 1/24/60.
Az OnTime végrehajtása és a várakozási idő letelte között nem történik VBA kód végrehajtás.
Mivel a várakozási idő az Excelben általános dátumábrázolást használja, itt az 1 érték egyenlő egy nappal. Ha másodperceket akarsz megadni, akkor 1-nél kisebb törtszámot kell ide írni.
1/24 = 1 óra
1/24/60 = 1 perc
1/24/60/60 = 1 másodperc.
Persze ki lehetne számolni, hogy ez mennyi, de az "1/24/60/60" sokkal informatívabb, mint az, hogy "1,15741E-05"
Mint látható, én a kódomban 1 perc várakozási időt adtam meg, tehát ennyi időnek kell eltelnie ahhoz, hogy a figyelmeztető ablak megjelenjen. Talán azért nem láttál semmit, mert 1 perc túl sok, és nem vártad meg. De ha átállítod 1/24/60/6-ra, az éppen 10 másodperc lesz, hamarabb látszik az eredmény.
Egyébiránt nekem az auto_opennel nem fut le, azért raktam az indító kódot a Workbook_open eseménykezelőbe, de lehet, hogy itt nincs hiba.
Mindenesetre csak akkor van esélyed bármit látni, ha az Immediate ablakban látsz legalább egy darab ilyet:
Ilyen fájlsérülés szerencsére ritkán, de sajnos előfordul. Van erre szoftver, a neve Office Regenerator: http://www.dposoft.net/office.html. Sérült. felülírt, törölt fájlok helyreállításában segít. Sajnos nem ismerem, mert eddig életemben egyszer kellett volna, de 180 dollárt nem áldoznék rá. Ingyen letöltési lehetőségről nem tudok. Illetve azt hiszem, elindul, csak amikor a végén regenerálni kellene, akkor szól, hogy ez nem ingyenes.
A helyi másolatra nincsen szükség, azt remeltem, az eredeti mentést True-ra állítottam.
A Thisworkbook-ban így néz ki, mert mást is kellene indításkor csinálni
Sub auto_Open() Sheets("2016").ScrollArea = "$B10:$AC3513" If Workbooks("FILE.xlsm").ReadOnly = False Then Worksheets("2016").Range("AQ5").Value = Environ("USERNAME") ActiveWorkbook.Save Else: End If TimerStart End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.OnTime Checkpoint + 1 / 24 / 60, "Warning", , False TimerStart End Sub
A normál modulba beírtam, amit ajánlottál:
Sub TimerStart() Debug.Print "Timer start: " & Timer Checkpoint = Now Application.OnTime Checkpoint + 1 / 24 / 60, "Warning", , True End Sub
Sub Warning() Dim PPW As Object, T As Single, i As Long Dim mysec As Integer, msg As String
Set PPW = CreateObject("WScript.Shell") T = Timer mysec = 30 While Timer < T + mysec msg = "A FILE bezáródik " & Int(T + mysec - Timer) & " másodperc múlva." & vbLf & "Nyomj okét, ha nem szeretnéd." With PPW i = .Popup(msg, 1, "Info", 0) If i = 1 Then TimerStart Exit Sub End If End With Wend 'ThisWorkbook.SaveCopyAs "C:Copy Of " & ThisWorkbook.Name ThisWorkbook.Close savechanges:=True End Sub
A fájl megnyílik, nem ad hibát, az open kezdeti eseményei végre is hajtódnak, aztán semmi sem történik. Ha belépek a VB felületére, nem látok futó makrót :-(
Az időzítés beállítását nem értem, ne haragudj. Mi ez az 1/24/60?
ThisWorkbook.SaveCopyAs "C:\Copy Of " & ThisWorkbook.Name
ThisWorkbook.Close savechanges:=False
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.OnTime Checkpoint + 1 / 24 / 60, "Warning", , False TimerStart End Sub
Nagyon érdekes ötlet, beindította a fantáziámat. De persze kicsit másképp közelítettem meg :-)
Nekem működik az alábbi megoldás:
Normál kódmodulra:
Public Checkpoint As Date
Sub TimerStart() Debug.Print "Timer start: " & Timer Checkpoint = Now Application.OnTime Checkpoint + 1 / 24 / 60, "Warning", , True End Sub
Sub Warning() Dim PPW As Object, T As Single, i As Long Dim mysec As Integer, msg As String
Set PPW = CreateObject("WScript.Shell") T = Timer mysec = 30 While Timer < T + mysec msg = "A FILE bezáródik " & Int(T + mysec - Timer) & " másodperc múlva." & vbLf & "Nyomj okét, ha nem szeretnéd." With PPW i = .Popup(msg, 1, "Info", 0) If i = 1 Then TimerStart Exit Sub End If End With Wend ThisWorkbook.SaveCopyAs "C:Copy Of " & ThisWorkbook.Name ThisWorkbook.Close savechanges:=False End Sub
Thisworkbook modulra:
Private Sub Workbook_Open() TimerStart End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.OnTime Checkpoint + 1 / 24 / 60 / 6, "Warning", , False TimerStart End Sub
A piros részben helyi másolatot készítek a fájl jelenlegi állapotáról, de az eredeti, szerveren lévő fájlt nem módosítom (rmert ki tuggya milyen állapotban hagyta félbe a delikvens a fájl szerkesztését.)
A kék rész az, ami újraindítja az időszámlálást. Ezt itt a SelectionChange eseményhez rendeltem, ami azt jelenti, hogy ha a user másik cellába kattint, újraindul. De akármelyik munkafüzet-eseményhez hozzá lehet rendelni, többhöz is akár.
Van egy táblázatom amiben nap, hét hónap év oszlopok vannak (A,B,C,D) (utánuk az adatok)
A nap nál a nap neve: hétfő , kedd stb, a hétnél a hét száma, hónapnál a hónap neve.
Mindegyiket a 4 oszlop értékeiből íratom ki, ami egy dátum.
Felső sorra szűrő van beállítva, hogy bármire le lehessen szűrni, adott hétre, hónapra, dátumra. Sok sor van.
A probléma az első oszlopnál van ahol a nap értékek vannak: hétfő, kedd stb.
Mivel ez a dátum ból másolódik, szürés esetén ugyanúgy a dátumforma lesz látható a szűrési opciók kiválasztásakor, pedig itt azt szeretném, hogy a napok nevei (kedd stb) látszanak, csak az a 7 db.
Teljesen laikusként kérném a segítségeteket az alábbi táblázatban mellékeltek megoldásához.
A különböző termékeket kellene összeadni. Előre nem lehet tudni, hogy melyikből mennyivel egészül ki a táblázat. Lényeg, ha az A oszlopba beírásra kerül a termék neve, akkor automatikusan adja össze az adott termékek C oszlopban lévő mennyiségét. Segítségeteket előre is köszönöm.
Azt hiszem találtam megoldást, ha kész leszek feltöltöm. Nem vártam el,h a hibák ki legyenek javítva, sőt nem is várható ez el. Nem tudtam,h hiányos, mivel én is így kaptam meg és még nem jutottam addig semmire se vele. Köszönöm, hogy foglalkoztál a témával, rendes tőled. Ha mégse jutnék semmire az én megoldásommal, akkor lehet még jelentkezek, ha nem gond. Köszönöm!
A hét vége úgysem alkalmas most nekem, hogy tervezzek egy makrót. Ha a jövő hét elejéig nem jelentkezik senki makró nélküli megoldással, akkor összeütök egyet.
Azt viszont nem vállalom, hogy a táblázatok hiányosságait rendbe tegyem. Én rápillantva az idézett kettőt találtam, csoda lenne, ha nem lenne még egy néhány. Keresgélni, javítgatni nem szeretném, anélkül viszont semelyik megoldást nem lehet kipróbálni. Sem makróval, sem anélkül. Márpedig én nem szeretek egy munkát úgy kiadni a kezemből, hogy nem futtattam le a saját gépemen hibamentesen.
Igen, a heti terv fülön szereplő modellek elvileg szerepelni fognak az adatbázis részben, csak még nem teljes a lista. Oda be lehet írni a hiányzó két modellt bármilyen számmal. Igen, a bal felén levő szám a szorzószám.
Csak makróval? Nálunk tiltva vannak a makrók, de ha nincs más megoldás akkor meg lehet végülis oldani, de jobb volna makrók nélkül :)
Nem tűnik amatőr problémának, de megoldható. Én makró nélküli megoldást nem látok, de nem tartom kizártnak, hogy anélkül is legyen megoldás.
Kérdés: Ami a "heti terv" munkalapon van, annak kivétel nélkül szerepelnie kell az "adatbázis" munkalapon, ugye? Mert enélkül nem lehet elvégezni a feldolgozást, viszont ez pillanatnyilag nem teljesül. Csak szúrópróbaszerűen néztem, és a heti tervben szereplő Montego Hocker, meg a Laredo típust nem találom az "adatbázis" lapon.
És csak, hogy egyértelmű legyen: Az adatbázis lapon az egyes típusok bal oldalán lévő szám a szorzószám, ha jól értem?
Van egy szerveren lévő fájlunk, amit többen nyithatnak meg. Időnként egyesek megnyitva felejtik, és így más nem tudja használni. Ezért gondoltam, hogy egy időzítővel figyelném a nyitva lévő fájlt és valamennyi idő után, ha nincs reagálás, akkor feldob egy msgboxot, majd ha arra sem reagál az ember, akkor menti és bezárja a fájlt. Netről összevadásztam pár dolgot és ezt alkottam, de az idő leketyegése után az msgbox megjelenik, ám nem zárja be a fájlt. Az okéra nyomva újraindul a számlálás, de ha nem nyomom meg, akkor nem zárja be. Az Idokezd előtti rész más miatt szükséges.
Sub auto_open() Sheets("2016").ScrollArea = "$B10:$AC3513" If Workbooks("File.xlsm").ReadOnly = False Then Worksheets("2016").Range("AQ5").Value = Environ("USERNAME") ActiveWorkbook.Save Else: End If Idokezd: ido = Timer + 10 Do While (Timer < ido) DoEvents Loop With ThisWorkbook .RefreshAll .Save End With Dim mysec As Integer, msg As String mysec = 10 'másodperc msg = "A FILE bezáródik " & mysec & " másodperc múlva." & vbLf & "Nyomj okét, ha nem szeretnéd."
With CreateObject("WScript.Shell") Select Case .Popup(msg, mysec, "Info", 0) Case 1 GoTo Idokezd End Select ThisWorkbook.Close True End With End Sub
Az oszlop() függvény az aktuális oszlop sorszámát adja.
Mivel a 2. oszlopban akarsz a másik füzet 5. oszlopára hivatkozni, a B-ben az oszlop() + 3 adja az 5-ös értéket. Jobbra másolva a képlet 3+3, vagyis 6 lesz.
Lefelé is másolhatod, mert a mappa nevét az A oszlopból veszi a függvény.
köszönöm a korábbi kérdésemre adott válaszokat, holnap kipróbálom, úgy ahogy javasoltátok, hogy 1 munkafüzetbe, 2 munkalapra másolom az adatokat, és csak a szükséges tartományt jelölöm ki, nem a teljes sort.
És lenne még egy kérdésem, mert holnap még egy nagyobb feladat vár rám.
Van 19 tábla, a 19 tábla 19 külön mappában található.
Erre a 19 táblára kellene egy összesítő táblát csinálnom, amiben mind a 19 tábla adatai benne vannak.
Ebben semmilyen extra nincsen, csak az adott táblák egy cellájában szereplő értéket szeretném viszont látni.
A hivatkozásba hogy lehet beépíteni, hogy az elérési útba beillessze, ami az első oszlopban van megnevezés?
Hallottam az indirekt függvényről, sikerült is megcsinálnom, viszont nem tudtam úgy megoldani, hogy a cella (C5) változó maradjon.
Hozzá nem értőként kijelölöm a szükséges sorokat, oszlopokat, ctrl+h és csere.
Én Wordben csinálnám, a Körlevél funkció alkalmazásával.
Ekkor a "lyukas szöveg"-et egy Excel táblázatból átvett adatsorral lehet feltölteni. Legutóbb szerződéseket csináltunk így: a jelentkező egy Google Spreetsheeten megadta az adatait, ezt lementettük Excel formátumban (.xls), majd Wordben készült egy körlevél, ahol megetettük a táblázatot, mint változókat tartalmazó fájlt a körlevéllel. :)
(Azért a többesszám, mert az enyém csak az ötlet volt, meg a körlevél elkészítése a megadott paraméterek alapján.)
Kezdő vagyok, úgyhogy lehet, hogy nagyon triviális lesz a kérdésem. Hogy lehet exc-2003-el egy 8-10 oldalas szöveget készíteni, ami szinte teljesen doc-nak látszik (fejléc, lábléc, ábrák, táblázatok, oldal, oldalak száma, file-név), de a szöveg egyes részeire lehessen hivatkozni. A fix szöveget csak jelszóval lehessen módosítani. Pl van egy 10 fős osztály, akiknek az éves értékelésüket a tanszékről szóló fix szövegkörnyezetbe kell megjeleníteni. Az adatok külön file-ban megvannak (pl. név, életkor, tanulócsoport, havi tanulmányi eredmény, stb). "Kedves ........iskolatársunk" közé be lehessen hivatkozni a nevet úgy, hogy ha "Kis Pál" vagy "Zalaegerszegi Sebestyén"is illeszkedjen a fix szövegkörnyezethez. Jó lenne, ha egy táblázat celláiba tartalmakat lehetne címezni úgy, hogy pl Kis Pál táblázata 5 sorból áll, de Nagy Borisznak a hiányzások miatt csak 3 soros legyen a táblázata. Jó lenne, ha egy külön file-ban elkészült diagram is behívható lenne. Bár nekem még az xls-ben készült diagram feliratát sem sikerült -egy másik feladatban- frissíteni.
Ez egy nem új keletű vita, hogy mi a gyorsabb. Tavaly áprilisban folyt erről egy hosszabb beszélgetés, és akkor készítettem hozzá tesztprogramot. Igaz, nem a SZUMHATÖBB függvényre, hanem a táblázat soraiba történő új sor beszúrásra és törlésre vonatkozóan. Az eredményt a következő dokumentumban foglaltam össze:
Az eredményről akkor (április 13) a 26990 számú hozzászólásban számoltam be (http://forum.index.hu/Article/viewArticle?a=134563032&t=9009340), ami egy hosszabb beszélgetés része. A válaszok láncolata alapján az egész beszélgetést nyomon tudod ott követni, ha ilyen mélységben is érdekel. Csak persze az ottani linkek már nem érvényesek, mert időközben töröltem a fájlokat a data.hu oldalról, és csak most tettem fel őket újra
Azért röviden itt is leírok egy-két tapasztalatot: Ha egy 100 000 soros táblázatba szúrok be 1000 sort (egyesével, tehát ezerszer ismételve az egy sor beszúrását) olyan helyre, hogy csak az utolsó 10 000 sort kelljen minden beszúrásnál hátratologatni, akkor ennek az időigénye az én - nem különösebben felturbózott - asztali gépemen hozzávetőleg 1 mp, ha ugyanezeket egyesével törlöm, az is 1 mp.
Ha a beszúrást a fájl elején végzem, ahol majnem mind a 100 000 sort át kell mozgatni, akkor az időigény 8-9 mp volt. A törlés ugyanennyi.
Ha a teljes táblázatot csak beolvastam egy változóba, az 18-19 mp-ig tartott, és akkor csak az adat került beolvasásra, a cella formázási paraméterei nem, és semmilyen más műveletet (törlés, beszúrás) nem végeztem.
Ebből arra a feltételezésre jutottam, hogy az Excel fejlesztői olyan megoldást találtak - legalábbis a cellák beszúrására és törlésére -, hogy ne kelljen állandóan a winchesteren lévő adatokat mozgatni.
Ami az itteni feladatot jelenti, nem tudom, hogy a SZUMHATÖBB függvény hogyan dolgozik. Ha kiderül, hogy valóban ennek a lassúsága okozta a problémát, akkor érdekes lehet erre vonatkozóan is elvégezni néhány kísérletet. Hátha ennél is trükköztek valamit a fejlesztők.
"Ekkora táblát be lehet "kapni" a memóriába és akkor "pillanatok alatt" végez vele a proci. (Ez nem vicc, nagyságrendekkel gyorsabb a memóriaművelet, mint a táblában való szöszmötölés.)"
Szia,
Nincs erről esetleg egy teszt táblád, ahol meg lehet nézni, ki lehet próbálni? Érdekelne :).
Bocs, még valami beugrott. Próbáld ki, hogy a függvényt csak néhány száz soron futtatod le. Akkor is jelentkezik-e ez a hibajelenség? Ha igen, akkor még kevesebbel.
Biztos, hogy a hibát az Excel lassúsága okozza? Tapasztalatom szerint ennyire azért nem lassú. (Tapasztalatom szerint /Excel 2010/ 4-5000 számítást elvégez másodpercenként cellában lévő adatokkal is. Az, hogy "...nem válaszol, a monitorom tejfehérré változik" nálam akkor szokott előfordulni, ha makró írásnál hibázok, és végtelen ciklusba kerül a program.
Nem tudom, függvény hívásnál is történhet-e ilyen eset, de azért szívesen megnézném azt a függvényt, amelyet másolsz "a 35000 sorban".
Ha a képleted nem a konkrét tartományra vonatkozik, hanem egész oszlopokat tartalmaz, akkor sajnos így viselkedik az excel (hála Redmondnak (:). A képletben szumhatöbb(A:A stb.) helyett legyen szumhatöbb($A$1:$A$35000; stb.), ekkor csak az adott tartománnyal foglalkozik az excel.
Ezen kívül ajánlott Eredő Vektor javaslata is.
Ha még ekkor is lassú lenne, marad a makró. A táblázat egy részét - fals adatokkal - tedd fel elérhető helyre és belekukkantunk. Ekkora táblát be lehet "kapni" a memóriába és akkor "pillanatok alatt" végez vele a proci. (Ez nem vicc, nagyságrendekkel gyorsabb a memóriaművelet, mint a táblában való szöszmötölés.)
van egy 35000 soros excel táblám. A táblában így jönnek az oszlopok: telephely azonosító, szektorkód, osztály kód, aktív/passzív, határozott/határozatlan, alkalmazott/vezető. Egy mások táblából szumhatöbb függvénnyel az ezeknek megfelelő értéket szeretném visszakapni eredményül. Ezt a képletet másolom a 35000 sorban, 1 oszlopban.
A problémám inkább technikai. Windows 8 oprendszeren, 3 gb ram-os számítógéppel, 2013-as office-ban ez a művelet 6 óra alatt sem futott le.
A két tábla a saját gépemen van, mind a két tábla meg van nyitva, a gépen semmilyen más program nem fut, csak a vírusirtó.
Az excel azt írja nekem, hogy nem válaszol, a monitorom tejfehérré változik. Nincs valakinek ötlete, hogy hogy lehet ezen gyorsítani? A gépem kevés hozzá?
Úgy gondolom, azért van ez, mert nem lehet egyszerre január 1 vagy nagyobb az A oszlopban és január 1 vagy kisebb a B oszlopban (hiszen ott legelső érték a január 9.).
Szerintem az intervallumot kell másképpen megadnod.
Tudom, banális amit írok, de nézd meg lsz., hogy minden dátum megfelelően van-e beírva, nem szövegnek, hanem dátumformátumnak kell lennie, a feltételt akkor tudja vizsgálni.
XP+Office 2003 kombot nyugdíjaztam. Az Office 2007-es kesobbi tarsaitol labrazast kapok, ugyhogy Win10+Office2003 kombo lett.
Ezereves fájljaimban jól megszokott datumbeallitasok (eeee.hh.nn.)
Ide eleg volt eddig beirni a h.n adatot, a tobbit hozzatette magatol.
Most szarik a fejemre, meg a datumformatumot sem jeleniti meg rendesen. (de amig nem nyulok hozza, legalabb annak veszi).
A pontok eltuntek. Zavar. De ami meg jobban, hogy ha beirom, hogy 2.1, akkor az nem 2016.02.01 lesz, hanem 2.1, kavzi szovegkent, mar muveletet se lehet vegezni vele.
A "makrózhatás" arra vonatkozik, hogy függvényt vagy olyan egyéb másolási műveletet szerettem volna kapni ami minden hasonló formátumú táblázatban működik és "fel tudom venni" makróként. Ez esetben függvényt kaptam ami tökéletes lesz. Köszi ismét!
Ha mondjuk az A oszlopban van a telefonszám, akkor a B1-be írod a következőt: =KÖZÉP(A1;4;2), majd lefelé kitöltéssel az egész oszlopba bemásolod a képletet. Feltéve persze, hogy minden egyes telefonszám a +36 előtaggal kezdődik.
Makróval ugyanez: mid(range("A1"),4,2), és persze egy ciklust szervezel köré.
A kérdésed, hogy "hogyan tudsz a műveletből makrót készíteni?" meglehetősen sejtelmes, így arra a fentinél bővebb választ nem tudok.
Application.ScreenUpdating = False Set sh = ActiveSheet.Shapes("Object 1") sh.OLEFormat.Verb Verb:=xlPrimary sh.OLEFormat.Object.Object.Range.Copy Range("AU47").PasteSpecial xlPasteValues Application.ScreenUpdating = True End Sub
- az előbb nem adott hibaüzenetet, azért nem csatoltam azt
- a beágyazott dokunak ez a neve, illetve már elneveztem, de azt írtam a makróba
- most lefut csodaszépen, köszi :-)
annyi a mondjuk úgy nem tetsző, hogy megnyitja a Word-öt, és onnan másolja a szöveget, majd visszazárja.
Az egészet egy automatikus emailhez készítem. A cél az lenne, hogy az email szövegét egy előre meghatározott helyről vegye a makró. Így szedem ki a címzettet, a tárgyat is, de a szöveg bonyolultabb annál (képet is tartalmaz, meg különböző formázást), hogy simán egy cellában legyen.
Azt még letesztelem, hogy az Outlook-ba való beillesztéshez is megnyitja-e a Word-öt, de azt csak melóhelyen tudom ellenőrizni.
Ha arra lenne ötleted, hogy ne láthatóan nyissa meg a Word-öt, azt megköszönném.
csak azért raktam be az Array-t mert a kódodban az volt. Egyébként egyáltalán nem biztos, hogy minden beágyazott Word objektumot "Object 1"-nek hívnak.
És persze egy hibaüzenet minden bizonnyal javítana a megoldási esélyeken.
Sub Makró2() Dim sh As Shape, WD As Object, ThisDoc As Object
Set sh = ActiveSheet.Shapes.Range(Array("Object 1")) sh.OLEFormat.Verb Verb:=xlVerbOpen Set WD = GetObject(, "Word.Application") Set ThisDoc = WD.activedocument ThisDoc.Range.Copy Range("AU47").PasteSpecial xlPasteValues ThisDoc.Close WD.Quit End Sub
Egy Excelbe ágyazott Word dokumentum tartalmát szeretném makróval másolni. Rögzítettem a következő makrót:
Sub Makró2() Sheets("Adatok").Select ActiveSheet.Shapes.Range(Array("Object 1")).Select Selection.Verb Verb:=xlPrimary Sheets("Adatok").Range("AU47").Select ActiveSheet.Paste End Sub
Ám lefuttatva nem az objektum tartalmát, hanem a nevét másolja a megadott helyre.
Excel fájlokkal kell dolgoznom és a gépemen lévő 2003-as Excel a megnyitott fájl nevét a bal felső csücsökbe írja ki, sötét háttéren fekete karakterekkel. Majd kiesik a szemem, mire elolvasom a fájl nevét! Hátha tud vki segíteni: 1. A fájlnév olyan helyen jelenjen meg, ahol jól olvasható, vagy 2. A fájlnév betűszínét át tudja állítani, vagy 3. A bal felső sarok hátterét ki tudja világosítani. Oprendszer W7. Előre is köszönöm a válaszokat. Javasolták a CELLA("filename";A1) de ez sajna az elérési utat is tartalmazza, nekem csak a filenév kéne.
Van egy oldalnyi széles, de hosszú táblázatom. A problémám, amire megoldás kellene, hogy több kijelölt sort, egy oldalon. egymás alatt tudjak kinyomtatni. A nyomtatási terület gombjára minden kijelölt sort, külön lapra nyomtat. Köszi a fáradtságot!
Lenne egy nagyon fontos feladatom, csak elakadtam vele, kérem, aki tud segítsen.
Adott egy legördülő lista, sorszámokkal: 19001, 19002...19100 a vége. Az lenne a problémám, hogy ha egy számot kiválasztok belőle (19001), akkor az alatta lévő cellában, már ne engedje ugyanezt kiválasztani. Tehát, ha már egyszer kiválasztottam, a listában ne látszódjon (19002-től induljon).
Speciális szűréssel rendezek adatokat a munkalap egy másik pontjára másolva. A gond, hogy ha adott szűrési feltétel üres cella, akkor nem ad eredményt. Nem működik az ="", az sem ha üresen hagyom a cellát, próbáltam az "is null"-t is.
Lehet, hogy nem egyeznek a területeink. Ha nem az A:H-ban vannak az adataid, mint nálam (én hasraütéssel jelöltem ki ezt a területet), akkor az igazi területnek megfelelően írd át a képletet.
Köszönöm a gyors választ. Valószínűleg valamit rosszul csinálok mert nem pont úgy sikerül ahogy kellene./Feltételes formázás-Új szabály-A formázandó cellák kijelölése képlettel/
Ja és mellékesen: Ha majd lesz ActiveX gomb is a programban, az csak a programban lesz!!! Nem kell betenni abba a táblázatba, ahol a programot használod. Az marad a programfájlban, csak a megnyitott adatfájl adataival használja.
Szerintem kezdjük az alapoknál, az AktiveX-et hagyjuk későbbre, amikor az egyszerűbb feladatok már mennek. Meg a VBS fájlokat is, ami egy másik programnyelv. Maradjunk az Excel egyszerű feladatainál:
Írj egy egészen egyszerű programot, ez nyilván alapból menni fog: Adja össze a program az Excel tábla két adatát. Aztán ezt mentsd le xlsm kiterjesztéssel. Ha a fájl újbóli megnyitása után ez működik, tehát a makrót elindítva összeadja a két számot, akkor az első programod megvan. Most írd át a programot úgy, ahogy az előző válaszomban javasoltam: Azaz a program ne saját munkafüzetében végezze el a feladatot, hanem nyisson meg egy új munkafüzetet, és abban végezze el ugyanezt.
Ha ez sikerül, akkor kezdjünk el foglalkozni a bonyolultabb feladattal, akár az ActiveX használatával.
Arra gondoltam, hogy esetleg valahova külön fájlként menti el a programot az Excel, majd a táblázat megnyitásakor automatikusan csatlakoztatja.
Pont ez kellene nekem, mert azt a bizonyos programot több táblázatban is kellene futtassam. Arra gondoltam, hogy megírnám, majd menteném egy adott (pl. vbs???) fájlként, majd amelyik táblázatban szükségem van rá egyszerűen teszek egy ActiveX gombot, és annak megfeleltetem azt a bizonyos programot (hogy ne kelljen mindenhova megírnom). Lehetséges ilyesmi?
A második mondatodat nem értem? Ha írtál egy programot, akkor hogy lehetséges, hogy ne tudjad, hova menti az Excel. Nyilván abba a munkafüzetbe (azaz Excel fájlba), amelyiknek a VBA ablakát megnyitva megírtad. De van egy gyanúm, hogy valami mást akartál írni. Esetleg xlsx kiterjesztésű, azaz makrómentes munkafüzetbe akartad menteni, nem törődve a figyelmeztetéssel? Mert ekkor valóban elveszhetett a program.
A kérdésedre válaszolva: Természetesen megoldható, hogy a programot függetlenítsd attól az Excel munkafüzettől, amelyikben használni akarod.
Ehhez egy xlsm kiterjesztésű munkafüzetbe megírod a programot, és a program elején megnyitod a használni kívánt munkafüzetet. Ez már lehet xlsx kiterjesztésű is.
A programsor így fog kinézni: Workbooks.Open fileName:=<filenév>, ahol a filenév teljes elérési úttal együtt értendő, pl.: "D:Dokumentumokexceltabla.xlsx"
Írtam egy rövid programot VBA-ban egy Excel táblázathoz, amit egy ActiveX vezérlő parancsgombbal futtatok. Nem tudom, hogy ezt a kis programocskát hova menti az Excel. Kérdésem az volna, hogy megnyitható-e külön csak ez a program mikor a táblázat nincs megnyitva, és hogy megoldható e hogy írjak külön egy kicsi vba programot amit majd futtathatok bármelyik Excel táblázatban, ahol szükségem van rá?
Szeretném a segítségeteket kérni excelben történő ismétlődéshez:
A táblázat egyértleműen mutatja a kollega nevét illetve adott napon dolgozik /X/ vagy pihen /P/. Olyan szűrőre, képletre, bármire lenne szükségem ami jelzi, ha egymás után 6-nál több X van a sorban.
Köszönöm a gyors megoldást. A makró részben jó lenne, de ha egy cella értéke megváltozik a sárga tömbben, akkor nem vált át azonnal a makró féle zöld tömbben. Esetleg valamilyen függvényes megoldás nincs erre?
Van egy tömb, ami a képen a sárga színnel jelölt cellákból áll. Olyan képletet szertenék, amely a sárga tömbből a zöld színű oszlopot (tömböt) adja eredményül.
Várom a megoldásokat, előre is köszönöm a segítségetek.
Sub Valami() Dim lap As Integer, oszlop As Integer
For lap = 5 To Sheets.Count With Sheets(lap) .Range("L3") = .Range("J3") For oszlop = 78 To 1 Step -1 If .Cells(5, oszlop) = "x" Then .Columns(oszlop).Delete Shift:=xlToLeft Next End With Next End Sub
Segítséget szeretnék kérni az alábbi makró megírásában. Illetve először is az érdekelne, hogy lehetséges-e. Egy sok munkalapból álló 'import' excel fájlt használok, amit bizonyos rendszerességgel egy IT-rendszerbe kell feltöltenem. A rendszer új verziója miatt az 'import' táblám bizonyos oszlopaira nincs már szükségem, viszont nem szeretném egyenként törölgetni ezeket, lévén rengeteg munkalapom van.
A makrót a következőképpen képzeltem el:
- kijelöli a munkalapokat az ötödiktől az utolsóig (tehát az 5-től felfelé minden munkalapon ugyanazt fogja csinálni)
- átmásolja a J3 cella tartalmát az L3 cellába
- A5;BZ5 tartományon belül ha egy cellában "x" szöveget látja, a cellához tartozó oszlopot törli.
A rögzített makró helyére az alábbi programot másold be, aztán a program 2. sorában a konstansokat állítsd be. Ha van fejlécsorod, akkor a kezdosor értéke legyen 2, illetve annyi, ahol a számaid kezdődnek. Ugyanez a helyzet a kezdő oszloppal. Ha mondjuk az A oszlopod neveket tartalmaz, akkor a kezdooszlop legyen "B". Ha meggondolod magad, és nem növekvő, hanem csökkenő sorrendet akarsz, akkor a program közepe táján lévő xlAscending helyett írd be, hogy xlDescending.
Egyébként az egyes sorok nem kell, hogy azonos számú rendezendő adatot tartalmazzanak. A program minden sorban megnézi, hogy meddig van feltöltve számokkal. Egyetlen feltétel, hogy a számok között ne legyen üres cella, mert akkor csak az első üres celláig rendez.
Option Explicit
Const kezdosor As Long = 1, kezdooszlop As String = "A"
Sub rendez()
Dim ws As Worksheet, sorokszama As Long, utoszlop As String, i As Long, rendtart As String
Set ws = Workbooks(ThisWorkbook.Name).Worksheets(ActiveSheet.Name)
sorokszama = ws.Range("A" & Rows.Count).End(xlUp).Row ' Ügyelni, hogy az "A" oszlop folyamatosan fel legyen töltve
For i = kezdosor To sorokszama
utoszlop = oszlopnev(ws.Cells(i, ws.Columns.Count).End(xlToLeft).Column) ' Minden oszlop folyamatosan legyen feltöltve
rendtart = kezdooszlop & i & ":" & utoszlop & i ' A rendezési tartomány az egyes sorokban
Sziasztok! Van párszáz sornyi számom, és mindegyik sor számait balról jobbra növekvő sorrendbe szeretném rendezni. Egy-két sorral könnyű, de párszázat már unalmas egyesével.
(Próbálkoztam makró rögzítéssel, de az mindig a sorbarendezés párbeszédben megadott sort rendezné újra, meg újra.)
A nyomtatás előtt Nézet->Oldaltörés megjelenítése választással megnézed, hogy a nyomtatandó részleted hányadik oldal. Aztán a nyomtatás beállításainál beírod tól-ig értékeknek ezt az oldalszámot.
Azt nem tudjátok véletlenül, hogyan lehet megoldani, hogy ha egy sok oldalas táblázat valamelyik oldalát utólag kell kinyomtatni (mert mondjuk javítás volt benne), akkor az eredeti oldalszámot tegye rá, és ne első oldalként kezelje?
Az megoldható valahogy, hogy egy táblázatban ne jelenjenek meg a nullák? Úgy értem, ha egy képletet végighúzok másolni, akkor azokba a cellákba, ahol nem volt előtte adat, ne 0-t tegyen, hanem hagyja üresen?
Egy látszólag nagyon egyszerű problémát nem tudok megoldani. Remélem nektek van ötletetek.
Adott egy táblázat táblázattá formázva. Sokat van benne használva a fejlécben elérhető szűrés lehetőség.
Egy oszlopot szeretnék elrejteni, úgy hogy az csak jelszó után legyen látható, és szerkeszthető.
Az alap elképzelés, hogy a kijelölt oszlopot hagyom csak zároltan (cellaformázás/védelem/zárolt), a többit nem.
Majd a lapvédelmen beállítom a jelszavas védelmet, és kilépés előtt rejtem az oszlopot, de akárhogy csinálom, ha a védelem be van kapcsolva nem működik a táblázat fejlécében a szűrés lehetőség.
Remélem van valakinek egy jó ötlete hol rontom el.
Csak reménykedni tudok benne hogy a Jézuska nagyon megajándékozott, mert te engem igen. Nagy örömet szereztél. :)
Ritkán jövök ide a fórumra, de mindig megkapom a segítséget még akkor is, ha hülyén teszem fel a kérdést, mert nem értek hozzá. Nagy dolgok ezek a mai világban.
Private Sub Worksheet_Change(ByVal Target As Range) Dim CV As Range If Target = "" Then Exit Sub
If Not Intersect(Target, [F12:M45]) Is Nothing Then Application.EnableEvents = False For Each CV In Range("F" & Target.Row & ":M" & Target.Row) If CV = Target And CV.Column <> Target.Column Then CV = "": GoTo Tovabb End If Next
Tovabb: Application.EnableEvents = True End If End Sub
Még jöhet valaki, aki megoldja. Én csak soronként 16 új bejegyzéssel tudom elképzelni, ilyen pocsékolást pedig nem hajtok végre. Pláne, hogy mindjárt itt a Jézuska.
Ha nem ma, hát holnap, vagy utána biztosan kapsz megoldást.
Javaslom, tegyél feltételes formázást a sorokba, ami bevitelkor azonnal kiszínezi a duplán szereplő értékeket. Akkor könnyedén törölheted az előzően bevitt adatot. Átlátható területen lévő cellákról van szó, szerintem ennyit automatizálás nélkül is meg lehet oldani.
A feltételes formázás képlete =DARABTELI($F12:$M12;F12)>1, az érvényessége F12:M45.
Sajnos nekem nem működik. Az azonos sorban kiválasztott azonos elemeket nem engedi kiválasztani tehát az első elemet kiválasztom és amikor ugyan abba a sorba ugyan azt kiválasztanám nem tudom mert egyből törli ahelyett hogy ott megjelenne és az elsőt törölné
Neked, és mindenki másnak is kellemes ünnepeket kívánok.
Az Excel nem szeret másik füzetből érvényesítést venni.
Tehát 1 sorban nem szerepelhet egynél többször ugyanaz a kiválasztott adat az F12:M45 tartományban.
A laphoz rendelt makró
Private Sub Worksheet_Change(ByVal Target As Range) Dim terulet As Range If Target = "" Or Target.Count > 1 Then Exit Sub If Not Intersect(Target, [F12:M45]) Is Nothing Then Application.EnableEvents = False Set terulet = Range("F" & Target.Row & ":M" & Target.Row) If Application.WorksheetFunction.CountIf(terulet, Target) > 1 Then Cells(Target.Row, Application.Match(Target, terulet, 0)) = "": Target="" End If Application.EnableEvents = True End If End Sub
Először is kellemes karácsonyi ünnepeket és boldog új évet kívánok minden fórumozónak.
Újra visszatértem a tőled kapott makróhoz de problémába ütköztem. Ami makrót készítettél az 3 érvényesített cellára vonatkozik. Ezt a makrót szerettem volna kiterjeszteni.
Nálam az F G H I J K L M oszlopok a 12. sortól a 45. sorig vannak érvényesítve. Ha megcsinálom az összes sorra a makrót akkor "hosszú projekt" vagy valami hasonló hibaüzenetet kapok. Én azt hittem bármennyi "if" -et használhatok egy makrón belül, de úgy látszik még sem.
Ebben kérném a segítséged hogy lehet ezt megvalósítani.
Tehát el szeretném érni hogy csak egy soron belül a 8 oszlopban törölhet értéket de 32 sorom van.
Nem akarom beírni. Gyakran kellene több táblázatba, több munkalapon, és nem szeretném minduntalan begépelni a dátumot. Max. egy két kattintás vagy billentyűparanccsal menjen a mai dátum a cellába. Ezt szeretném. A súgó szerint ctf+; és kész. Ez nagyon tetszene, de sajnos nem igaz!
Lehet, hogy volt már de talán nem nagy kérés ha valaki tudja és leírja nekem:
Hogyan kell egy bizonyos cellába egyszerűen dátumot beszúrni. Statikus dátumot, nem függvényt. Nem tudom elképzelni, hogy ne lehessen valahogy. A súgó azt írja, hogy ctr+; de nem jó! 2013-as verzió. Nagyon köszönöm előre is.
Private Sub Worksheet_Change(ByVal Target As Range) Dim utvonal As String utvonal = "C:Temp" 'ide a saját útvonaladat írd be
If Target.Column = 1 Then Range(Target.Address).Offset(1, 0).Select 'bevitel alatti sor kiválasztása ActiveSheet.Pictures.Insert(utvonal & Range(Target.Address) & ".jpg").Select Selection.ShapeRange.LockAspectRatio = msoTrue 'ez a sor gondoskodik az arányok megtartásáról Selection.ShapeRange.Height = Rows(Target.Row + 1).Height 'képmagasság beállítása End If End Sub
Ez egy laphoz rendelt makró. Mikor az A oszlopba beírod egy képed nevét, az alatta lévő cellába behívja a képet az utvonal változóban megadott útvonalról. A kép magasságát a beillesztés sorának a magasságához igazítja, és ügyel a magasság-szélesség arányra.
Más kiterjesztés esetén a .jpg helyett azt írd be!
Egy olyan kérdésem lenne, hogy szeretném azt megoldani, hogy valahova (pl.: A1-es cellába) beírok valamit (pl.: citrom), akkor mondjuk az A2-es cellába ő illesszen be egy képet. (amit én adok meg)
De úgy, hogy több kép is van. Tehát mondjuk van 4 képem. Alma, citrom, narancs és kivi. És az lenne a lényeg, hogyha én az A1-esbe citromot írok, akkor a citrom képet illeszti be az A2 cellába, ha kivit, akkor a kivit...
Ezt részemről megígérem, és az elkészülő kódot is szívesen közzéteszem, annál is inkább, mert abból adatok nem tudnak nyilvánosságra kerülni, még ha esetleg bizalmasak is lennének.
Viszont arra számítok, hogy esetleg napokig tesztelünk (ráadásul magam kipróbálni sem tudom a kódot), és készülnek időnként akár csak néhány ponton eltérő verziók, ezért azt szeretném elkerülni, hogy ezekkel hosszasan terheljük a fórumot.