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.
Tehát Excel beállításai -> speciális -> beállítások megjelenítése ehhez a munkafüzethez -> Objektumoknál megjelenítendő -> "semmi" helyett "minden" beklikkelése.
Egy táblázatba szeretnék beszúrni esetenként sorokat, de a "Az objektumok nem vihetők lapon kívülre" szöveget kapom. A táblán nincs rejtve se sor, se oszlop. Mitől lehet még ilyen?
Milyen módon lehet tudnék ide egy kis minta táblázatot bemásolni?
Próbáltam excelből, word-ből pdf-ből, de semmi sem lesz olvasható.
Nem igazán látszik az eredeti táblázat, legalább a szöveget kimásolom ide:
Azt szeretném megoldani, hogy ha egy lehívás azonosítóit beírom az első 4 oszlopba, akkor minden sor F oszlopában lévő cella nézze végig, hogy ilyen azonosítójú lehívás van-e már a táblázatban, ha van akkor annak az F2 cellában lévő értékét (most ez példaként 250.000 a fenti táblázatban) írja be a saját sorába is az F oszlopba. Ha még nincs ilyen lehívás, akkor ne írjon be a cellába semmit.
Jól látom, hogy sárgára és zöldre akarod festeni bizonyos workbook-ok bizonyos worksheetjeinek A1 celláját?
Milyen hibát tapasztalsz? Fut de nem azt csinálja amit szeretnél (hanem mit?) vagy le sem fut?
Sub Price_check() ' ' Price_check Macro
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show
PriceList = Workbooks(Workbooks.Count).Name CheckFile = Workbooks((Workbooks.Count) - 1).Name Jó esély van arrra, hogy itt elrontja, hogy melyik file a PriceList file és melyik a CheckFile. Lehet érdemes lenne a file-okat azok megnyitásakor hozzárendelni a nevükhöz... 'Zöld
Range("V1").Activate Miért aktiválsz itt bármit is? Mi a szerepe a V1 cellának? Ha a V1-et akarod formázni akkor fentre nem kell az A1, v. fordítva. With Selection.Interior .ColorIndex = 36 .Pattern = xlSolid End With
End Sub
Én lebeszélnélek a Select parancs használatáról, hagyd ki csak lassítja a kódot és nehezebb átlátni.
Az első With / End with átírva:
With Workbooks(CheckFile).Worksheets(1).Range("A1").Interior .ColorIndex = 43 .Pattern = xlSolid End With
Hát nem sokkal szebben látszik, hogy mivel csinálsz mit?
Egy közbenső rész hiányzik még. Ha beírom a szállítás 4 azonosítóját, akkor az ezek által meghatározott lehívás értékét írja be egy cellába.
(Ebből vonnám ki az előbb meghatározott összeget, hogy a lehívásból még hátralévő érték előálljon.)
Ha felviszek egy új sort, akkor végignézné, hogy az ilyen azonosítókhoz tartozó sorokban, van-e érték egy adott cellában (pl. a lehívás teljes összege oszlopban), ha van akkor ide is azt írja át, ha mindenhol üres ez a cella, akkor itt is üresen hagyja.
Ha mindenhol üres ez a cella, akkor az azt jelenti, hogy ilyen lehívás még nem volt korábban, ezért a kezelőnek kell megadni a lehívás teljes értékét.
Az elve megy, de hogyan lehet ezt excelben megfogalmazni?
Szerintem ezt egy "sima" SUMIFS megcsinálja. Ha a (lenti példádnál maradva) II. rész, B alrész, 34-es körzet, 3. lehívás adatok rendre külön oszlopban vannak, pld. A oszlop adata a rész (I, II v. III), a B oszlop tartalmazza az alrész adatot (A, B, stb.) és így tovább akkor egy SUMIFS (NEM sumif) simán kigyűjti, hogy egy konkrét kombinációhoz (II/B/34/3) mekkora mennyiségek tartoznak.
Ha a rendelés és a szállítás más előjellel van rögzítve (pld. rendelések pozitív, szállítások negatív) akkor nem is kell mást csinálni csak összeadni a mennyiségeket.
Vagy félreértem a dolgot.
Ha olyan xl verziót használsz ahol a SUMIFS még nem létezett, akkor egy szép SUMPRODUCT alapú tömbfüggvénnyel ugyanezt ki lehet számolni.
Ha az adatok nem külön oszlopban vannak, hanem egy cellában, akkor előbb LEFT, RIGHT és MID függvénnyel szét kell őket kapni és utána ráereszteni egy SUMPRODUCT-ot.
A feladat röviden: Kiküldünk egy anyagra vonatkozó lehívást (keretszerződés van kötve nagyobb mennyiségekre), aminek az értéke pl. 1000 Ft. A lehívást az előző kérdésem szerinti 3 adattal (I. II. III. rész, A vagy B , és 1-től 40 ig körzet)és egy lehívás sorszámmal azonosítjuk be. Pl. II. rész, B alrész, 34-es körzet, 3. lehívás.
A szállító az esetek döntő részében több (változó számú) szállítással teljesít egy lehívást. (A szállítás ugyan azzal a 4 adattal van beazonosítva)
Arra lenne szükségem, hogy minden szállítás felvezetésénél jelenjen meg, hogy az adott lehívásból még mekkora értékű szállítás van még hátra.
Ezt úgyszeretném megoldani, hogy aki a táblázatot vezeti, annak elég legyen csak a mindig a táblázat utolsó sorába fevinni a bejövő szállítások azonosítóit és értékét és ott egyből képződjön a még hátralévő összeg.( Egyszerűbb lenne tudom, hogy kikeresné az aktuális megrendelést és oda felvezetné, ott számoltatná ki, hogy mennyi van még hátra.)
Eddig csak gyenge elképzeléseim vannak: Minden sorba kell egy olyan cella, ami ugye az adott lehívás teljes értékét tartalmazza. Ezt ha új lehívásról van szó, akkor a kezelő írja be, ha viszont már van ilyen lehívás, akkor meg kellene, hogy keresse a korábbi sorokban a megfelelő értéket.
Aztán a sorban lenne egy olyan cella, ami megkeresi és szummáza az erre a lehívásra vonatkozó szállítások értékeit. Ha ez megvan, akkor ami nekem kell az a kettő különbsége. Na ez az utolső menne... :-)
Bocs, hogy elhúzódott, de meló közben vagyok.
Ui: szerintem a tiedban csak azért működött mert az én képletemben már csak annyi argumentum volt, amit az enyém is elfogadott, ha többet írtam be azt nem mentette le.
Időközben rájöttem, hogy nincs hiba, csak én vagyok a barom. Kaptam a file-t és nem figyeltem, hogy ez még csak 2003-as verzió, ami ezek szerint nem tud ennyi argumentumot. Lementettem 2007-be és így már működik. Mondjuk elég bonyolult a függvény (hosszú). Szóval az elgonbdolás jó volt, azt nem tudom, hogy lehetne e egyszerűbben is megoldani.
Mi legyen a kimenet, jól gondolom, hogy egy cella értéke, ami I, II, vagy III?
A választ függvény első argumentumának egy számnak kell lenni, ennek a számnak a Te fügvényedben a G13-as cellában kell lenni, változnia. Akkor adja eredményképpen a megfelelő választ, azaz azt az argumentumot, amire a G13-as szám utal. Jól gondolom?
Én is segítséget szeretnék kérni, két feladatban mert egyedül már nem boldogulok.
1. Arra lenne szükségem, hogy beérkező iratokat (mondjuk számlákat) 3 körzetbe csoportosítsam két értéktől függően.
Az első érték két karakter lehet mindösszesen, a második kb. 40. Tehát arra van szükségem, hogy egy cella értéke legyen I,II vagy III ha az első adat A vagy B, a második 1-től 40-ig. Azt hittem, hogy ez egyszerű feladat lesz, de én nem boldogultam vele.
Így próbáltam megoldani:
Készítettem egy segédtáblázatot, ahol két oszlop és 40 sor van és mindenhová beírtam, hogy az adott értékek alapján pl. a B, 32 bemenő értékek a II. körzetet jelölik.
Azt hittem a fenti képlet jó lesz, mert ha pl. az F13-ba A kerül, akkor kiválasztja a G13 értékétől függően a megfeleő sort, ha B, akkor ugyan így, de a mellette lévő oszlopből, ha üresen van a cella, akkor nem ír be semmit.
A gond az, hogy a Választ függvényre azt írja ki, hogy ehhez a file tipushoz túl sok az argumentum, pedig a leírás szerint elvileg 254 argumentumig működie kell ennek a függvénynek.
Ha tudna valaki erre valamilyen egyszerűbb megoldást, vagy azt hogy mi a fenti módszerben a hiba, azt megköszönném.
A diagrammnál én is gondoltam erre csak az a baj hogy a nem csak akkor szeretném a diagrammot ha a teljes munkafüzet kész hanem közben is és akkor adnék hozzá uj lapokat ugye és ennek az értékeit akkor megintcsak át kell itni a technikai munkalapra. vagy lehet ezt is automatizálni?
Tegyük fel, hogy három munkalapod és össze szeretnéd adni pld a B2 celláikat.
A munkalapjaid neve és sorrendje legyen pld. osszesito, munka1, munka2 és munka3
Az összesitő lap B2 cellájában most neked valszeg az van, hogy =SUM(munka1:munka3!B2)
Az összes teendőd csak annyi, hogy:
- a munka1 elé és munka3 után beszúrsz egy-egy új ÜRES munkalapot (pld elsoures és utolsoures nevueket. Munkalapjaid sorrendje most: osszesito, elsoures, munka1, munka2, munka3 és utolsoures
- a fenti képletedet (osszesito B2 cellája) javitsd ki arra, hogy =SUM(elsoures:utolsoures!B2)
- ha a jövőben új munkalapot kell beszúrj akkor azt az utolsoures ELÉ szúrd be és automatikusan figyelembevevődik.
A grafikonos problémádnál én csinálnék egy technikai munkalapot ami egy munkalapon tartalmazza a több munkalapról származó adatokat és azt használnám a grafikon adatforrásának.
Hali 2 kérdésem lennem remélem tudtok segiteni:) (office 2007)
az egyik az hogy hogyan tudnám megcsinálni azt hogy 1 munkalapon összeadni az összes munkalap x cellájának az értékét(eddig megy is) úgy hogy ha még adok hozzá munkalapot akkor azt is adja hozzá automatikusan a másik pedig az hogy diagrammot hogy tudok csinálni több munkalapra? arra gondolok hogy a munkalapjaim napok minden nap végén van 1 összegem és ebből szeretnék a legvégén(havi szinten) egy diagrammot csinálni viszont az adattartomány kijelölésénél ha több munkalapot választok ki (pl igy néz ki ='Munka1:Munka3'!$A$1) akkor azt írja hogy a beírt képlet hibás
Szövegként tárolt számot (mert pl. más ezreselválasztót és tizedes jelet tartalmaz, mint az aktuális területi beállításoknak megfelelő) szerintem legegyszerűbben a Data>>Data Tools>>Text to Colums varázsló segítségével tudsz számmá alakítani. A harmadik lépésben az Advanced gombra kattintva beállíthatod, hogy a konvertálandó szövegként tárolt szám, milyen ezr. elválasztót és tizedes jelet használ.
A Te általad említett példánál (csatolt adat) azonban szerintem más lehet a probléma. Jó lenne, ha leírnád pontosan a folyamatot, ahogy a csatolást csináltad.
A Wordben a toolbar formázás helyi dolog (normal.dot szintű téma), tehát te hiába építed be a toolbar gombot/ikont az a többiek gépén nem fog megjelenni. Vagy tévedek?
Köszönöm a tippet! Az oldaltörés törlését már be is építettem a makróba. A kollégák sajnos nem olyan gyorsak a word kézi kezelésében mint én (van, aki sose dolgozott vele), az ő munkájukat megkönnyítendő rakom össze a makrót, amivel tényleg egy gombnyomással meg tudják az alapvető formázásokat csinálni. Csak sajnos az én makróíró tudományom se terjed az alapoknál tovább... :(
Az ikont viszont nem tudom beállítani, a Testreszabás párbeszédablakban semmi olyasmi nincs, amivel ikont lehetne hozzárendelni. A súgóban is kerestem, de ott sincs... :(
Próbáld meg a LEN() függvénnyel megszámolni, hogy hány karaktert lát az excel, az segíthet eldönteni, hogy nem-e valami mutáns számformátummal van-e dolgod.
Áh, feladom. Természetesen próbáltam HELYETTE fgvel is kicserélni üresre"" a szóközt" ", de egyszerűen nem látja azt a szóközt egyik szövegkonverziós fgv sem. Komolyan. (Itt vmi adatkonverzós bug lehet ha táblalekérdezést készítek egy munkafüzetbe - egy másik excel munkafüzetből.
Egyszerűen a manual page break-eket cseréld le (Replace) sima bekezdésvége jelre. A manual page break jele: ^m (de azt hiszem a More/Special alatt is megtalálható a Replace felugró kismenüjében).
A makró gombhoz rendelésénél azt próbáld meg, hogy megcsinálod a "behúzást" ahogy lentebb le is írtad, jobb klikk a behúzott - jelenleg - szövegre és ott lehet lesz valami olyasmi, hogy Text/Icon, vagy hasonló (régen volt már 2003-as word a kezem alatt). Ezt változtasd meg icon-ra, majd ugyanitt valahol a jobbklikk menüben lesz egy icon hozzárendelés.
Bocs, hogy ide írok, de a Word-os topic elég ritkán látogatott. :(
A problémám a következő, egy speciális szövegfájlt (nem .txt) kell megnyitnom Word-ben, és persze egy csomó formázást kell végrehajtani rajta, hogy használható legyen. Eddig egy DOS alapú, 80-as évekből származó szövegszerkesztőben dolgoztunk a fájlokkal, de gondoltuk, hogy ideje lenne haladni a korral. :)
Szóval egy csomó dolgot már tudtam makrósítani, de most az lenne a kérdésem, hogy az oldaltöréseket, amik eleve benne vannak, de rossz helyen, hogyan tudnám makróval kiszedni? Kézzel kicsit macerás...
Ugyanitt kérdés az is, hogy a makrót hogyan tudnám egy gombhoz (ikonhoz) hozzárendelni? Word2003-unk van a cégnél. Excelben tudom, hogyan kell, de itt csak annyit tudok megcsinálni, hogy a makró nevét, pl. Normal.NewMacros.Új behúzom az egyik eszköztárba, és akkor erre a szövegre kattintva indul a makró. De nekem csak egy ikon kellene.
ezt ismerem, de sajnos nem jó. (Ez egy képlet eredménye (=C20*1), azt szoroztam 1-el, de nem "eszi" meg valamiért.... (#ÉRTÉK)
Valamiért nem tudja kezelni az adatkonverziót, ha táblás lekérdezéssel próbálok egy másik munkafüzetből adatokat elérni. (Az eredetiben ez tényleg szám, számként is formázva, mint írtam.)
Sajnos van néhány fv (sumif, countif, indirect) amely nem működik, ha a hivatkozott fájl nincs nyitva.
A probléma megoldására két lehetőséget látok:
1. másold föl a vágólapra az adatforrás táblázatát és csatolva illeszd be a másik állományba. Erre a táblázatra hivatkozz a sumif fv-ben. (Ha akarod ezt a munkalapot később el is rejtheted)
2. A sumif fv helyett használd a sumproduct fv-t (szorzatösszeg).
Úgy túnik, eddig a C:Documents and SettingsuserDokumentumok2011Telefon-Tünde könyvtárban voltak a fileok. Ha átteszed őket a C:temp könyvtárba, akkor a képletet javítani kell, valami ehhez hasonlóra (ez nem valószínű, hogy pont így jó).
Az alap.xls fájlban van egy szumha képlet, ami az AUTO.xls fájlból ad össze:
=SZUMHA('C:Documents and SettingsuserDokumentumok2011Telefon-Tünde[AUTO.xls]12'!$B$5:$B$52;C7;'C:Documents and SettingsuserDokumentumok2011Telefon-Tünde[AUTO.xls]12'!$E$5:$E$52)
Ha megnyitom az alap.xls fájlt csatolás frissísével, akkor #ÉRTÉK! hiba van a cellában,
viszont ha utána megnyitom az AUTO.xls fájlt, akkor megjelenik a helyes érték a cellában.
Amikor a képlet készült, akkor mind2 fájl nyitva volt és jól is működött.
Ha kijelölöm az AUTO.xls fájlban az $E$5:$E$52 tartományt, akkor összeadja az állapotsorban.
Áttettem a c:temp könyvtárba, de úgy sem működött, Excel 2000-esem van, de 2003-mal se jó.
DEC2BIN(7)*DEC2BIN(7) = 111*111 = 12321: Ugyanis attól, hogy te átváltottad binárissá, ő még nem tudja, hogy nem decimális számokat kell összeszoroznia - ezért alapértelmezetten decimálisnak gondolja.
Az lenne a kérdésem, miért számol bizonyos értékeknél helytelenül, ha 2-es számrendszerben készítek szorzótáblát, a szorzók 10-es számrendszerben vannak és a függvényeket szoroztam össze pl.: 8-nál mindig helyes értéket ad /dec2bin(8)*dec2bin(8)= 1000000/, más értéknél pl.:7-nél pedig 2-est és 3-ast is beletesz a számba /dec2bin(7)*dec2bin(7)=12321/ remélem érthető a problémám.
Hát, akkor még használhatod az MMULT worksheet függvényt VBA-ból meghívva: Application.mmult(...)
Előtte csinálj egy tömböt aminek minden eleme 1000 (ajánlom a REPT() függvény és a SPLIT method használatát), a két tömböt már szorozhatod egymással az MMULT használatával. Bizonyos elemszám fölött gyorsabb mint egyenként végig loop-olni.
Azt szeretném megkérdezni, hogy egy cellatartományban lévő értékeket (pl. A1:D5) hogy lehet úgy elosztani pl. ezerrel (ugyanebben a tartományban), hogy ne kelljen minden cellában külön a műveletet elvégezni (tehát kvázi tömbműveletként)?
Ehhez tartozó másik probléma, hogy egy cellatartomány értékeit (pl. A1:D5) hogy lehet tömbváltozóba (a(5,4)) úgy beletenni, hogy az egy művelet legyen (tehát hogy ne kelljen futtatni a sor- és oszlopindexet)?
SELECT Min(t1.plusone) FROM [SELECT fld+1 AS plusone FROM tbl]. AS t1 LEFT JOIN tbl ON t1.plusone = tbl.fld WHERE (((IsNull([tbl].[fld]))=True));
Tízezer soros táblánál egy szempillantás alatt kiadja a végeredményt, segédtábla nélkül, egy lekérdezésbe sűrítve, és ráadásul úgy, hogy a mező nincs is indexelve. Király :-)
- Évek oszlop kitöltése: a "Mióta" és "Jelenlegi dátum"-ból, de a hónapokat is figyelembe kell venni, azaz annak a hónapnak az elsején kell növelni a munkában töltött évek számát eggyel, amelyben a munkavégzés elkezdődött.
- Szorzó oszlop kitöltése "Végzettség" és "Fokozat" tartományokból:
2.
"Adatok" tartományból veszem az adatokat:
Tetszőleges sorszám beírása után Fkeressel hozom a nevet és az osztályzatot. A csoporthoz a H_A-ból viszont csak a jobb szélső karaktert kéne hozni, a Minősítéshez ugyanebből a H_A-ból a bal szélső alapján kiírni, hogy Haladó (vagy K_A azaz kezdő)
Nagyon jól leírta SQLkerdes kolléga a 13822-ben a módszert. Viszont ne feledkezzünk meg arról sem, hogy az EXCEPT (Különbségképzés) kulcsszót kifejezetten erre találtaák ki SQL-ben.
Van ket oszlopom ahol az elso oszlopban ertekek es a masodik oszlopban x szel szeretnem jelolni kivalasztott ertekeket amelyeket egy harmadik oszlopban szeretnem megjeleniteni.
Mondjuk a COUNTNUMBERS-t nem is feltétlenül nehéz létrehozni, mert csak csinálsz egy segédtáblát ami nulla és valami elégségesen nagy szám között minden számot tartalmaz (FULLCOUNTNUMBERS), majd csinálsz egy olyan JOIN-t, ahol csak az ACTUALNUMBERS minimuma és maximuma közötti értékek kerülnek be. Túlbonyolítottam: egy sima WHERE elég ehhez...
- menjünk végig (for next) a lenti számokon a másodiktól kezdve és vonjuk ki a nagyobb sorszámút a kisebb sorszámúból (lenti példa: 1-0)
- ahol a különbség nem egy, ott a legkisebb hiányzó szám, amit úgy lehet előállítani, hogy a fenti kisebb sorszámú számhoz hozzáadok 1-et (5-3 nem 1, hanem kettő, ezért a keresett szám 3+1)
Vagy: állíts elő egy olyan adattáblát (COUNTNUMBERS) ami minden számot tartalmaz a már meglévő adattáblád (ACTUALNUMBERS) minimuma és maximuma között.
Ezután csinálj egy JOINT-ot amit csak azokat a számokat mutatja, amik benne vannak a COUNTNUMBERS-ben, de nincsenek az ACTUALNUMBERS-ben (outer join), majd az így létrejövő "táblának" vedd a minimumát.
Nem igazán Exceles probléma, hanem algoritmus, és nem is Excelben akarom használni, hanem adatbázis-lekérdezésben, de azért felteszem ide, mert itt okos emberek vannak, és hátha van valakinek jó ötlete.
Egy adatbázis mező értékei természetes számok lehetnek. Minden szám csak egyszer szerepelhet benne, de (nyilván) nem mindegyik szám szerepel benne ténylegesen. Például:
0
1
2
3
5
8
23
Az a kérdés, hogy hogyan lehet gyorsan és elegánsan meghatározni azt a legkisebb természetes számot, ami nincs benne a halmazban. (A fenti példa esetében 4.) A kézenfekvő megoldás az lenne, hogy egy For..Next ciklussal, 0-tól a halmaz llegnagyobb eleméig egyenként végignézem a számokat. Ezzel csak az a bajom, hogy nem gyors, és nem elegáns.
Van valakinek jobb ötlete? Az SQL nyelv sajátosságait fel lehet használni a megoldáshoz.
Pedig alap szerintem, hogy pl. egy 30 oszlopot tartalmazó adatmezőben ne kelljen egyesével zongorázgatni az oszlopokon. Most volt egy ilyenem és akkor jöttem ide. (Eddig 4-5-6 oszlopokkat a legrövidebb úton összekattintgattam, de mostanra begurultam)
És lehet, hogy még a Pivottable.PreserveFormatting-ot is érdemes TRUE-ra állítani, hogy ha változtatsz a PivotTábla kinézetén akkor az ne barmolja össze a már beállított számformátumaidat.
Én is a 2007-es ről beszéltem, de ahogy írtam is sajnos sem a beépített piv stílusoknál, sem a custom stílusnál nem lehet számformátumot beállítani, így csak a makro marad, ahogy SQLkerdes is írja. (ahogy eddig tapasztaltam a 2010-es verziónál is probléma maradt :-( )
- a Personal makrobook-odba tegyél egy makrót, amit hozzárendelsz egy gombhoz, amit kiteszel a QuickAccessToolbar-ba
- a makró menjen végig az ActiveSheet minden pivottábláján és annak minden pivotfield-jén (for each ... next ciklus)
- és állítsa át a pivotfield(indexszám).numberformat-ot olyanra amit szeretsz
Valami ilyesmire gondolok:
Sub valami() Dim PT As PivotTable
Dim PF As PivotField
On Error Resume Next
For Each PT In ActiveSheet.PivotTables
For Each PF In PT.PivotFields
PF.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
Next
Next
End Sub
Ha nagyon kreatív hangulatban vagy, akkor még azzal is játszhatsz, hogy programilag bekéred, hog hány tizedesjegyet akarsz látni, akár az elején, akár pivotfield-enként.
Szia, köszönöm. Félreértettelek. A Hozzászólásod alapján azt gondoltam kifejezetten a pivottábla keretein belül van valami sablonkészítés. Ezt ismertem, és sajnos a kérdéses pivotos esetben nem is használható (mint ahogy írtad is).
Egy ötletem van 2007-esben. Ebben már van egy csomó beépített kimutatás stílus - ott szerintem létre is lehet hozni a megfelelőt.
A sablon készítés egyszerű (lsd alább), de sajnos nem jó, mert a pivot fölülírja. Be lehet állítani alapértelmezett stílust a pivot táblára, de ott pedig nem lehet számformátumot megadni.
Még keresem a megoldást.
sablon készítés:
Egy üres munkafüzetet megformázol úgy ahogy szeretnéd (akár szöveget és értékeket is beírhatsz) és sablonként mented el (Save As Type Template xltx) Ilyenkor felajánlja a template könyvtárat (Doc. and Sett.UserNameAppl.DataMicrosoftTemplates)
Ezután ha új munkafüzetet nyitsz, (Office gomb-New-MyTemlate) kiválaszthatod a sablonodat. Ha a sablon neve pl. PivMfüzet akkor a címsorban majd ez áll: PivMfüzet1.
A kijelölés szinét a windowsban lehet (lehetne!) beállítani
Display properties/Appearance/Advanced, majd az Advanced Appearance ablakban kiválasztani a Selected Item-et és megváltoztatni a szinét. Sajnos azonban ez excel 2007-nél nem működik :-( (Word 2007-nél igen)
Eddig azt találtam a legjobbnak ha a szin beállításoknál a gammát csökkentettem (lehet a kontrasztot is) Diplay Properties/Settings/Advanced és az új ablakban (videokártya függő) a Color fülön módosítottam a beállításokat.
Üdv
ps:
A pivotban nem lehet alapértelmezett érték formátumot beállítani. Sablont viszont lehet készíteni és azt használd, ne a normált módosítsd.
Amit te ábrázoltál, az igazából nem egy út - idő diagram, ahogy az szokott lenni, hanem tulajdonképp egy táblázat, amiből le lehet olvasni, hogy adott v kezdősebesség mellett mekkora a fékút, ami egy egyenes vonalú egyenletes mozgásból áll a reakcióidő leteltéig, majd egy lassuló szakaszból.
Próbáld meg amit kifejezni akartál egy út(idö) vagy sebesség(idö) alakban ábrázolni! :-)
No, ezt kipróbálom ha lesz időm rá, köszi. Amúgy nagyon úgy emlékszem, hogy régen láttam ilyen beállítást, most az istennek sem találtam meg. (Még 2003-asban)
köszönöm szépen az ötletet - egyébként makróval menne - de nincs rá szükség és egyéb okok miatt nem is optimálás (máshol nincs engedélyezve, kinyírja a undo/redo funkciót stb...)
Egyébként - utalva a kommentezett részre - nem esztétikai a probléma, hanem valószínűleg színlátási. Nekem a sok fehér cella közé olvad ez a szín és nem látom. (Nem hiszem én vagyok az egyetlen...). Persze a cellaháttérszínt lehet alapértelmezettet választani - és ettől talán meg is oldódik a probléma.
Mintha azt olvastam volna valahol, hogy a Normál stílus-t használja, így ha a Normál stílusod számformátumát átállítod (jobb klikk, Modify vagy bármi is van a magyar verzióban) akkor az hatással van a Pivot táblára is.
Rossz hír, hogy a beállítás helyi, vagyis ha egy másik kollegád megnyitja és az ő Normál stílusa nem olyan mint a tied, akkor nem azt a formátumot fogja mutatni, mint a tieden. Gondolom egy megnyitáskor a háttérben lefutó kis makró ezt meg tudja oldani, de sok helyen a makrók alapból tiltva vannak.
Hát sajnos a programozáshoz sem értek. Ahogy a kérdésben írtam talán az excellhez egy picit, és itt a hangsúly a picin van.
Csak, hogy érthetőbb legyek az oldal adminisztrátora természetesen nem én vagyok. Egyébként ez egy népszerű online játék oldala ahonnan szeretném az adatokat bekérni egyszerű szöveges formában. Igazából nem is jó a megfogalmazás mert nem adatokat kérek be hanem az oldal bizonyos részeit az excel lemásolja és beilleszti a megadott cellákba, mint szöveg. és innen használom én fel stb,stb,stb...
Ezzel nem is lenne baj csak az oldalra be kell jelentkezni, egy legördülő menüből kiválasztani hanyas szerverre szeretnék belépni, felhasználónév, jelszó.
Bocs. Kicsit eltértem a tárgytól. Nos PHP-hez nem értek, ezért indultam erre. De nem tudom a megoldást. (Ha van.)
Ebben igazad van, robbantomester de nem indíthatok minden excel tábla nyitáskor új adatbekérést. Ugyanezt a megoldást írtam le a kérdésben is csak nem új adatbekéréssel nyitom ki az exel saját böngészőjét hanem a meglévő egyik szerkesztésével. Végül is mindeg hogyen de ez így nagyon körülményes. Ezt a megoldást szeretném leegyszerűsíteni. Jelenleg kb 40 bekérés van különböző lapokról, ami előre be van állítva és ezeket szeretném frissíteni automatikusan, vagy belépő képernyőről.
Az Excel programozásával kapcsolatban még kissé hadilábon állok, de ezt a problémát én nem erről az oldalról fognám meg, hanem inkább webes oldalról, vagyis PHP-t használnék, mivel a dinamikus tartalmak nagyrészét szerver oldalon lefutó scriptek állítják elő. PHP alkalmazásával sokkal megbízhatóbb adatgyüjtést tudsz végezni egy honlapról, és tudod figyelni a tartalomváltozásokat is, és már szerver oldalon képes vagy az adatok ellenörzését elvégezni, és a szükséges adatokat külön fájl(ok)ba, adatbázisba, akár (excel táblázatba) is ki tudod gyűjteni. Persze ez a módszer, akkor a legjobb, ha a weblap adminisztrátora vagy. Ha a weboldalt nem tudod szerkeszteni, akkor is tudsz adatokat gyűjteni, de ebben ez esetben teljesen mindegy, ha maradsz annál a módszernél, amin már elindultál.
Hogyan lehet azt megoldani, hogy ha egy olyan oldalról szeretnék adatokat ahová előbb be kell lépni, felhasználónév, jelszó stb. (Sőt még szervert is kell előbb választani.)
Most úgy működik, hogy meg kell nyitnom az "Adatok" fülön a kapcsolatok szerkesztését, stb stb stb, az excel saját böngészőjén (Pl. az internet explorerben, vagy a mozzilában nem jó mert az exel ezt nem látja, vagy fogadja el.) belépni az oldalra, majd bezárni az ablakot, és csak így tudom frissíteni az adatokat.
Jó lenne a belépést automatikusan megoldani, előre megadott adatok szerverszám, felhasználónév, jelszóval.
Vagy ha nem lehet automatikus, legalább valahogy, mert akkor szerkesztenék az excelben egy belépőképernyőt amit a saját böngészője lát, és be lehet lépni az oldalra és utánna frissíteni az adatokat.
De hogyan? (Programozásban nem vagyok otthon! Az exelt értem talán egy picit.) Tud valaki segíteni?
A legegyszerűbb, ha egy aposztrófot '-ezt (magyar billentyűzeten shift+1) írsz be legelőször, akkor szövegként fogja értelmezni a utána lévő karaktereket.
sziasztok, kérdésem van:) azt hogyan tudom elérni, hogy ilyen formátumot is be lehessen írni a cellába: "0001", "00002", vagy "00-0146"...stb. ahányszor 0-át írok egy számsor elejére, mindig kijavítja és elhagyja a 0-át. kerestem a beállításoknál, meg a cellatulajdonságpknál, de nem találtam.
Köszi, ismerem a for ciklust, ebből hiányzik az éppen aktuális HianyzoSzamlaSzam tömb eleme... azt akarom kiíratni.
A Te ciklusod végeredménye, ha o=13:
Ez(eke)t a számlaszámo(ka)t nem találtam az '1' nevű fájlban:
12
A hiányzó számla számok egy-egy cellából vannak feltöltve, egy szmlaszám így néz ki pl.:00000012, nemcsak az utolsó számot akarom kiíratni, hanem az összes hiányzó számlaszámot!
Köszönöm a segítségedet. Több vonalat kellett felvennem, de azok már sikerültek. Nektek is megmutatom, mert maga a téma érdekes :-)
Adott sebességgel haladva a vízszintes rész a reakcióidő alatt megtett távolság (amíg a jármű sebessége nem változik), az ez utáni rész lesz a fékút.
Nagyon jól szemlélteti ez pl., hogy ha 50 km/h sebességgel halad valaki és 30 méternél elé lép egy gyalogos, pont meg tud állni. Azonban 80 km/H sebességgel már az ugyanúgy 30 méternél 60 km/h (!) sebességgel üti el a személyt.
Diagramot szeretnék készíteni, de nem adja azt a képet, amit én szeretnék.
Azt szeretném jelölni, hogy a függőleges tengelyen egy 20-as érték a vizszintes 5 értékig egyenesen marad (tartja a 20-at), majd innen lemegy a vízszintes tengelyig. Ez a "lemegy" kezdődik az előző 5-nél és befejeződik a vízszintes 8-nál.
A meredekség akkor 0, ha tetszőleges x értéknél, ugyanakkora y érték járul, magyarul a pontok egy az x tengellyel párhuzamos egyenesbe esnek. y= b alakú fv.
Ennek párja a függőlegesbe eső pontok, aminek x= const az alakja. De ez nyilván nem igazán fordul elő a gyakorlatban ...
Excel táblázatban,hogyan lehet a táblazatokat (a benne lévő címeket) ABC sorrendbe helyezni.Remélem nem kell újra írnom az egészet mert ABC sorrendbe kellene tennem utólag.
A meredekségre akkor kapsz 0 értéket, ha vagy x vagy y összes értéke változatlan. Ebben a két esetben viszont nincs értelme trendről beszélni. Ha a két m=0 érték között szertnél különbséget tenni, szerintem vizsgáld a bemeneti adatokat. Persze ez csak egy ötlet.
Az =INDEX(LINEST(adatok),1) tényleg megadja a meredekséget, ha pedig 2-est írsz akkor az y metszését (b), csak azt nem értem miért kell bonyolítani, hiszen ha csak a meredekségre vagy kivácsi, akkor a SLOPE is jó, ha pedig csak a b-t akarod kiszámolni arra ott az INTERCEPT :-)
Ha mindkét érték (x;y) mért adat és az egyiket állandónak mérik, míg a másik változik az arra is utalhat, hogy van egy harmadik paraméter (z) ami befolyásolja y értékét.
pl. mérem a hőmérsékletet és a nyomást és mindig azt kapom, hogy a hőm. nem változik de a nyomás igen. Ez még nem jelenti azt, hogy a hőm. nincs hatással a nyomásra, csupán arra utal, hogy van még egy másik tul. ebben az esetben a térfogat ami közben változik.
Viszont a trend alapján számolja a forecast értékeket, és így ha a TREND által előállított két "pont" koordinátáira alkalmazzuk azt az egyszerű képletet amit lentebb angolul bemásoltam, akkor megkapjuk a trend meredekségét.
Másik megoldás az =INDEX(LINEST(adatok),1) alkalmazása, mert a LINEST egy tömböt ad eredményül, aminek az első eleme a trendvonal slope-ja, vagyis meredeksége.
Igazából ha a trendvonal függőleges akkor az azt jelenti, hogy az y érték semmilyen módon nem függ az x értékektől, vagyis színek (RGB) esetében nincs semmilyen összefüggés az RGB kódok között. Ezért a nulla eredmény.
Itt is van az általános iskolai matek, vonal meredeksége:
Excel help:
The equation of a straight line is y = mx + b. You can describe any straight line with the slope and the y-intercept:
Slope (m): To find the slope of a line, often written as m, take two points on the line, (x1,y1) and (x2,y2); the slope is equal to (y2 - y1)/(x2 - x1).
Y-intercept (b): The y-intercept of a line, often written as b, is the value of y at the point where the line crosses the y-axis.
Once you know the values of m and b, you can calculate any point on the line by plugging the y- or x-value into that equation. You can also use the TREND function.
Asszem itt a megoldás: "Az (1,1), (1,2), (1,5) pontok trendvonala is függőleges."
Az a vonal szerintem nem trendvonal (excelben csinálj a fenti három pontból egy x-y scatter-chart-ot és rakasd rá a trendvonalat!). Most már csak azt kellen előásnom kitudjahányévtávlatából, hogy akkor mi :-)
Arra gyanakszom, hogy valami általános iskolai szintű dologról beszélünk és majd mind a lábfejünket bámuljuk vöröslő arccal, amikor rájövünk a megoldásra...
Mindkettőtöknek igazatok van, ami úgy lehetséges, hogy nem ugyanarról beszéltek.
Erdeibóróka három pont legjobban közelítő egyeneséről beszél, Sztai meg két három számból álló vektor közötti korrelációról (1, 1, 1) és (1, 2, 5).
Sztainak igaza van, mert ha az első vektor ugyanazt a számot tartalmazza háromszor akkor nagy a valószínűsége, hogy nem korrelál a három különböző számból álló második vektorral.
Borókának is igaza van, mert a vektorok n-edik számpárjait ha koordinátának fogom fel (1,1) (1,2) és (1,5) akkor az így kapott három koordináta valóban egy függőleges vonalra "esik".
Szerintem a LINEST függvény a Sztai féle megközelítést alkalmazza, ezért ad az azt máshogy értelmező Borókának értelmezhetetlen (0) eredményt. A kapott nulla eredmény pontosan azt mutatja amit Sztai mond, vagyis hogy a két vektor között egyáltalán nincs korreláció.
A kérdés mostmár csak az, hogy hogyan állítsuk elő azt a számot amit Boróka szeretne látni :-)
Mérnek kétdimenziós adatokat. Mindkét eredmény mért érték. Ezeket ábrázolják egy síkon. Nem lehet tudni milyen értékeket fognak mérni,de ezek lehetnek egy vonalban. Vagy lehetnek olyan eloszlásban, hogy a trendvonaluk függőleges. A programnak bármilyen mérési eredményeknél korrektül kell működnie. Kellene.
(Tulajdonképpen színeket mérnek és rgb, azaz red, green, blue értékeket kapunk, de ezeket hála istennek levetítik egy síkra, és így csak kétdimenziós a probléma) Tartok tőle, hogy minél többet magyarázok, annál érthetetlenebb vagyok.
Igaz. Azonban ha arra vagyok kiváncsi, hogy két érték között (x;y) van e összefüggés, akkor nem állandó x értéknél mérem y-t. Legalább is józan paraszti ésszel így látom, az elméleti matematika pedig egy külön állatfaj :-)
Úgy gondolom, hogy akár x akár y értékét mindenhol nullára állítani értelmetlen, mert az azt jelenti, hogy a két érték között nincs összefüggés tehát nem is érdemes keresni.
A probléma az, ha megadom a (x,y) szerint (0,1), (0,2), (0,3) pontokat, amik egy függőleges egyenesen vannak, a legjobb trendvonal az y tengely lesz, tehát m = végtelent kellene kapnom. De nullát kapok.
Ugyanúgy, mint a (1,0), (2,0) (3,0) pontokra, ahol a trendvonal az x egyenes, és a meredeksége valóban nulla.
Még két kétrésem lenne. Az egyik, amit korábban már írtam, hogy tudom levédeni a munkalapot úgy, hogy a dinamikus lista működjön. Egyrészt szeretném lekorlátozni max 40 kiadványra, azaz hogy max. csak ennyit vihessenek be, másrészt meg nem szeretném, ha a formátumon, a képleteket, sorokon és oszlopokon változtatni tudna a felhasználó, hanem csak azt, hogy adatot töltsön be. Bármilyen védelmet állítok be a munkalapra vagy a file-ra, onnantól kezdve nem megy lejjebb a dinamikus lita, ha ujabbat próbálok hozzáadni.
A másik meg az - ami az elsőhöz azért valamilyen formában kapcsolódik is -, hogy tudom a felhasználó arra ösztökélni, hogy minden esetben a következő sorba írjon. Tehát, ha a kiadványokból már benn van kettő, akkor a harmadik sorba írjon. Ugyanis, ha nem így tesz, és a negyedikbe ír, akkor is megakad a dinamikus lista... (még nincs levédve, úgyis...)
Nemigen tudom csatolni. Ez egy icipici része egy jónagy (többezer sor) macronak.
Csak letisztítva ez a probléma lényege.
Közben lett egy ötletem, az Excel valami négyzetösszeges képlettel számolja a lineáris illesztést, azt kellene kiszámolnom nekem is. Rögtön látnám hol van nullával osztás. (Elméletem szerint a számoláskor valahol nullával osztásnak kell lennie, mire az Excel nem hibát ad, hanem nulla eredményt.)
Amúgy mérési adatokról van szó, akármi lehet. Valós számok.
Aztán akármit mérünk, azzal kell tudnom számolni, és kell tudnom ábrázolni.
Szerintem ez nem megfelelő, mert az adatérvényesítésnél üres sorok is vannak és a kérdező pont ezt szerette volna elkerülni. Másodszor abba az oszlopba már alá nem lehet írni semmit, mert az is megjelenik a legördülő listában. Egyébként az Ofset nél is ez gondot jelent, mert egy lejjebb található adat módosítja a tartományt.
Én mindenkinek melegen ajánlom a listává ill. 2007-ben táblává történő konvertálást.
Mennyit agyaltam rajta... Megkérdeztem a Microsoftot is.. Valószínűleg nem olvasták el rendesen, mertz "üres mezők mellőzése"-t javasolták kipipálásra...
Lehet még egy kérdésem? Le tudom védeni a munkalapot azért? Próbáltam az adott cellákat levédeni, úgyhogy engedélyeztem a nem védett cellákba a klikkelést, és úgy is, hogy új sorok létrehozását is engedélyeztem, de nem megy...
A cél az lenne, hogy max 40-et vihessenek be, és a formátumon, az érvényesítéseken (pl, hogy csak x hosszúságú szöveg, vagy csak 1 és 50 közötti szám legyen bevihető) ne tudjanak változtatni!
Az OFSET fv is tökéletes (régen így tudtunk din. listát készíteni), de aki nem ismeri, annak nehéz az argumentumokat megadni a név managerben, hiszen fejből kell tudni. Ezt könnyíti meg a listának (2003), ill. a táblázatnak (2007-10) a használata.
A dinamikus listát (szerintem) egyszerűbben is létre lehet hozni.
A Munka1 A oszlopába bevittem az adatokat – címsor nélkül.
Adatok - Definiált nevek - Név megadása.
Név -> kiadványok, Hivatkozás -> =OFSZET(Munka1!A1;0;0;DARAB2(Munka1!A:A);1)
A beszúrandó helyre Adatok - Érvényesítés - Megengedve: Lista - Forrás: =kiadványok
Ha mégis akarsz címsort adni a Munka1!A1-be, a Hivatkozás képlete:
=OFSZET(Munka1!A1;0;0;DARAB2(Munka1!A:A)-1;1)
Úgy vettem észre, hogy a 2007-es verziónak van egy (?) betegsége. Miután bevittem az ofszetes függvényt a megadott névhez, önkényesen megváltoztatja a képletet. Ezt a Képletek - Definiált nevek - Névkezelőjében korrigálom, ezután már megmarad.
1. Azon a mlapon ahol a kiadványok vannak és már elnevezted a tartományt (b1:B40) kiadványoknak de még nem írtál be könyveket, hozz létre egy táblát: jelöld ki a b1:b2 tartományt:
insert tab/tables csoport/table, jelöld be, hogy van fejléc és ok
Automatikusan kapsz egy formázott táblát, a jobb alsó sarkában egy kis háromszög jelzi, hogy addig tart. Ha most b2-be majd b3 ba beírsz valamit a tartományod nő (a háromszög most már b3-ban van. Ha formátum nem kell, eltávolíthatod ill módosíthatod a Table tools - Design tab/Table Styles csoportban válassz mást.
2. módosítsd a már meglévő nevet pl. kiadványok: Formulas tab/Defined names/Name Manager. A névhez tartozó tartományt módosítsd kijelöléssel ($b$2:$b$3) ok.
Ettől kezdve a kiadványok tartomány dinamikus lesz.
3. A másik munkalapon, ahol rendezvények vannak, jelöld ki azt a tartományt, amelyikre az adatérvényesítést állítod be és a lista forrásaként a tartomány nevét add meg (F3-at nyomva megkapod a létező nevek listáját és onnan is beszúrhatod) List Data Source:=kiadványok
Ettől kezdeve a legördülő lista panelod mindíg azokat a könyveket ajánlja föl amelyek a névhez tartozó dinakus listában szerepelnek. Próbáld ki, írj be a kiadványok munkalapon a b4-be valamit-->enter és ellenőrizd a rendezvények munkalapon a legördülő listádat.
Ha nem működik, ellenőrizd a Name Manager-ben, hogy a Kiadványok tartomány ugyan az e mint a TableX (pl. Table1) Ha nem akkor a névhez tartozó tartományt módosítsd ugyan arra mint a TableX
4. A kiadványok mlapon kitörölheted a próbaként megadott három címet:
jelöld ki a b2:b4 tartományt-->jobb klikk és Delete-->Table rows
Ha mindent jól csináltál: a Name Managerben lesz TableX és Kiadványok és mindkettőnek a tartománya ua: $b$2:$b$2. Ez a lényeg és hogy az adatérvényesítésnél erre a névre hivatkozz.
Az a baj viszont, hogy mivel ez űrlapként funkcionál, amit kiküldünk egy-két helyre, a 40 üres mező már adva van az az elején. Ezt a 40-et neveztem el "kiadvanyok"-nak (mondjuk B1:B40). Viszont, amikor eljut a felhasználóhoz, vagy bevisz 40-et, vagy csak 10-et. A többi üresen marad. Hogy mennyit, azt előre nem tudom. (Azaz csak B1:B10-ig lesz benne kiadvány, B11:B40-ig semmi.) De mivel a legördülő lista a "kiadvenyok"-ra(B1:B40) vonatkozik, ezért kijön a listában egy rahedli üres sor :(((
A beírt könyvcímeket jelöld ki és rendelj hozzá nevet, majd alakítsd át listává úgy, hogy a fejléc is legyen kijelölve. Ha ezek után az adatérvényesítésnél a listát választod és forrásként a lista nevét adod meg az csak a listában meglévőket fogja mutatni. Ha a lista bővül, akkor a legördülőben is megjelennek az újab címek.
2007-ben annyi a különbség, hogy a listát táblázatnak nevezi Create List helyett format vagy insert table.
Adott egy táblázat 2 munkalappal. Az egyikben a felhasználónak lehetősége van 40 egymás alatti mezőbe 40 könyvcímet (vagy akár kevesebbet, ha nem tölti ki az összes mezőt) bevinni. A másik munkalapba bevezetheti a rendezvényeit, és azokhoz legördülő menüvel hozzárendelheti a kiadványok címeit (1 rendezvényhez 1 kiadványt). A kérdésem az, hogy hogyan tudnám megoldani, hogy az Adatok/Érvényesítés paranccsal létrehozott legördülő menüben a 40 mezőből csak azok jelenjenek meg, amelyek nem üresek. (A felhasználó ugyanis ha bevisz 15 kiadványt a 40 helyett, akkor 25 üres sor jelenik meg a listában a 15 kiadvány mellett.)
Van egy olyan opció az adatok/érvényesítés /beállítások fül alatt, hogy "Egyéni" ide elvileg logikai függvényt be lehet írni a legödülő lista tartalmának megállapításához. Erre nem tudtok esetleg valamit?
Ha tudtok, segítsetek légyszi, mert megakadtam ennél... :(
Function Rendezett_tomb(bemeneti_tomb) Dim Result, i As Integer
ReDim Result(LBound(bemeneti_tomb) To UBound(bemeneti_tomb)) For i = LBound(bemeneti_tomb) To UBound(bemeneti_tomb) Result(i) = Application.WorksheetFunction.Small(bemeneti_tomb, i) Next Rendezett_tomb = Result End Function
Na, azért csak összeszedtem magam és írtam egy olyan algoritmust, ami már tetszik is :-)))
Ez sokkal egyszerűbb és rövidebb is.
Sub TombRendezesCsereBerevel()
Dim tomb(1 To 50) As Integer Dim adat As Integer 'beolvassuk az adatokat az elso oszlop első 50 sorából For i = 1 To 50 tomb(i) = Cells(i, 1) Next i ' 49-szer csereberélünk For j = 1 To 49 ' végignézzük a tömböt, ha van szomszédos elem rossz sorrendben, megcseréljük For i = 1 To 49 If (tomb(i) > tomb(i + 1)) Then adat = tomb(i) tomb(i) = tomb(i + 1) tomb(i + 1) = adat End If Next i Next j ' a rendezett adatokat visszaírjuk a 3. oszlopba For i = 1 To 50 Cells(i, 3) = tomb(i) Next i End Sub
Dim tomb(1 To 50) As Integer Dim rendezetttomb(1 To 50) As Integer Dim kesz(1 To 50) As Boolean Dim min As Integer Dim ind As Integer 'beolvassuk az adatokat az elso oszlop első 50 sorából For i = 1 To 50 tomb(i) = Cells(i, 1) Next i ' a kesz tomb osszes elemét hamisra állítjuk For i = 1 To 50 kesz(i) = False Next i ' 50-szer megkeressük a legkisebb elemet For j = 1 To 50 'a min változó kezdeti értéke legyen nagyobb, mint bármelyik adat min = 10000 ' megkeressük a legkisebb elemet a tömbben For i = 1 To 50 If ((min > tomb(i)) And Not kesz(i)) Then min = tomb(i) ind = i End If Next i 'ezt elmentjük a rendezettombbe rendezetttomb(j) = min 'a kesz tombben ezen indexű elemet megjelöljük kesz(ind) = True Next j ' a rendezett adatokat visszaírjuk a 3. oszlopba For i = 1 To 50 Cells(i, 3) = rendezetttomb(i) Next i End Sub
Ja, azt elfelejtettem, hogy sajnos csak egész órákat számol, azaz nem számolja a tört órákat! :( Ha gondolod, akkor lehet még fejleszteni, de azt már csak holnapra! :)
Na erre mondtam,hogy tök sötét vagyok az excelhez. fogalmam sincs mit kezdjek ezzel amit írtál. ha elküldöd az excel file-t akkor tudom,hogy ezt akartam vagy nem.
persze ezzel nem követelni szeretnék csak másképp nem értem amit írsz:))
Igen, először én is azt hittem, hogy az arra jó (logikus lenne), de kkiderült, hogy azt arra használják, hogy az adatbevitelnél a felhasználó, ha rákattint a mezőre, azt követően ne mehessen el onnan úgy, hogy nem töltötte ki a mezőt (persze egy del-lel még ezt is ki lehet játszani).
Talán ott lehet a kutya elásva, hogy az adatok/érvényesítés/beállítások fülnél a "lista" helyett az "egyéni" opciót kéne választani, ahova logikai függvény vezethető be. De én nem találtam egy megfelelő logikai függvényt sem erre... :(
Igazából az a gáz, hogy egy honlapot összerakok nagyon hamar pedig tele van forráskódokkal meg minden okossággal de ez az excel, hááááát nem mondom....
TUd valaki segíteni nekem excel legördülő menü esetén hogy szűrhetem ki az üres menüket?
Adott egy táblázat 2 munkalappal. Az egyikben a felhasználónak lehetősége van 40 egymás alatti mezőbe 40 könyvcímet (vagy akár kevesebbet, ha nem tölti ki az összes mezőt) bevinni. A másik munkalapba bevezetheti a rendezvényeit, és azokhoz legördülő menüvel hozzárendelheti a kiadványok címeit (1 rendezvényhez 1 kiadványt). A kérdésem az, hogy hogyan tudnám megoldani, hogy az Adatok/Érvényesítés paranccsal létrehozott legördülő menüben a 40 mezőből csak azok jelenjenek meg, amelyek nem üresek. (A felhasználó ugyanis ha bevisz 15 kiadványt a 40 helyett, akkor 25 üres sor jelenik meg a listában a 15 kiadvány mellett.)
Segítsetek nekem a megoldásban, ha tudtok, egyszerűen nem találok rá semmit...! :((((
Hóeltakarításról van szó, ilyenkor általában 30-40 órákat dolgoznak az emberek, ezért lenne jó különválasztani az éjjeli és nappali időt. Az órabér természetesen nem változik. nappali 750, éjjeli 1000.
Igazad van, először arra gondoltam, hogy a cella tulajdonságát veszem alapul, de az nem működik, ahopgy Te is írtad. Akkor marad a feltételes formázás függvényeinek VB-be való fordítása, azok feltételei alapján megszámolni, az járható út! :)
A tömb az egy VB tömb, amit így deklaráltam Dim tomb(1 to 50) As Integer, és egy for ciklusban töltöm fel adatokkal. Az adatokat cellákból veszi, de azt nem rendezhetem sorba, ezért megy sorba, és ahogy sikerül úgy tárolja.
Egy kérdésem, illetve egy kérésem lenne hozzátok akik kenitek-vágjátok az excelt.
Szükségem lenne egy táblázatra ami kiszámolja az emberek munkaidejét nappali és éjszakai múszakban is, adott dátumtól dátumig. A nappali órabér 750ft az éjszakai 1000ft. Megpróbálok egy képet berakni, hogyan is képzeltem el. Jó lenne ha tudna valaki segíteni mert sík hüje vagyok az excel függvényekhez.
Meg persze egy makrót is lehet rá írni, az helyben megcsinálja, de elnézve az eddigi hozzászólásaidat nem gondolom, hogy ebben segítségre lenne szükséged :-)
Tömb alatt azt érted, hogy több cella amelyek valamely módon határosak egymással, de nem 1 sor v. 1 oszlop a dimenziójuk? Pld: A1:C3 (9 cella)?
Nos, helyben nem nagyon lehet őket sorrendbe rakni.
De a LARGE (NAGY?) függvény használatával függvényileg sorrendbe tudod őket rakni egy másik helyen a fenti példánál maradva pld az A10:C13 tömbben.
Mondjuk fontos eldönteni, hogy egy 3x3 méretű tömbben hogyan legyenek elrendezve a számok (pld egyre csökkenő számokkal töltjük fel a sorokat v. az oszlopokat?)
Van egy tömb, amiben számok vannak, sajnos nincsenek sorban.
Hogyan lehet egyszerűen növekvő sorba rendezni őket?
Egy bonyolult módszer van, hogy egy-egy cellába beíratom őket, az excel-lel sorba rendezem, és utána a cellákból feltöltöm ismét a tömbbe, de ez szerintem macerás!
Én erre inkább a DARABTELI függvényt használnám, mégpedig a feltételes formázásnál használt kritérummal. (Ha a feltételes formázás alatt tényleg AZT érted)
Segítséget szeretnék kérni hogyan lehet megszámolni egy adott tartományban lévő olyan cellák barabszámát aminek a háttérszíne pl. narancsárga (vagyis feltételes formázással színezett)?
bekéri a szöveget, de azt Te bárhonnan beadhatod neki, aztán bekéri a keresett karaktert, amit szintén bárhonnan megadhatsz neki, aztán a végén kiírja a darabszámot (j) egy ablakba, amit akár máshol is felhasználhatsz! :)
Sub szamolas() Dim i As Integer Dim j As Integer Dim myStr As String Dim myNewStr As String Dim mychar As String Dim myStrLen As Integer j = 0 myStr = InputBox("Add meg a szöveget!") mychar = InputBox("Add meg a számlálandó karaktert!") myStrLen = Len(myStr) For i = 1 To myStrLen myNewStr = Mid(myStr, i, 1) If myNewStr = mychar Then j = j + 1 End If Next i MsgBox ("darabszám=" & j) End Sub
Ha ugyanabban a könyvtárban van az excel file, akkor arra itt egy megoldás.
Ha jól értem, akkor word-ben akarsz hiperhivatkozást, akkor egy tetszőleges word file-hoz rendelt visual basic eseménykezelőjébe "ThisDocument"-be másold be. Aztán metsd el a word file-t ugyanabba a mappába ahol az exceled is van.
A word megnyitáskor beolvassa ezt a makrót, és egy hiperlinket ír be a kursor helyére, arra ctrl-al kattintva már nyílik is meg az excel file.
A "fileName helyére írd be az excel file nevét.
A Cim = kezdetű sorban van középen egy per jel, az nem per, hanem fordított per, azaz backslash, csak az sajnos törlődik! :(
A word bezáráskor töröl mindent, és ment.
Private Sub Document_Open() Eleresi_ut = Application.ActiveDocument.Path FileName = "12345.xls" Cim = Eleresi_ut & "/" & FileName ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:=Cim, SubAddress:="", _ ScreenTip:="", TextToDisplay:=Cim End Sub Private Sub Document_Close() Application.DisplayAlerts = False Selection.WholeStory Selection.Delete Unit:=wdCharacter, Count:=1 Application.ActiveDocument.Save End Sub
Én nem arrag ondotlam, hogy a fájlt mindíg keresse, hanem azt, hogy a forrás fájl helyét magához viszonyítva adhassam meg.
Tehát, hogy a célfájlhoz képes egy szinttel feljebb, lejjebb, vagy u azon könyvtárban találnám meg.
Ehhez nem kell állandóan figyelni, hogy hol a fájl.
Ha nincsott, ahova mutat, pl. abban a könyvtárban, amiben a célfájl is, akkor persze nem tudja megnyitni, de én úgy küldeném a hálózaton, hogy a mappában mindkét fájl is megvan.
Az a baj, hogy ez nem olyan hivatkozás, mint pl. a html-ben, ahol könnyen meg tudom oldani, itt a csatolt adatok elérését kéne módosítani.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h8:h157,i8:i157,j8:j157,k8:k157,l8:l157")) Is Nothing Then Target.Value = Cells(Target.Row, 4).Value For i = 8 To 12 If Target.Column <> i Then Cells(Target.Row, i).ClearContents End If Next i Cancel = True End If If Not Intersect(Target, Range("m8:m157,n8:n157,o8:o157,p8:p157,q8:q157")) Is Nothing Then Target.Value = Cells(Target.Row, 5).Value For i = 12 To 17 If Target.Column <> i Then Cells(Target.Row, i).ClearContents End If Next i Cancel = True End If If Not Intersect(Target, Range("g8:g157")) Is Nothing Then Target.Value = ClearContents If Cells(Target.Row, 4).Value <> "" Then Target.Value = 0 - Cells(Target.Row, 4).Value ElseIf Cells(Target.Row, 5).Value <> "" Then Target.Value = Cells(Target.Row, 5).Value Else MsgBox ("Mindkét cella üres") End If Cancel = True End If End Sub
Pár nappal ezelőtt már kaptam itt egy makrót, amit picit átalakítottam, és most egyébként remekül működik. De egy újabb funkciót is jó lenne, ha tudna, de nem tudok rájönni.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("h8:h157,i8:i157,j8:j157,k8:k157,l8:l157")) Is Nothing Then Target.Value = Cells(Target.Row, 4).Value
For i = 8 To 12 If Target.Column <> i Then Cells(Target.Row, i).ClearContents End If Next i Cancel = True End If
If Not Intersect(Target, Range("m8:m157,n8:n157,o8:o157,p8:p157,q8:q157")) Is Nothing Then Target.Value = Cells(Target.Row, 5).Value For i = 12 To 17 If Target.Column <> i Then Cells(Target.Row, i).ClearContents End If Next i Cancel = True
End If
End Sub
Ez két különböző cella tartalmát másolja át két különböző helyre. Eddig rendben van.
Most azt szeretném, ha duplán kattintok a g8-ba, akkor 2 cella közül (d8 és e8), amelyikben érték van, azt másolja át a G8-ba. De ráadásul, ha a d8-ban van érték, akkor azt mínusz előjellel másolja át.
Bocs, de kicsit sok lett benne a hiba..., mert eltűntek a fordított per-ek, azaz a blackslash-ek :(
Még egyszer:
Szia Ciripke,
Ezt az Excel sugójában találtam, akár hasznos is lehet...
"A könyvtár betűjelének eltávolítása a kiszolgáló címéből: Lehet, hogy már nem érvényes az a betűjel, amelyet a hiperhivatkozás létrehozásakor a megosztott hálózati könyvtárhoz rendeltek. Ha a hiperhivatkozást a könyvtárakhoz rendelt betűjelektől függetlenné szeretnénk tenni, módosítsuk a hiperhivatkozás céljának címét, és a betűjel helyett a kiszolgáló és a megosztott könyvtár nevét adjuk meg. A G:/saját.xls címet például a //kiszolgáló/könyvtár/saját.xls címre cserélhetjük."
A per helyet a fordított per-t használd, csak sajnos azok eltűnnek... :(
Ha az excel file-t a hálózatra mented, és megadod a kiszolgáló, illetve a mappák nevét "/"-el elválasztva, utána pedig a file nevét, akkor szerintem működhet a dolog.
Igaz nem relatív hivatkozás lett, de mindenki gépe a hálózaton fogja keresni az excel file-t!
Ezt az Excel sugójában találtam, akár hasnos is lehet...
"A könyvtár betűjelének eltávolítása a kiszolgáló címéből: Lehet, hogy már nem érvényes az a betűjel, amelyet a hiperhivatkozás létrehozásakor a megosztott hálózati könyvtárhoz rendeltek. Ha a hiperhivatkozást a könyvtárakhoz rendelt betűjelektől függetlenné szeretnénk tenni, módosítsuk a hiperhivatkozás céljának címét, és a betűjel helyett a kiszolgáló és a megosztott könyvtár nevét adjuk meg. A G:saját.xls címet például a \kiszolgálókönyvtársaját.xls címre cserélhetjük."
Ha az excel file-t a hálózatra mented, és megadodd a kiszolgáló, illetve a mappák nevét ""-el elválasztva, utána pedig a file nevét, akkor szerintem működhet a dolog.
Igaz nem relatív hivatkozás lett, de mindenki gépe a hálózaton fogja keresni az excel file-t!
- Egy workbook.open eseménykezelő a workbook megnyitásakor kiolvassa annak elérési útvonalát (hívjuk mondjuk Path-nak)
- Az eseménykezelő tartalmazza a wordfile nevét (elérési út nélkül), mondjuk egy változóban (hívjuk mondjuk sFileName-nek)
- Az eseménykezelő egy előre megadott cella tartalmát átalakítja Path/sFileName-re (vagy a Path/sFileName -en elérhető tartalmat beteszi az adott cellába).
Vannak itt néhányan akik ilyen eseménykezelőket tudnak írni (én nem tartozom közéjük), hátha tudnak ez alapján segíteni (vagy elmagyarázni, hogy miért baromság amit fentebb írtam :-)
Ha notepaddal létrehozok egy filet, amiben | elválasztójellel vannak adatok, azt utána megnyitom az Excelből, bejön a Szövegbeolvasó varázsló, ahol a Tagolt esetet választom, majd a határoló jeleknél az egyéb helyen megadom a | elválasztójelet, akkor úgy nyitja meg ezt a filet, hogy minden adat külön cellában van.
Szerintem az általad leírt módon nem lehet egy fizikai helyre mutató hivatkozást "aktívvá" tenni. Gondolj bele, ehhez szükség lenne egy háttérben folyamatosan futó programra, ami állandóan azt figyeli, hogy mikor hová helyezed át a file-kat.
Van-e lehetőségem arra, hogy ha mondjuk egy excel fájl tartalmát csatolom egy word fájlhoz, akkor relatív elérési utat adhassak meg, (pl.: exceladatok.xls) így, bárhova pakolom a két fájlt csak az egymáshoz viszonyított helyzetüket kéne megtartani.
Azért fontos ez, mert hálózaton dolgozunk, és hiába készítek el valamit, a másik felhasználó nem látja, hisz nincs hozzáférése az én fájljaimhoz, mert a word az excelt nálam keresi. (kivéve, ha frissítek minden hivatkozást minden felhasználónál, de az nagyon hosszú idő)
Eredetileg ezt kérted:"Azt szeretném, ha abban az esetben, ha egy cella (c1) nem üres, akkor a c2:c7 cellák kitöltése változzon, ha a d1 nem üres, akkor a d2:d7 kitöltése változzon, és így tovább."
Ha jól értem ez azt jelenti, hogy pl. a d2:d7 tartomány szine változzon meg, ha d1 nem üres ill. pl. e2:e7 szine akkor változzon, ha e1 nem üres. Erre az esetre javasoltam az alábbi feltételes formázást: formázandó tartomány pl. c2:f7 és a tartomány amit figyel a c1:f1, a javasolt feltétel pedig ez: =c$1<>"". Ez így helyes.
A példa amit Te most küldtél, egész más. Ebben e2:i2 tartományt formáztad és az itt lévő cellák a d$2 cellát figyelik, hogy üres e. Ebben a példádban nincs különbség d$2 és d2 között. Ha azt szeretted volna, hogy az e2:i2 tartomány minden cellája szines legyen, ha d2 nem üres, akkor a $d2 vegyes hivatkozást kellett volna használnod (a formátumot jobbra másolod és nem akarod, hogy az oszlop módosuljon).
A vegyes hivatkozásnál az egyik elem (oszlop vagy sor) abszolut a másik pedig relativ.
A Te példádnál maradva a cella, amelyiknek a tartalmát vizsgálod (C1 üres e vagy sem) mindig az első sorban lesz, de mindig az aktuális oszlopban. Ezért érdemes abszuolut sort ($1) és relativ oszlopot (c) használni ----> c$1. Ha lefelé (v. fölfelé) másolod a sor nem változik, jobbra/balra másolva az oszlop igen.
Remélem így érthető
(a válaszodban úgy tűnik rosszul írtad $C1, helyesen c$1
Azt szeretném, ha abban az esetben, ha egy cella (c1) nem üres, akkor a c2:c7 cellák kitöltése változzon, ha a d1 nem üres, akkor a d2:d7 kitöltése változzon, és így tovább.
Beállítottam, de csak a c2-t színezte, majd abszolút hivatkozást csináltam a c1-ből, így már jó volt, de akkor meg nem tudtam másolni lefelé a szabályt.
2010-es excelt használok. A képletek újraszámolását automatikus számolásra állítottam. Ez kézi beírásnál remekül működik, azonban ha lefut egy makró (dupla klikkes), akkor nem számolja újra, sőt az automatikus számolás opció is visszaállítódik manuálisra.
Sajnos az excell-t nem tanultam soha, s nem is használom...azaz alap user vagyok...bár 5-6 éve a "ti" segítségetekkel kicsit belemerültem a makrózásba és akkor megírt viszonylag egyszerű táblázatkezelőt most is használom....Mára minden t elfelejtettem.... :(
Amit beírtál, azon elkezdek gondolkodni, s talán gyakorolgatni....így első olvasásra annyira nem tűnik nekem egyszerűnek, de én is igyekszem valamit tenni, valamilyen irányba elmozdulni... ha konkrétab (egyszerű felhasználónak érthetőbb, szájbarágósabb) megoldásra van időtök, akkor azt megköszönöm
menüszalag/külsőadatok átvétele/szövegből menüponttal közvetlenül megnyitható a szövegfile és konvertálható oszlopokra.
(Ugyanezek megvannak 2003-ban is)
2:
Makró nélkül:
Egy másik munkalapra ÖSSZEFŰZ() fgv-el összefűzöd a cellákat, a cellahivatkozások közél berakod a "|" jelet
Vagy: Elmented *.csv formában a táblázatot, majd a csv-ben kicseréled (nem kézzel!!!) a pontosvesszőket(;) "csere" funkcióval more(|)-ra (Sima notepadban a csere funkciót ctrl+h-val lehet előcsalogatni)
Vagy: makró és egy kattintással megvan minden, idő híján ezt most nem tudom
Az excell egy sort egy cellába rak be. A fenti két sort az A1 és B1 cellákban nyitja meg. Ha belemegyek ezekbe a cellákba, akkor tudom átírni, javítani, stb mert mentés után tökéletesen működik a navigációban...
Nekem ennél sokkal többre van szükségem, hisz szeretném az excel előnyeit kihasználni. ( szűrés, rendezett áttekintés)
Létrehozta, egy táblázatot ami így néz ki: (minden adat külön cellában)
Ez így nagyon frankó, mert mappa, almappa, név, stb szerint tudom szűrni, rendezni, hisz külön-külön oszlopban van minden adat...
Budapest, XIX kerület, Lackó ....
Budapest, XX kerület, Ferences ....
Konkrétan 2 dolog lenne, amit nektek "excell zseniknek" meg kellene oldani:
1.:
Szöveges fájl formátumot hogy tudok úgy bemásoltatni az excellbe, hogy az külön cellába másolja be az adatokat. Az adatok így vannak a szöveges fájlban (igo-ban) hogy:
adat|adat|adat|adat|adat|adat|......
Az excellbe így kellene átkonvertálni:
A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
adat | adat | adat | adat | adat |
ha így van, akkor egyértelmű, hogy az A2, A4, A6 oszlopot kényem-kedvem szerint tudom szűrni, s egy baromira átlátható táblázatom van.....
Vagy egy külső program kellene, ami a " | " jel közötti részt külön cellákba rak be, s ügyel arra, hogy a sortörés jó legyen
Vagy egy olyan függvény az excellen belül, ami a szöveges fájl bemásolása után végigmegy az A1, B1, C1... cellákon és onnan kinyert adatokat új táblázatba tölti be ( a " | " jel közötti adatokat, az üres adatot is.... ezzel gyakorlatilag autómatikusan megcsinálná azt ami én manuálisan és nagyon lassan (lásd hozzászólásom eleján betett táblázat)
2. feladat...
Az 1. feladatban elkészített excell táblázatot konvertálja vissza vagy szöveges formátumban, vagy az elkészített táblázatot alakítsa úgy át, hogy az összes adat (soronkénti adat) egy cellába másolja be:
adat|adat|adat|adat|adat|
Az Io csak úgy tudja olvasni, ha az adatok között nincs szóköz.....
Eddig ezt úgy oldottam meg, hogy megnyitottam az IGO "user.upoi" fájlt jegyzetfüzetként, bemásoltam az excell táblázatom szövegként (ekkor a sorokat helyesen töri meg, csak az a baj, hogy minden excell cellát egy szóközzel elválaszt...így az igo nem olvassa...de ha az így kapott szöveges részbe a " | " jelek és az adatok mentén a szóközt kiszedtem, akkor minden rendben van....
Ha ezt meg tudjátok oldani, akkor sok-sok ember hasznát vehetné, hisz ezek alapján könnyedén saját poikat is készíthetsz és kezelheted, átírhatod..... sebességmérő kamerák, hasznos helyek, stb
Előre is köszönöm azoknak akik a feladaton elgondolkodnak és segíteni próbálnak!
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim O As Object, BGE As clsButtonGroupElement, S As Shape Dim PID As String
Set myButtonGroup = New Collection For Each S In Sh.Shapes On Error GoTo Hiba PID = S.OLEFormat.Object.progID If PID = "Forms.CommandButton.1" Then Set BGE = New clsButtonGroupElement Set BGE.myButton = S.OLEFormat.Object.Object myButtonGroup.Add BGE End If Folyt: Next Exit Sub Hiba: Resume Folyt End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Set myButtonGroup = Nothing End Sub '---------------------kód vége------------------------------------
A Class Module kódját nyilván átírod majd, hogy a gombok valami értelmeset csináljanak.
A másik rész dióhéjban annyit tesz, hogy mindig, amikor egy munkalapot aktiválsz, létrehoz egy új Collection-t, amibe beleteszi a munkalapon lévő ActiveX gombokat. Ha többféle Shape objektum volna a munkalapon, nem csak Commandbutton, erre az esetre van egy szűrés a ProgID-vel. Nem vagyok benne 100%-ig biztos, de reményeim szerint csak a gombokat engedi át.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.Calculation = xlCalculationManual If Not Intersect(Target, Range("B13:B2000,c13:c2000,d13:d2000,e13:e2000,f13:f2000")) Is Nothing Then Target.Value = Cells(Target.Row, 1).Value For i = 2 To 6 If Target.Column <> i Then Cells(Target.Row, i).Clear End If Next i Cancel = True End If End Sub
Azzal ki lehetne egészíteni, hogy egyszerre csak az egyik lehetőségbe lehessen írni? Tehát, ha véletlenül másik helyre kattintottam, akkor a jó helyre kattintáskor a másik törlődjön. Vagyis egyszerre csak egy helyen jelenhessen meg összeg.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.Calculation = xlCalculationManual If Not Intersect(Target, Range("B13:B2000,c13:c2000,d13:d2000,e13:e2000,f13:f2000")) Is Nothing Then Target.Value = Cells(Target.Row, 1).Value Cancel = True End If End Sub
A lényeg, hogy van 52 munkalap, minden munkalapon van 30-30 commandbutton. Minden gomb ugyanazt csinálja, csak az éppen aktuális sorral. Megcsináltam már, de csak úgy tudtam, hogy minden egyes commandbutton_click-et létrehoztam, és bemásoltam ugyanazt a kódot mindegyikbe.
Azt szeretném, hogy csak egy kód fusson le például ami a class modulban van. Remélem így érthető.
Ja, Excel 2003-ról van szó, mert most néztem a 2010-ben már két féle commanbutton-t tudok lerakni egy munkalapra egy űrlap-vezérlőt, és egy activeX vetzérlőt. a 2003-ban csak activeX-et tudok lerakni.
Adott egy táblázat, amelynek első oszlopába összegeket írunk be. A következő 5 oszlop 5 különböző kategória (pl: egy, kettő három, négy, öt)
A beírt összeget szeretném az 5 kategória valamelyikébe rendelni. Arra gondoltam, hogy ha adott kategória (adott összeg melletti) cellájába kattintok duplán, akkor másolja át oda az összeget.
Egyszerű szöveget már sikerült beírnom dupla klikkes makró segítségével, de az adott feltétellel együtt nem megy.
Ebből ki lehetne indulni?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.Calculation = xlCalculationManual If Not Intersect(Target, Range("B13:B2000")) Is Nothing Then Target.Value = Date Cancel = True End If
If Not Intersect(Target, Range("Q13:AA2000, G13:G2000, K13:K2000")) Is Nothing Then Target.Value = "IGEN" Cancel = True End If End Sub
2007-es (angol) excelem van es valami elallitodott, ha rakattintok az egyes menupontokhoz tartozo funkciok (pl. file - cut, insert - pivot table, stb), csak akkor jelennek meg, ha a menure kattintok, ha az excel tablaba, akkor pedig eltunnek a funkciok, csak a menusor latszik. Mit kell beallitani, hogy a funkciok is fixen latszodjanak? Koszi a segitseget!
Korábban már volt problémám az időformátummal amikor pp:mm formátumban akartam beírni.
Megint ez a gondom (Excel2002-ben) eddig az adott oszlopban be tudtam írni pp:mm formában írni. De most bővíteni akartam az oszlopot újabb adatokkal, de nem sikerült :-/ Ugyanaz a jelenség adódott, mint amire válaszolok. 12:27 -et akartma beírni a cellába, erre 27:00 jelenik meg.
Ha a korábbi jól megírt (és jól megjelenő) céllába írtam be felülírván az ott szereplő adatot, akkor az is ezt a 27:00 -t jeleníti meg.
A windowsos időformátum szerintem jó, ahogy korábban felhívtátok rá a figyelmem.
Olvastam, és persze ki is próbáltam ezt a makrót, nagyon jól működik.
Nekem most olyan problémám van, és remélem tudsz segíteni.
A munkalapom van teli commandbutton-okkal, összesen 30-al, és ezeket szeretném egy osztályba sorolni, de sajnos nem sikerült. Azt gondolom, hogy az a baj, hogy ezek nem userform-on vannak, illetve OLE objektumok.
Ma telepitették fel a gépemre a 2007-es excelt, eddig 2000-es volt, szóval elég nagy ugrás....
Kezdem egész jól megtalálni hogy a már megszokott dolgokat hol keressem/találom, DE a gyorsbillentyű kombinációk, melyek tök jól müködtek a 2000-es verzióban, itt egyáltalán nem müködnek, ugyanazokra a kombinációkra - pld Alt+D+F re a filtert hoztam be - a 2007-es nem reagál. Hogy lehet ezeket a funkciókat "előhozni"?
lenne egy megoldhatatlan kérdésem:) van három cell, betű, szám, betű, három oszlopban, össze kellene vonnom őket &-el működik (A5 & B5 &C) csak az a baj, hogy úgy vonja őket össze, hogy nem hagy szóközt a három cella között pedig kéne, mit írjak a képletbe? kösz.
Lehet át kell struktúrálnod azt a táblát....Nemtom... A Lista funkciót (több) összefüggő tartományra lehet használni. Vagy talán még jó neked az irányított szűrő is.... Sőt.
Valóban enged, a listát létrehozza pl. ABC-ben és EFG-ben is. Az egymás melletti oszlopokkal - tehát ABC-n vagy EFG-n belül - működik a két feltétel szerinti szűrés, de úgy látom, hogy mondjuk A és F oszlopok használatával már nem. "A és B"-nél jól listáz, de "A és F" esetén nem. Itt csak az F szerint végzi a szűrést, és már nem veszi figyelembe az A oszlop korábbi szűrését, azaz nem tudok két szempont szerint keresni. Ennyire megzavarná, hogy van közöttük egy D oszlop, ami nem lista, nincs hozzáadva szűrő?
Megpróbáltam a listával, de itt sem enged több oszlopcsoportra szűrőt tenni, egyszerre csak egyre. Úgy szeretném, hogy pl. A-B-C oszlopban van szűrő, D-nél nincs, E-F-G-nél van, H oszlopban nincs, stb.
1. Sajnos nem csak szomszédos oszlopokra szerettem volna szűrőt tenni. Majd megpróbálom úgy átalakítani a táblázatot, hogy mégis szomszédosak legyenek, vagy minden oszlop kap szűrőt.
2. Akkor inkább nem mozgatom. :)
Az Excel amúgy 2007-es, de 2003-as verzióban is kell működnie, mert melóban csak az van.
Gondoltam érdekességként benyomom ide ezt a videót.
Múltkor szó volt róla, hogy miért nem lehet pivot táblát heti csoportosításban készíteni. Nos itt mondják el, hogy hogyan lehet. Kell hozzá egy kis VBA meg nem egy kicsi angol, de megéri, mert jó trükk.
13585-ben azt írtad, nem akarod, hogy a munkafüzet látszódjék... Akkor most akarod látni, vagy nem akarod látni? ;-)
Egy kis háttérinfó.
Amikor a
Set xls = CreateObject("Excel.Application") (illetve Set objExcel = CreateObject("Excel.Application"))
sor lefut, elindul az Excel egy új példánya, ami az éppen futó Exceltől független. Az új példány alapértelmezésben nem látható. Ha azzá akarod tenni, akkor (mint Robbantómester már megmutatta):
objExcel.Visible = True
Újra eltüntetni nyilván így kell:
objExcel.Visible = False
Lényeges dolog, hogy a makró végén az új Excel példányt vagy láthatóvá kell tenni, vagy pedig a Quit paranccsal bezárni (lásd: 13591). Ha egyik sem történik meg, akkor az Excel kvázi láthatatlanul ott marad a memóriában, és fölöslegesen köt le erőforrást. Ha nem törődsz vele, úgy a makró minden egyes futtatásakor újabb láthatatlan Excel keletkezik, és előbb utóbb megeszik az összes RAM-ot. És mivel a makró végeztével az objExcel objektumváltozó elveszíti értékét, már többé nem tudsz vele hivatkozni a láthatatlan Excel példányokra, tehát nem tudod bezárni sem őket. (Ha látható, akkor a szokott módon be tudod zárni.) Ekkor már csak a Task Managerből tudod kilőni. Ott viszont gondban leszel, hogy melyik Excel.exe a láthatatlan, és melyik az, amelyikben éppen dolgozol....
Dim Path As String Dim xls As Object, P As Object Path = "i:-=DTP & Office=-MeloPMP Bakony900228.xls" Set xls = CreateObject("Excel.Application") Set P = xls.Workbooks.Open(Path) 'code.... P.Close
a végére meg berakod amit Boraka írt az utolsó két sorában, hogy ne kíváncsiskodjon, hogy mit akarsz meg mit nem. (Persze jó az övé is)
Ha másik munkafüzetben kell turkálni, akkor mindig így szokták megoldani. Szerintem teljesen felesleges open-el megnyitogatni, visible-t + egyebeket állítgatni.
Azt nem írtad, hogy makróból akarod-e. Ott simán csak le kell tiltani a képernyő frissítést a művelet idejére
application.screenupdating=false
az ablakot is el lehet rejteni.
windows("Munkafüzet.xls").visible=false
Makró nélkül is van egy trükk.
Megnyitod az elrejteni kívánt táblát. Valamilyen adatot, cellát változtatsz benne. Majd az ablakot elrejted és az egész Excelt bezárod. Ekkor az Excel rákérdez, hogy mentse-e a táblát. Így legközelebbi megnyitáskor automatikusan rejtettként fog megnyílni.
1.) csak ha az érintett oszlopok szomszédosak. Vagyis egy 5 oszlops táblázatból (A:E) tudsz szűrni pld az A:C oszlopokra, de nem az A:B + D oszlopra. A teendő csak annyi, hogy kijelölöd a megfelelő oszlop fejlécét (esetünkben mondjuk az A1:C1 tartományt és így aplikálod a szűrőt (nem írtad milyen exceled van).
2.) kétlem, hogy ez lehetséges. Az excel ezt az adatot nem "hiperlinkként" kezeli, hanem sima adatként, neki nem számít, hogy megváltozott a "környezet"
1. A táblázatban szeretnék szűrőt elhelyezni, de csak bizonyos oszlopokban. Csoportos kijelöléssel nem engedi, illetve vagy mindenhova, vagy sehova nem tesz szűrőt. Hogyan lehet ezt csak bizonyos oszlopokra megoldani?
2. A táblázatban hiperhivatkozásként szerepelnek fájlok, melyek kattintásra megnyithatók. Kérdésem, hogy az Excel tudja-e követni valamilyen módon az elérési útvonalban történő változásokat? Pl. könyvtár átnevezése, xls fájl valamint a hozzá linkelt fájlok kiírása dvd-re, ezáltal az elérési út változása.
Ha ugyanabból az adatforrásból készítesz két v. több pivot táblát, akkor az excel 2007 automatikusan ua-t az adat-gyorsítótárat (data cache) használja, hogy csökkentse a memória használatot és a fájl méretet. Ha szertnél két pivotot csinálni amelyek függetlenek egymástól, módosítsd a tartományt, pl. hagyd ki a D oszlopot, hiszen úgysem használod ezt a mezőt (arány), mert készítesz egy számított mezőt és azt teszed be a pivot tábládba. Ez után már a két tábla független egymástól és tudod másként csoportosítani (persze a számított mezőt ismét létre kell hoznod)
én nem foglalkoznék a kimutatás heti/havi bontásával, hanem annak adathátterébe beraknék egy WEEKNUMBER(), meg egy HÓNAP() függvényt plusz oszlopként (Ami a dátumaidból kiyneri a hetet meg a hónapot). Aztán idővel szükség lehet az ÉV()-re is.
Próbálkoztam, és azt tapasztalatam, hogy az EOF akkor is False eredményt ad, ha a fájl utolsó bájtját is beolvastam már, és utána a Get még tud olvasni egy 0-t. Nekem ezt teszi a 2-es fájl végére. Fogalmam sincs, miért. Passzolom a kérdést.
Sub olvas() Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs, f, ts, s Set fs = CreateObject("Scripting.FileSystemObject") fs.OpenTextFile "d:moricka1.txt" 'Ellenőrzi egy file létezését Set f = fs.GetFile("d:moricka2.txt") 'Olvas egy másik filét Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault) For i = 1 To 1000 s = ts.ReadLine MsgBox s Next i ts.Close End Sub
Kérdéseim a professzor urakhoz:
1. Hogyan lehet " On Error"-ral vagy valami mással lekezelni, ha nem létezik a file és a filevéget?
2. Miért térhet el az fs.OpenTextFile sorban és a Set f= fs.Getfile sorban a filenév?
Gyakorlatilag leellenőrzöm az első létezését és olvasgatom a másodikat.
3. Hogyan tudnék bináris filet is végigolvasgatni?
A file létezés ellenőrzését megtaláltam: If (fs.FileExists("móricka.txt")) Then ......
Folyamatos olvasást megtaláltam: s = ts.Read(1000) beolvassa (a következő) 1000 karaktert.
If Dir("C:mappaalmappaakármi.txt", vbNormal) = "" Then MsgBox "Not exist." End If
A másik lehetőség, FileSystemObject használatával:
Set fs = CreateObject("Scripting.FileSystemObject") If Not fs.fileexists("C:mappaalmappaakármi.txt") Then MsgBox "Not exist." End If
2. A FileSystemObject egy összetett objektum, nem egy fájlra vonatkozik. Inkább egy interfész a fájlrendszer elérésére. Ugyanazon FileSystemObject-en keresztül akárhány fájlt megnyithatsz. Másrészt, az OpenTextFile és a GetFile két különböző dolog. A GetFile egy fájl típusú változóhoz rendel hozzá egy konkrét fájlt, és akkor arra a fájlra ezen a változón keresztül tudsz hivatkozni, és vele (rajta) műveleteket végezni. Az OpenTextFile pedig megnyit egy szövegfájlt, vagy ha nincs, akkor létrehozza azt. Ez tehát nem a fájl meglétének ellenőrzése. Igazából az OpenTextFile-t úgy tudnád használni, ha TextStream típusú változóhoz rendelnéd a megnyitott fájlt, másképp nem tudom, hogyan hivatkoznál rá:
Dim ts As TextStream
Set ts = fs.OpenTextFile("d:moricka1.txt")
3. A FileSystemObject-ben nincs meg a lehetőséged bináris fájlolvasásra. Másképp kell megoldani:
Dim FNumber As Long, NextValue As Byte FNumber = FreeFile Open "C:mappaalmappaakármi.dat" For Binary Access Read As FNumber WhileNotEOF(FNumber) Get FNumber, , NextValue Debug.Print NextValue Wend Close FNumber
Ha a NextValue változót Byte helyett Integer-ként deklarálod, akkor kétbájtonként olvassa a fájlt, ha Long-ként, akkor négyesével, stb.
Próbálkozz egy új lapon. Előfordul néha 1-1 hibás lap, többször találkoztam már ilyennel.
A kettőspontot mindenképp be kell vinni, másképp dátum + idő formátumra áll át a cella. Sajnos a fejlesztők olykor túlzásba viszik a felhasználó kiszolgálását, amivel több kárt okoznak, mint hasznot. Időnként direkt hátrányos a program "önállósága".
De mint írtam előbb, nem az jelenik meg a cellában amit beírtam.
.
.
.
.
Közben most kipróbáltam, ha pl 14:15-öt akarok a cellába, akkor 0:14:15-öt kell beírnom.
Nincs valami olyan módszer, hogy a 0: -t ne kelljen az elején beírni. Nem is értem, hogy miért igényli így a beírást, hiszen pp:mm formátumot adtam meg neki.
Sub olvas() Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs, f, ts, s Set fs = CreateObject("Scripting.FileSystemObject") fs.OpenTextFile "d:moricka1.txt" 'Ellenőrzi egy file létezését Set f = fs.GetFile("d:moricka2.txt") 'Olvas egy másik filét Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault) For i = 1 To 1000 s = ts.ReadLine MsgBox s Next i ts.Close End Sub
Kérdéseim a professzor urakhoz:
1. Hogyan lehet " On Error"-ral vagy valami mással lekezelni, ha nem létezik a file és a filevéget?
2. Miért térhet el az fs.OpenTextFile sorban és a Set f= fs.Getfile sorban a filenév?
Gyakorlatilag leellenőrzöm az első létezését és olvasgatom a másodikat.
3. Hogyan tudnék bináris filet is végigolvasgatni?
Van egy piszlicsáré 3 oszlop 8 soros táblám (x2: magyar, angol), aminek csak 7 cellájába (1 oszlopba) szeretném engedélyezni az adatbevitelt. Megoldottam "érvényesítéssel", még azt is, hogy mondjuk egy képernyőnyi felületen belül ne lehessen beleírni ill. a meglévő fix adatok ne legyenek változtathatók (+ némi VBA machinációval, hogy kitöltetlenül ne lehessen elmenteni vagy bezárni), de nyilván elegánsabb lenne, ha csak a 3x8(x2 , azaz mondjuk 3x18) as mátrix lenne aktív, vagy egyáltalán: látható. Erre van egyszerű megoldás?
A VBA alighanem ágyúval verébre volt, annál is inkább, mert kiderült, menteni nem is szükséges, csak e-mailen küldeni Excelen belülről (azaz Groupwise-on, de most ez talán mindegy), a levelek kerülnek archívumba mellékletestül. (Remélem jól vettem le a feladatot és már nemigen változik a "kiírás". Hozzátenném, hogy nem vagyok pogromozó, szoftvermérnök stb., csak szükségmegoldás :) arra, hogy egy üzemviteli hibanaplózást megoldjunk...)
Köszönöm a válaszokat, így végre sikerült a nyomtatás. A combobox -ot, pedig megnézem.
A régebbi excell-ben mindent pillanatok alatt megtaláltam, de ez a 2007-es a sok csiribiriséggel néha nagyon kiakaszt. Nem vagyok profi a témában, nem tudom miért nincs legalább egy "váltás a hagyományos nézetre" opció vagy ilyesmi. Köszönöm még 1x! Üdv. Kr
Az Excel alapértelmezésben a munkalapon fentről lefelé, majd balról jobbra számozza és nyomtatja az oldalakat, de a számozás és nyomtatás iránya módosítható balról jobbra, majd fentről lefelé irányúra.
Váltson arra a munkalapra, amelynek a számozási sorrendjét módosítani szeretné.
A Lap elrendezése lap Oldalbeállítás csoportjában kattintson a párbeszédpanel-megnyitó gombra az Oldalbeállítás párbeszédpanel megnyitásához.
A Lap lap Oldalak sorrendje csoportjában jelölje be a Le, majd jobbra folytatva vagy a Jobbra, majd lefelé folytatva választógombot.
Tipp A választott irány az előnézeti mezőben látható.
Egy kérdés: 2007-es excell-ben hogyan lehet felcserélni a nyomtatásra szánt oldalak sorszámát? Amit első lapon szeretnék nyomtatni az ok, de a másodikat 3.-nak adja, a 3.-at 2.-nak, stb. Az a gondom, hogy néha csak 2 oldalt szeretnék, de így meg kell keresnem a táblázatban hol kezdődik a következő. A fél netet végignéztem, de nem találom a konkrét leírást, szétvet már az ideg.
Még egy: az érvényesítés után a legördülő lista elemeinek a számát lehet változtatni valahogy? Van egy 300 tételes lista, de mire végiggörgetem és megtalálom amit keresek, kihullik a hajam. Alapból csak 8 elemet jelenít meg, nem lehet ezt bővíteni?
A cellába nem csak az óra:percet kell felvinni, hanem a dátumot is. Akkor jól fog számolni.
A másik lehetőség, hogy két oszlopot vezetsz, az egyikbe írod a dátumot, a másikba az időpontot. Majd a két értéket összeadod. És az így összeadott értékekre számolod ki a két időpont közötti különbséget.
Egy esetleges harmadik lehetőség, hogy képlettel oldod meg, ekkor nem kell dátum. Például, ha a befejezés időpontja kisebb, mint a kezdés időpontja, akkor feltételezzük hogy egy nap eltelt. =ha(b1<a1;b1+1-a1;b1-a1)
Egy Excel táblázattal kapcsolatos problémámra szeretnék segítséget kérni.
Csináltam egy táblázatot, amellyel a munkaidőmet(kezdés-végzés), km-ert, men.levél sorszámot stb. vezetem évek óta. Az Excel göngyölíti, kiszámolja a fogyasztást meg mindent amit akarok.
Eddig minden rendben ment, kiszámolta az óráimat (is), a kezdés-végzés adatok alapján.
Mostanában viszont vannak olyan műszakjaim, amikor éjszakás vagyok, pl. 19.00-kor kezdek, és másnap reggel 7.00-kor végzek. Ezt jelenleg nem tudja feldolgozni.
Nem találok megoldást, nem tudom kezeltetni a táblázattal.
Azt szeretném megkérdezni, hogy mi a módja annak, hogy nappali, és éjszakás, másnapra átnyúló időpontokat is tudjak vele számoltatni?
Előre is köszi a segítséget!
P.S.: Valószínűleg csak késő délután leszek, mert sajnos menni kell a 2. munkába. :-D
Kimutatás varázsló - Több tartomány (összesítés) Ha nem találod a 2007-esben, akkor fel kell tenned a gyorselérési eszköztárra: Excel beállításai - Testreszabás - Kimutatáseszközök|Beállítás lap
Bocs, hogy így ismeretlenül, de szeretném a segítségeteket kérni, ebbe beletört a bicskám:
Adva van 20 sheet, rajta sok-sok sor és oszlop (többezer sor, 90 oszlop). Minden sheet-en van egy vagy két oszlop ("leírás1" és "leírás2"), ami tartalmazhat egy bizonyos karatersort (cellaformátum: szöveg), ami nekem most érdekes ("cukor"). Csinálnom kell egy olyan összesítő sheet-et, ami az összes sheet összes olyan sorát tartalmazza, ami tartalmazza a "leírás1" és/vagy "leírás2" oszlopban a "cukor"-t.
Vmi ötlet esetleg? (magyar 2007-ben próbálkozom...)
Szerintem is jó kis feladat, az eseménykezelős már müxik, kiváncsian várom a végleges UDF-es megoldást. ;-) Jó lenne megtudni, hogy MixM topictárs tudta-e hasznosítani az eddigieket.
ps. egyébként teljesen feleslegesnek tartok erre scriptes megoldást (legyen az UDF vagy eseménykezelős) mert ha jól értem a cél itt csupán a figyelem felkeltése, hogy túl sok munkanap követné egymást - ami gondolom PTK-ba is ütközik. Erre tökéletesen elég, ha az a "P" betű lesz színes, ami után 6-nál több munkanap van. Ezt pedig feltételes formázással meg is lehet csinálni a beépített függvények segítségével. (Lsd "Előzmény")
Ezt a függvényt nem egészen értem. Leírásodból azt véltem kivenni, hogy a cella feltételes formázásában, a "képlet értéke" módban kell használni.
Ez logikusan azt jelentené, hogy ha pl. a C3 cella formázásánál használom, akkor a függvénynek a C3 cellára vonatkozóan kellene meghatároznia IGAZ vagy HAMIS értéket, és a feltételes formázás ettől függően pirosít vagy nem pirosít.
- Így van.
És egy észrevétel: a 'sor' változót szerintem Byte helyett Long típusra kellene beállítani, mert Byte-ként legfeljebb 255 lehet az értéke, egy excel munkafüzet pedig legalább 65536 sort tartalmaz.
- Ez szándékos volt, mert tudtam, hogy nem leszz 255-nél több.
De mivel a függvény Volatile, újra kiszámolja C3-ra, amivel újra felülírja C4-et, és ez így szerintem végtelen ciklus. Nekem lefagyott az Excelem, amikor kipróbáltam.
- Ha az utolsó If... End If nélkül próbálod, akkor működik, ez esetben csak azokat a "P"-ket színezi, amelyek után 6-nál több <> "P" van.
Ezzel az If-el az volt a célom, hogy True értéket kapjanak azok a cellák is, amelyeknél a "P" után 6-nál több <> "P" van.
Hogy végtelen az lehet... Nem tudtam hogy fog viselkedni a volatile, ha az utolsó If .... End If -ben lévő sorokkal "utólag" "belepiszkálok"
Tegyük fel, hogy Munka1 lapon, A1:A365-ben vannak a dátumok, B1:B365-ben az értékek, továbbá Munka2 A oszlopában vannak az intervallumok kezdő dátumai, B oszlopban pedig a végdátumok.
Ezt a függvényt nem egészen értem. Leírásodból azt véltem kivenni, hogy a cella feltételes formázásában, a "képlet értéke" módban kell használni.
Ez logikusan azt jelentené, hogy ha pl. a C3 cella formázásánál használom, akkor a függvénynek a C3 cellára vonatkozóan kellene meghatároznia IGAZ vagy HAMIS értéket, és a feltételes formázás ettől függően pirosít vagy nem pirosít.
Mivel ezt a formázást az összes cellára be kell állítani, nem értem, hogy a függvény miért akarja a szomszédos cellák értékét felülírni? Egyrészt, nem biztos, hogy csak P betű és üres cella van ebben a táblázatban, így a függvényed adatvesztést okozhat. Másrészt, a szomszédos cellák pirosságát ugyanezzel a függvénnyel kellene meghatározni, nem?
Tegyük fel, hogy C3 és C4 cellák feltételes formázásában szerepel ez a függvény, tehát C3 piros, ha ErrRed(C3)=IGAZ, C4 pedig piros, ha ErrRed(C4)=IGAZ
Excel kiszámolja C3-ra. Közben felülírja C4 értékét. Erre, mivel a C4 feltételes formázás bemenő értéke megváltozott, kiszámolja C4-re is. De mivel a függvény Volatile, újra kiszámolja C3-ra, amivel újra felülírja C4-et, és ez így szerintem végtelen ciklus. Nekem lefagyott az Excelem, amikor kipróbáltam.
Lehet, hogy nem jól értem a felhasználás módját, de nekem itt valami nem gömbölű...
És egy észrevétel: a 'sor' változót szerintem Byte helyett Long típusra kellene beállítani, mert Byte-ként legfeljebb 255 lehet az értéke, egy excel munkafüzet pedig legalább 65536 sort tartalmaz.
excel problémám a következő. van egy munkalapom az év napjaival, hozzárendelve minden naphoz egy érték. egy másik munkalapon pedig minden sorban egy időintervallum egy kezdő és egy végdátummal. (tetszőleges számú nappal egy intervallumban,).
namost a feladat az, hogy minden sorban adjam össze az ahhoz az intervallumhoz intervallumhoz tartozó értékeket egy új oszlopban vmi függvénnyel, de eddig nem jött össze, úgyhogy hilfe!
az (As Boolean) a fgv-hez nem jó, mert futásközben ettől eltérő értéke is van. Az (ER As Range) jó, de szerintem emiatt sem lehet hiba (illetve nem is volt)
Ha nincs a kommentezett sor, akkor megy szépen a függény, helyesen true értéket ad azokra a cellákra, amelyekben "P" van és utána 6-nál több egyéb cella. A kommentezett sor előtti sorban meghatározott Range tartalmazza azt a tartományt, amelyekre még true-t kell kapni, hogy a feltételes formázás érvényesüljön.
Ezt akarom a kommentezett sorral true-ra állítani, de a függvény hibaértékekkel tér vissza. (Nem vba hiba)
Az a helyzet, hogy ezt szerintem pár soros UDF-el meg lehet csinálni, amit feltételes formázásként kell megadni és boolean-t ad vissza a fgv.
Most így néz ki, de szeretném a segítségeteket kérni:
Function ErrRed(ER)
Dim ERRange As Range, oszlop As Byte, sor As Byte, ERRangeColor As Range oszlop = ER.Column sor = ER.Row Set ERRange = Range(Cells(sor, oszlop + 1), Cells(sor, oszlop + 31)) Application.Volatile If ER = "P" Then ErrRed = Application.Match("P", ERRange, 0) Else ErrRed = 6 ErrRedColor = ErrRed ErrRed = ErrRed > 7 If ErrRed Then
Set ERRangeColor = Range(Cells(sor, oszlop + 1), Cells(sor, oszlop + ErrRedColor - 1)) ERRangeColor.Value = ErrRed ' ez az egy sor nem jó, nem tudom hogy kell a "range" cella értékeit "IGAZ"-ra állítani
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then If i - figyel >= 6 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i Else: figyel = i End If End If Next i
If meddig - figyel >= 6 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, meddig)).Interior.ColorIndex = 3
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i Else: figyel = i End If End If Next i
Ezt én úgy értelmezem, hogy nem pihenőnap nem lehet több, vagyis ha a sor elején több nem P-s cella van, az sem jó. Mondjuk csak a 8. napot akarják kiadni szabadnapnak.
Nem értem. A nem "P"-t tartalmazó cellákat miért kellene színezni? A feladatban nem az van, hogy a "P"-k közötti cellákat kell színezni, ha az több mint 6?
Ez nagyon jól néz ki, de ennek is az a hibája, hogy a sorok elejét és végét nem rúzsozza ki.
Ha megoldod ezeket, nem bajlódom az enyémmel, úgyis csak este felé leszek számítógép közelében. Az is jó, hogy eseményt kezelsz, nem kell külön indítani.
Az én makrómnál a sor eleji ellenőrzéshez a Next oszlop mögé be kell tenni a t=False sort.
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then Select Case figyel Case 0 figyel = i Case Else If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i Else: figyel = i End If End Select End If Next i
Set r = Intersect(ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllValidation), ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible))
If Intersect(ActiveCell, r) Is Nothing Then MsgBox "Cell has no validation"
Else MsgBox "Cell has validation"
End If
End Sub
Szerintem ha a fenti Activecell object helyett a worksheets(akarmennyi).usedrange objectet használod, akkor is működik (azt nézi meg, hogy van-e közös halmaza két range-nek, a range-ek akármekkorák lehetnek).
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" Then Select Case figyel Case 0 figyel = i Case Else If i - figyel >= 7 Then Range(Cells(Target.Row, figyel), Cells(Target.Row, i)).Interior.ColorIndex = 3 figyel = i End If End Select End If Next i
For sor = 1 To usor For oszlop = 1 To uoszlop If oszlop > 5 And t = False And Cells(sor, oszlop) = "P" Then Range(Cells(sor, 1), Cells(sor, oszlop - 1)).Interior.ColorIndex = 3 kezd = oszlop + 1 End If
If Cells(sor, oszlop) = "P" And t = False Then kezd = oszlop t = True GoTo Kov End If
If Cells(sor, oszlop) = "P" And t = True Then veg = oszlop If veg - 1 - kezd > 5 Then Range(Cells(sor, kezd + 1), Cells(sor, veg - 1)).Interior.ColorIndex = 3 End If kezd = veg End If
Azt hittem egyszerűbb a feladat, de lehet hogy csak nekem tűnik bonyolultnak amiket írtok. Mindenesetre örülök és köszönöm, hogy foglalkoztok vele és próbáltok segíteni:)
Lefuttattam a makrót, az első 5 sorban ki is pirosította a hibát(szándékosan tettem bele párat:)), de a többin nem jelzi a problémát, majd a 36. sorban ismét pirosított:)
Azt hiszem el kezdek komolyabban foglalkozni a makrókkal:)
Csak tippelek, de azt gondolom, hogy a delete előtt akad el a kivitelezés.
VBA benéz a fiókba, turkál mert keresi a Validation object-et. Nem találja, panaszkodik.
Annyi esze nincs, hogy észrevegye, hogy úgyis törölni akarod, szóval lényegében nem számít, hogy nincs. Mivel a VBA nem a lényeget nézi, hanem a formális parancsot, kiakad.
Az eredeti kérdés "A célja, hogy lelellenőrizze, hogy az adott dolgozónál két pihenő közt nem telik el 6 napnál több."
Itt nincs szó üres, és nem üres cellákról. A makróm nem is figyeli, csak azt, hogy az egymást követő, "P" tartalmú cellák között hány nem "P"-s cella van.
Ha jól olvasom a kódot, akkor nem ellenőrzi, hogy van-e más P 7 távolságon belül, illetve nem ellenőrzi, hogy ha a 7 távolságra lévő cella üres akkor van-e távolabb P-s cella.
Az első esetben nem kell pirosítani, a másodikban igen.
A kód viszont az első esetben pirosít, a másodikban nem.
Mi van, ha a (target.row,i+3)-ik cella is "P"? Akkor nem kell színezni.
Szerintem a "P" betűk a pihenő napot jelentik, és a színezés azért kell, mert nem szabad 2 pihenő nap között 6-nál több napon dolgoztatni a munkavállalókat.
Vagy nagyon elnézek valamit, vagy amit csinál az az, hogy megnézi egy cella tartalmát és ha az P ÉS a tőle 7 cellára levő cella tartalma is P akkor a kettő között pirosít.
Amit én mondok az az, hogy ha egy cella tartalma P és a tőle 7 cellára eső cella tartalma üres, de a nyolcadik cella P, akkor a fenti IF hamisra értékelődik ki, pedig a két P-s cella közötti távolság nagyobb mint 6.
Vagy. A1=P, C1=P és G1=P
Bár itt két szomszédos P közötti távolság sem nagyobb hatnál, de az A1 ellenőrzésekor (tartalma P= true) ellenőrzi a G1-et is (tartalma P= true), látszólag megfelel a kódba épített tesztnek, de mégsem olyan eset amit keresünk.
Én egy Do While-lal megkeresném a vizsgált cella utáni első P-s cellát és összehasonlítanám az oszlopszámukat.
"Azt kellene leellenőrizni, hogy "P" és "P"-t tartalamzó cellák közti cellák száma nem több 6-nál. Amennyiben több jelölje ki a két "P" közti cellákat pirosal."
Mert úgy tűnik, mintha a konkrét cellától számított 7. cella tartalmát nézni, holott ha pld. a 8. cella "P" de a hetedik üres, akkor is pirosítani kell.
Fárszthatlak benneteket még egyszer? /és nem utoljára?
Az alsó kódban minden működik kivéve a banális filter show all, ami normál makróban működik, de ebben a környezetben nem...
WHY?????????????
Db = Workbooks.Count Dim ws As Worksheet
For i = 3 To Db
Workbooks(i).Activate 'Delete hidden sheets a = 1 While a <= Worksheets.Count If Not Worksheets(a).Visible Then Worksheets(a).Delete Else a = a + 1 End If Wend
For i = 1 To meddig If UCase(Cells(Target.Row, i)) = "P" And _ UCase(Cells(Target.Row, i + 7)) = "P" Then Range(Cells(Target.Row, i), Cells(Target.Row, i + 7)).Interior.ColorIndex = 3 End If Next i
Biztos én csinálok valamit rosszul, de ezek a képletek nem jöttek össze nekem. Írtam helyette egy makrót, ami a lapon lévő összes sort, és oszlopot vizsgálja, a "P"-k közötti cellák hátterét pirosra váltja, amennyiben a a darabszámuk eléri, vagy meghaladja a 6-ot.
Sub mm() Dim oszlop As Integer, uoszlop As Integer, sor As Integer, usor As Integer Dim kezd As Integer, veg As Integer, t As Boolean
For sor = 1 To usor For oszlop = 1 To uoszlop If Cells(sor, oszlop) = "P" And t = False Then kezd = oszlop t = 1 GoTo Kov End If
If Cells(sor, oszlop) = "P" And t = True Then veg = oszlop If veg - 1 - kezd > 5 Then Range(Cells(sor, kezd + 1), Cells(sor, veg - 1)).Interior.ColorIndex = 3 End If kezd = veg End If Kov: Next oszlop Next sor End Sub
Én mindig is szerettem ide járni, pont mert mindenki tök normális és segítőkész. /ellentétben pl az access forummal, ahol már annyi idióta okostojással találkoztam/.
Hát pont azért van ez a fórum, hogy segítséget lehessen kérni, nem?
Mindenki jól jár :-), aki kérdez és aki válaszol.
Nem tudom, hogy az itt feltett kérdéseim alapján ez mennyire hihető, de a cégünkön belül /200ember :-), engem képzelnek az
"excel" szakértőnek. Ha kérdésük van mindig hozzám jönnek, főleg hogy tanfolyamot is csináltam az embereknek.
És én ezt konkrétan tök szeretem, mert pl:
1. nagyon okosnak érzem olyankor magam :-))), hogy mindent meg tudok oldani /majdnem :-d/
2. mindig tanulok valami újat
3. tök jó érzés, hogy meg tudom valakinek könnyíteni az életét
4. a hülye monoton feladataim mellett kifejezettem éhezek apró/ vagy nem apró kihívásokra
Szóval mardjon szerintem minden a régiben, ahogy eddig...mindig mindenki segítőkész volt és jófej :-)))
Ez nem iskolai feladat. Kezdő vagyok az excel-ben. Ez egy munkahelyi beosztás elkészítését segítő táblázathoz kell. A célja, hogy lelellenőrizze, hogy az adott dolgozónál két pihenő közt nem telik el 6 napnál több.
Excel-ben adott egy sorban néhány cella, melynek tartalam "P". Azt kellene leellenőrizni, hogy "P" és "P"-t tartalamzó cellák közti cellák száma nem több 6-nál. Amennyiben több jelölje ki a két "P" közti cellákat pirosal.
Igen, másik változóval. Pl. az egyik lapon lévő adatokból valamilyen feltételnek megfelelőeket akarsz átmásolni egy másik lapra, mindig a következő sorba.
Az első lapon egy for-next ciklusban figyelteted, megfelel-e az érték a feltételnek, majd minden másolás után növeled a változót, ami a beírás helyét határozza meg.
Köszönöm az ötletet, de közben rájöttem, hogy azért nem tudta az Excel hova másoljon, mert cellákat töröltem és nem sorokat.
/Persze nem értem miért volt ez baj neki, de mindegy/
Az őrület környékez. Kikészülök ettől a #&@&# makrótól. Főleh, hogy szerintem olyan közel vagyok amegoldához és mégis távolt :-D.
Minden ami zöld a csodásan működik, mert kipróbáltam.
Ami problémás az a maradék...
DE MIÉRT??????????????????????????????
Megőrülök!!!!!!!!
Sub megnyitás() respond = MsgBox("Do you have other excel file open?", vbYesNo, "Question:") On Error GoTo Errorcatch If respond = vbYes Then MsgBox "Please close all excel files except the template!" Exit Sub Else
With Application.FileSearch .LookIn = útvonal .FileType = msoFileTypeExcelWorkbooks .Execute For i = 1 To .FoundFiles.Count Workbooks.Open .FoundFiles(i) Next
A temlétből törlöm a bemásolt sorokat, mentem és becsukok mindent.
Újra nyitom a templétet, az excel mintha emlékzne, hogy ott volt korábban pár sor, amit töröltem és folytattja a "kitörölt", tehát fizikailag már nem ott lévő sorok alatt.
Immediat ablakban csináltam, úgy hogy részenként tesztelem...
Leegyszerűsítettem és kinyitottam a temlétet meg a Book2 fájlt, hogy megnézzem a copy működik-e.
Vicces mert úgy tűnik hiányzott egy cell select parancs és most már kopizza, viszont egy dolgot baromira nem értek...
Ahányszor futtatom a makrót mindig lejjebb és lejjebb másol, amit totál nem értek...hiszem ha én kitörlöm az előző bemásolt sorokat, akkor a használt sorok száma marad 1...
Nem tudom értitek-e...
A lenti részt teszteltem. És működik is. Elvileg hurrá. Viszont, ha újra próbálkozom ennek a kódnak a futtatásával, úgy hogy amit korábban bemásolt 2 sor törlöm, akkor ő mintha úgy látná, hogy ott továbbra is van valami...és a már kitörölt sorok alá másolja be az újat?
Excel-ben adott egy sorban néhány cella, melynek tartalam "P". Azt kellene leellenőrizni, hogy "P" és "P"-t tartalamzó cellák közti cellák száma nem több 6-nál. Amennyiben több jelölje ki a két "P" közti cellákat pirosal.
Én arra gyanakszom, hogy vagy a workbook-kal vagy a worksheet(1)-el van valami gond.
Még egy elméleti hibalehetőség (nem gondolom, h ez a gond, de jobb helyretenni) az hogy wawabagus kódjában Sheets(1) szerepel, nem pedig Worksheets(1). Elméletben ez okozhat olyan hibát, hogy ha az első sheet pld egy Chart akkor azt próbálja kijelölni és kopizni. Én nem szeretek Sheet-re hivatkozni, mert sose tudja az ember, hogy olyan sheet-e, mint amivel igazán dolgozni szeretne...
Kicsit mellékszál:
A sok xldown és xltoright helyett lehetne használni a következő technikát is:
Dim SourceWS As Worksheet
Set ws = Workbooks("book1").Worksheets(1)
SourceWS.Range("A1").CurrentRegion.Copy
Merthogy a CurrentRegion object direkt erre van (excel felületen a Ctrl+*)