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.
Még annyit, hogy elég, ha az első (jan) lapra írod be a neveket. A többi lapot (beleértve az összesítőt is) együttesen kijelölöd, az A1-be beírod: =jan!A1, ezt lehúzod. Így minden lapon mindig egyezik majd a névsor.
- lista készítése, amely csak az egyedi neveket tartalmazza (1 név csak egyszer)
- az egyedi lista minden elemére összesíteni külön a B és a C oszlopok adatait, mind a 12 lapon
Az egyedi névlista készítéséhez több módszert is használhatsz:
- collection használata, pont én másoltam be korábban egy érdekes linket erről, vagy
- minden nevet másolj át az összesítő lapra (vagyis itt még lesz duplikáció) majd ezekből csinálj egy egyedi listát (data/filter/advanced filter/unique values only). ez utóbbit makrorekorderrel a legegyszerűbb, utána a felvett kódot testreszabni (pld cellahivatkozások).
Van egy 12 lapból (jan-dec) + egy összesítő lapból álló munkafüzetem. Nevek listája van a 12 lapon (mondjuk A1-A10-ben). Mellettük a B1-B10-ben és a C1-C10-ben összegek.
Azt szeretném, ha az összesítő lapon nevek szerint összesítené az összegeket, oszlopok szerint. Ezzel nem is lenne baj, de elképzelhető, hogy év közben változik valamelyik név, így az összesítőbe kellene annak a személynek a neve is, aki mondjuk júniusig volt, és az is, aki júliustól volt - és külön-külön.
Valószínűleg az fkeres-sel kellene variálni, de megakadtam. Tudna valaki segíteni?
Ebből is látszik, hogy Sznidoval együtt kisemberek vagyunk. De sztem a zseni is csak a saját maga által keltett káoszban ismeri ki magát, de nem a máséban ;-)
Visszaolvastam jópár hozzászólást, de vagy én voltam vaksi, vagy nem volt hasonló kérdés.
Egy oszlopban vannak különböző azonosítók(számok), amik ismétlődhetnek. A 2. dimenzióban a soroknál 1-x -ig a hozzá tartozó értékek.
Megoldandó: szeretném egy külön táblázatba kigyűjteni az oszlopokban előforduló azonosítókhoz tartozó 1-x-ig(nem ismétlődnek) az összegeket, tehát ha 123 azonosító 53-szor fordul elő, és a hozzá tartozó 1-x-ig sorértékek öszzegét szeretném megjeleníteni. Remélem nem nagyon zavaros.
a b c d e f
3 1 3
3 2 3
4 3 2
5 2 2
2 1 2 stb...
és azt szeretném látni hogy pl. 3-as a összege 3 példa szerint a b 6...és így az összes tagra.
2) Nyomj ALT+F11-et -> belépsz a Visual Basic Editor-ba.
3) Menüből az Insert -> Module paranccsal adj egy új kódmodult a munkafüzethez. Az ilyen kódmodul való a makrók tárolására. A most hozzáadott modul meg is nyílik a képernyő jobb felső tartományában.
4) Ebbe a modulba másold be a makró kódot, amit a 14260. hsz-ben küldtem.
5) A bemásolt kódban a "C:\itt_vannak_a_fájlok_mappa\" helyére írd be azt a mappát, amelyikben a feldolgozandó excel munkafüzetek vannak. Teljes elérési út kell, és \ (Backslash) jel legyen a végén.
6) Térj vissza az Excel főablakba és mentsd el ezt a munkafüzetet, akámilyen néven, akárhová, csak ne abba a mappába, amit az 5) pontban megadtál.
A fenti lépésekkel létrehoztál egy munkafüzetet, benne egy akárhányszor lefuttatható makróval.
A makró futtatása:
ALT+F8 gombokkal előhozod a létező makrók listáját, ott kiválasztod az "Összevon" nevűt, és az Indítás gombra kattintasz. Akkor a kód lefut, és azt fogja csinálni, amit korábban írtam.
Az összevont cellákat tartalmazó tartományt nem gombbal, menüből sem tudod rendezni. Többször, többen írtuk már ebben a fórumban, hogy az összevonásokat a lehetőség szerint el kell kerülni.
Tegyél be ide egy képet a tartományodról, lehetnek hamisak is az adatok.
Volt már, hogy segítséget kértem itt a fórumon, viszont lenne egy-két téma, amit a témát megfelelő mélységben ismerővel megbeszélnék személyesen Pécsen. Ebből levehető, hogy célszerűségi alapon pécsi, vagy Pécs környékieknek lenne egy-két alkalommal fizetős feladat.
Témakörök:
-Adatbevitel, vagy adatok kinyerése adott cellába egy cella mellett megjelenő "lebegő" ablakban lévő munkalapról. A celláról lelépéskor eltűnik, vagy cserélődik a használható "lebegő" munkalap.
-Több munkalapról kigyűjtött adatok elküldése e-mailben másik felhasználóhoz, és ott egy struktúraazonos munkafüzetbe adatok beolvasása. (Nem ugyanannak a fájlnak a közös használata)
-Hiperhivatkozások halmazából (kb. 50 db.) Kiválasztani azt a 3-5öt amit egy- egy faladathoz használni lehet. (Logikai függvények)
NE JELÖLD KI az összegző oszlopot, csak állj benne, mikor a rendező ikonra kattintasz. Ha az értékeket, és az összegzéseket tartalmazó oszlopok között nincs üres oszlop, a teljes táblázatot rendezheted így az aktuális oszlop szerint.
Egy olyan dolgot kellene holnapra meggyinálnom, ami szerintem pofonegyszerű, csak nekem nincs meg a rutinom.
Van egy terméksor, bizonyos időközönként árazva, a sorok végén eg oszlopban pl =E6+G6+I6+K6+O6+Q6+S6+U6+W6+Y6 ... egyenlet mutatja az aktuális összeget.
Eszerint a sorvégi összeg szerint szeretném csökkenő sorba tenni úgy, hogy a saját egész sorait is vigye magával, ne csak az összeg oszlopát.
Biztos értitek... Előre is kösz a segítséget, Karna
Ez azt csinálja, hogy egy adott mappában lévő összes .xls kiterjesztésű fájlt megnyitja, és azok első munkalapját átmásolja abba a munkafüzetbe, amelyikben a makró fut. Érdemes ezért egy új munkafüzetbe tenni a makrót, továbbá összegyűjteni a forrásfáljokat egy mappába, és ezen mappa teljes elérési útvonalát megadni a kód alábbi sorában:
Nem feltétlenül, mert most hogy utánagúgliztam, találtam azért panaszkodást usedrange ügyben.
Azt olvastam, ha csinál az ember egy usedrange.rows.count-ot (v. menti a workbook-ot) akkor a usedrange elfelejt minden múltbeli cuccot, reseteli magát és a tényleges usedrange lesz.
Igen, ezt a különbséget én is észrevettem. Meg mást is. Ha például egy vadiúj, üres munkalapnak mondjuk a G6-os cellájába beírsz egy tetszőleges értéket, aztán kitörlöd, a Te programod szerint a UsedRange G6-on lesz, és ezáltal a munkalap nem-üresnek minősül. Ez szerintem nem annyira jó.
Igazából nem értem teljesen, hogy ez a UsedRange hogyan is működik, azért nem is szoktam használni..
Nagyon szépen köszönöm a While-os válaszod, kevéske tudásom alapján erre tippeltem én is.
Ez utóbbi függvényedet teszteltem. Én ezt a programot arra használom, hogy a teljesen üres munkalapoktól megszabaduljak. A két lehetőség abban eltér, hogy a függvényed minden esetben üresnek mondta a munkalapot, ha a cellák üresek voltak. A másik program (ami egyébként nem az én munkám gyümölcse) viszont ha a háttérszín, vagy cellaszegély be volt állítva, vagy valamelyik cella megjegyzést tartalmazott, akkor már nem tekintette üresnek a lapot.
Function Üresmunkalap(WS As Worksheet) As Boolean If WS.Cells.Count = Application.WorksheetFunction.CountBlank(WS.Cells) Then Üresmunkalap = True End Function
Ha a kifejezés értéke igaz, a teljes ciklusmag végrehajtódik, aztán a kifejezés újra kiértékelésre kerül. A ciklus mindaddig megy, amíg a kiértékeléskor True az eredmény. Amint egy kiértékeléskor False eredmény jön ki, a futás a Wend utáni első utasításon folytatódik.
Nem tudnám egzakt módon meghatározni a különbséget, de biztosan van, ha egyszer mindketten léteztnek...
Annyi bizonyos, hogy a Do..Loop ciklusból középen is ki lehet lépni (pl. egy feltétel kiértékelése után) az Exit Do paranccsal, míg a While..Wend ciklusban ilyen lehetőség nincs. A Help azt írja, hogy a Do..Loop utasítással rugalmasabb és strukturáltabb ciklusokat lehet írni. Abban is biztos vagyok, hogy amit While...Wend ciklussal meg lehet oldani, azt Do..Loop-pal is meg lehet, szóval az előbbit nem kell bevenned a repertoárba.
A magam részéről ezt szoktam meg, és csak akkor használok mást, ha ezzel nem tudom megoldani, amit akarok. Nem emlékszem, hogy az utóbbi 3-4 évben használtam volna Do...Loop ciklust.
Ha érdekel a téma, akkor itt egy progi, ami megvizsgálja, egy munkafüzetben, hogy üres-e a munkalap.
Dim EgyCella As Boolean Dim A1EsCella As Boolean Dim A1Ures As Boolean Dim lap As Object
For Each lap In Worksheets EgyCella = lap.UsedRange.Cells.Count = 1 If EgyCella Then A1EsCella = lap.UsedRange.Address = Cells(1).Address A1Ures = lap.Cells(1) = "" If EgyCella And A1EsCella And A1Ures Then 'üres a munkalap
Ezt While ciklust eddig nem ismertem. Illetve ismertem csak nem VBA alatt. VBA-ban én mindig a Do …. Loop ciklust használtam.
Az angol tudásom elég kezdetleges. Ez a While ugyan az és ugyan úgy működik, mint a Do … Loop? (Már amennyiben ez utóbbinál is előre írom a feltételt, mert azt látom hogy a While-nál nem lehet a végén a feltétel.) Vagy van valamilyen különbség a kettő között?
Igen, lehetne még cifrázni, mert ez csak egy kezdetleges változat.
Ha például a cél munkafüzet ugyanabban a mappában van, ahol a forrásfájlok, valószínűleg kiakad a program, amikor önmagát is meg akarja nyitni. Aztán, ha a forrás munkalapokon csatolások vannak, akkor nem tudom mi történik. Aztán az is lehet, hogy a forrásfájlok nincsenek egy helyen, vagy nem Excel formátumban, stb.
Gondoltam, majd ha a kérdező pontosít, én is pontosítok.
Akkor ezzel a képlettel elméletileg a címek másolását is meg tudom oldani, csak a dátum helyére kell más kód és vigyáznom kell, hogy ne maradjon ki üres sor.
Este nekiállok! Kösz még 1x! További szép napot mindenkinek!
Igazán profi (és megnyugtató) megoldás pl. a Sharepoint használata lenne a szerveren (Ha Windows Server alapú a hálózat, akkor lehet, hogy telepítve is is van, pl. Windows SBS )
Ha hasonlóan jó, ráadásul ingyenes az Alfresco (www. alfresco.com), Windows és Linux szerverre ugyanúgy telepíthető. Ez is tudja a Sharepoint protokollt.
Nem derül ki "maiann" leveléből, az is lehet, hogy egy hálózaton csücsülnek az érintettek, egyszerűen csak nem tudja közös használatúvá tenni a táblázatot.
A tipp amit adtál jó, én sem ismertem ezt a lehetőséget. köszi
Alapból elérhető a megosztás, lehet böngészőben és Office programban is dolgozni a file-okon és még adnak 25 GB (!) tárolóterületet is. Microsoft szolgáltatás, szóval akár még biztonságos is lehet...
Sziasztok, én Excel fájlt szeretnék közös használatra létrehozni. Szeretném, ha a fájl több felhasználó által is elérhető lenne egy időben, s többen is tudnának benne egyszerre dolgozni.
Mint kezdő versenyző az Eszközök/Közös használat funkcióval próbálkoztam, de nem jártam sikerrel. Ti mit gondoltok?
Töröltem a lapot, újat csináltam, cellatartalmat is, de ugyan az. Ha küldenél egy mailt a címeddel, átküldöm a munkalapot, persze csak ha van időd a hülyeségeimmel foglalkozni. :) Nem akarok senkit terhelni ezzel..
Ha az A2:A20 között van akár csak egy szóköz is a cellában (esetünkben az A20 gyanús, hogy nem üres), akkor természetes, hogy az A21-be rakja a dátumot.
Jelöld ki a 2:20 sor tartományt és üss rá egy Clear All-t, utána futtasd le a kódot.
Köszönöm, kipróbáltam a laptopon is, de ugyan az a helyzet, itt is az A21 -es cellába ír. Délután, munka után az otthoni gépemről csinálok képet, kiváncsi vagyok mi működik rosszul. :) thx
Szal volt egy előző kérdésem, amikre próbáltatok válaszolgatni és segíteni. Köszönöm, csak nem tudtam eddig válaszolni. Nagyjából megfejtettem azt hiszem. A feladat: Excellel legyártunk egy csomó U(0, 1) eloszlású véletlen számot. Ezekből gyártunk egy csomó γ(1, 1/τ) exponenciális eloszlású véletlen számot. Hogy mekkora a τ, ki-ki maga dönti el. Ez igazából a feladat első része.
Excelben megcsináltam a véletlenszám generálást RANDBETWEEN(0,1) fv -nyel. Viszont ebből kellene nekem exponenciális elosztású véletlenszámokat generálni. Ezt megpróbáltam úgy, hogy az exponenciális elosztás fv-nyel A1től 1000 ig mivel ennyit generáltam a lambda értéke 2 és az értéke 1 mert úgy van hogy ha igaz, akkor az elosztás fv-t kell használni, ha hamis akkor meg a sűrűségfüggvényt. Ezért B1=EXP.ELOSZLÁS(A1:A1000;2;1). Ahol az első oszlopban 1 volt ott ezáltal 0,864665 az eredmény. Ahol pedig 0 ott 0. Viszont szerintem ez nem lesz jó, mivel véletlenszámot kell generálni ez pedig mindenhol ugyan az...
Ebben esetleg help? :) Vagy az is lehet, hogy az egész rossz és teljesen más irányba kavargok.
Nekem így az A21 -es cellába rakja az új dátumot, pedig az A2-től az A19 ig is üres. És csak 1x, tehát hiába nyomom 2x, 3x a command button -t, csak egy cellát ír, az is az A21.
(ugye minden nap 1x nyomnám, akkor tenne a következő cellába egy új dátumot)
:) Basszus, küzdök itt olyan dolgokkal, amit sajnos soha nem tanultam, de érdekel. Sajna más fórumokon egy kezdőnek egyszerre beírják, hogy " 5000,- Ft +áfa " a megoldás, de hát az ember azért jár ilyen helyekre, hogy tanuljon valamit. Ha pl. olajat szeretnél cserélni egy kocsiban és kérdezel, hogy hogyan kell, egy autószerelő válaszol, hogy vidd el hozzá, 10e -ért megcsinálja, segít az valamit? Semmit, mert ha úgy akarnád elvinnéd hozzá, de egy kis segítséggel magad szeretnéd megoldani, nem is értem, hogy az ilyen autószerelő minek jár egy fórumra. Nagyképűsködni? Tanulni szeretnék én is és köszönöm az ezelőtti segítségeket, közben azért próbálok nem csak másra hagyatkozni, azért írtam a magoldást, hogy ha esetleg a jövőben valakinek pont ez kell, megtalálja... :)
Na erre magamtól nem jöttem volna rá, gondolkodhattam volna rajta még néhány évet :) de nagyon jó megoldás, megoldotta a problémámat. Hálás köszönet érte.
2003 és 2007-es verzióban is van "Adatösszesítés" funkció. Ez pontosan erre való amit írsz. Rögzíthetsz makrót is, hogy ne kelljen manuálisan paraméterezgetni.
Ez makróban ennyi: (Ha a1:h7 tartományban vannak az adatok)
Sheets("itt adj meg egy üres munkalapnevet").Select Range("A1").Consolidate Sources:="Munka1!R1C1:R7C8", Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
A másik pedig a pivottábla, ami hibátlan megoldást kínál (kimutatástábla másképp - és úgy rendezed benne a sorokat/oszlopokat ahogy akarod)
A szumha és szumhatöbb függvény nem jó simám, próbáltam már minden féle képpen. A gondom velük az, hogy csak egy sor illetve oszlop adatait tudtam velük az említett kritériumok alapján összeadatni. Plusz a szumhatöbb a kompatibilitási problámák miatt nem is lenne jó. (2007-2003) De a többi megoldást kipróbálom, remélem sikerem lesz velük.
Excel 2007-ben egy command button -el gondoltam, hogy megoldom a nyomtatást, de nem jutok előbbre.
A "választ" nevű lapon lenne a gomb, viszont a "nyomtat" nevű lapot kellene hogy nyomtassa, úgy hogy csak annyi lapszámban, ahány oldal adatot tartalmaz.
Tehát ha csak 3 oldalon van adat, normál esetben kézzel írja be az ember a nyomtatandó oldalak számát (pl. 1-3) viszont nem szeretném, hogy majd a macro majd 15 oldal üreset is nyomtasson( a komplett nyomtatási területet). (eddig csak ilyen kódot találtam a neten)
A lapszám mindig változik, de a "nyomtat" lapon az "O7" mező úgy van megcsinálva, hogy aktuálisan mutassa hány oldalon van adat. (pl. 5)
Tehát ebben az esetben nyomtassa ki a "nyomtat" lapot 1-5 ig lapszámban.
Ha tudna valaki egy kódot írni ehhez, nagyon megköszönném!
Csináltam Neked egy UDF-et, remélve, hogy magyar excel-ed van.
A kód:
Function SzumhaTöbb(Tartomány As Range, Kritérium1 As String, Össz_Tartomány As Range, Kritérium2 As String) Dim MyRange1, MyRange2 As Range Dim Sor, Oszlop, Elsö_sor As Integer For Each MyRange1 In Tartomány If MyRange1.Value = Kritérium1 Then For Each MyRange2 In Össz_Tartomány If Elsö_sor = 0 Or Elsö_sor = MyRange2.Row Then If MyRange2.Value = Kritérium2 Then SzumhaTöbb = SzumhaTöbb + Cells(MyRange1.Row, MyRange2.Column) End If ElseIf Elsö_sor <> MyRange2.Row Then Exit For End If Elsö_sor = MyRange2.Row Next ElseIf MyRange1.Row <> 1 And MyRange1.Value = "" Then Exit Function End If Elsö_sor = 0 Next End Function
Folyamat:
eszközök, makró, visual basic
Elindul a program, insert module
Megjelenik egy fehér lap, oda kell bemásolni a kódot.
Visszalépsz a excel felületre, és úgy tudod használni a felhasználói függvényed, hogy függvény beszúrás, felhasználói, ha mindent jól csináltál, akkor ott lesz a SzumhaTöbb. Kiválasztod, és megadod az adatokat.
Tartomány - amiben keresse a Kritérium1-et
Kritérium1 - Te esetedben az "a", ami lehet egy cella is
Össz_Tartomány - ennek a tartománynak az első sorában fogja keresni a Kritérium2-t
Kritérium2 - Te esetedben a "feb", ami lehet egy cella is
A preoblémám, hogy hogyan tudnám összeadni bizonyos (de változtatható) feltételek alapján a táblázatban szereplő számokat. Pl. adja össze az "a" sorazonosítóval jeleölt sorokban azokat a számokat, amelyek oszlopazonosítójában "feb" van. De a feltételeket külön cellából vegye, mivel ezek módosulhatnak.
Lehet, hogy az én agyam nem fog ma, de már napok óta ezen gondolkodom, de nem megy.
Azt gondolom, hogy tudunk segíteni. A problémám azzal van, hogy elég régen nem foglalkoztam a matematika ezen irányával, és a fogalmakkal van egy kis gondom.
Addig értem, hogy van n darab 0-1 közötti számod.
A "csomó" megegyezik n-el?
Az mit jelent pontosan, hogy γ(1, 1/τ) , ennek van köze az n darab 0-1 számmal?
A T lehet egy cellában? Csomó minden darabjánál ugyanaz, azaz konstans, vagy változik véletlenszerűen, és lehet ez a n darab szám?
Az exponenciális eloszlású véletlen szám, az azt jelenti, hogy ha fogok egy exponenciális függvényt, akkor ezek a pontok illeszkednek arra a fügvényre?
Bocs a sok h..lye kérdésért, de régen matekoztam exponenciális függvényekkel!
Olyan érdekességre keresek megoldást, hogy generálni kell n menyniségű véletlen számot 0 és 1 között. Ez megvan. Viszont ezekből gyártanunk kell egy csomó γ(1, 1/τ) exponenciális eloszlású véletlen számot. A T értéke ránk van bízva. Hogyan tudom ezt megcsinálni excelben? Lehet nem jó helyre írok :) ezesetben elnézést, viszont aki tud segítsen benne. Fontos lenne.
"Az abszolút hivatkozást én az FKERES-nél szoktam használni viszonylag gyakran, még a képlet lehúzása előtt, különben a "tartományban keres" szépen elcsúszik... :("
Ezért jó ha elnevezed a tartományt, akkor nincs ilyen gond és még jobban is olvasható! :-)
A birtokszerkezetet sztem felejtsd el. Ezt csak egy embertől fogadom el, és az nem te vagy.
Irodalma a témának óriási van magyar és angol (meg gondolom cseh, lengyel stb. :) ) nyelven is, érdemes valami középiskolai táblázatkezelős tankönyvet keresni. A Műszaki Kiadónak vannak egész jó könyvei a témában. :-)
De ilyen alap dolgokat, mint HA, FKERES, VKERES stb. egy 300 forintos, 5-ös Excelhez írt könyv is tudja. :) (Persze sztem érdemes valamilyen relevánsabb kiadványra beruházni, hátha érdemes lesz lapozgatni később is. :) )
Igazából gyakorolni kell, nagyon sokat. Annál jobbat nem tudok elképzelni.
Nincs valami kis oktatóprogram valahol vagy leírás az alap dolgokról? mert itt tök jól elmondjátok csak gondoltam lementeném hátha pár év múlva is szükségem lehet rá :)
Ha a D1-be azt írod, hogy =A1, majd ezt másolod, akkor a hivatkozás minden más cellában átalakul úgy, hogy a balra háromra levő cella tartalmára fog hivatkozni. Ezt nevezik relatív hivatkozásnak, mert tulképp te nem az A1-es cellára hivatkozol logikailag, hanem a D1-től balra háromra lévőre (ami formailag az A1).
Ha azt írod be, hogy =$A$1, majd másolod, akkor minden cella pontosan az A1-es cellára fog mutatni. Ezt abszolút hivatkozásnak nevezik, mert akárhová másolod a D1-ből a képletet, mindig pontosan az A1-et fogja meghivatkozni.
Persze nem feltétlenül kell a sor és az oszlop abszolút hivatkozását együtt használni vagy egyszerre elhagyni, lehet keverni is: csak a sor vagy csak az oszlop abszulivitását használni. Akkor jön jól, ha pl. egy szorzótáblát csinálsz, ahol az egyik tényezőnél a sor adott, de az oszlop mindig más, a másik tényezőnél pedig pont fordítva. Ekkor pl. a B2-be írhatod, hogy =B$1*$A2. (Egyébként az F4 lenyomásával kivarázsolható ez a hivatkozási forma az Excelből, ha a szerkesztőlécen a cella hivatkozásán állsz.)
Az abszolút hivatkozást én az FKERES-nél szoktam használni viszonylag gyakran, még a képlet lehúzása előtt, különben a "tartományban keres" szépen elcsúszik... :(
Bár nem exeles kérdés.. Vista oldalsávon az időjárásnál eltünt a kép (napocska vagy felhő) csak piros X lásztik. Leválaszottam újra felraktam, nem javította meg. Valakinek hasonló gondja volt, mi lehet a megoldás?
Ha esetleg valakinek még ilyen problémája lenne, a jól működő kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If 'For Each MyRange In Range(Tartomány.Address) ' Ez a sor volt a rossz
For Each MyRange In Tartomány ' Így jó If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then ' MinKereso = "Nincs ilyen cellaérték" MinKereso = 0 End If End Function
Esetleg csinálj három képet a háttérképedből az eredeti szétvágásával, és tegyél egy darabot a D3:F4, egyet a C2:C6, egyet pedig az B3:B6 cellákra és tedd egymás mellé őket. :)
Kicsit még nem értem ezeknek az UDF-nek a lelki világukat.
Nem tudom mikor futnak le.
Az én esetemben amikor lefut, akkor az összes munkalapon végigmegy, és számolja a képleteket, és valami oknál fogva az első munkalap tartományban számol, pedig a képlatben nincs munkalap hivatkozás, lehet ez a baj?
Az lett egy megoldás, lehet csak köztes, de így működik, hogy a thisworkbook-ba betettem az sheetactivate-hez egy calculate-ot, ami annyit jelent, hogy minden munkalap váltásnál újraszámol, és frissít mindent szépen!
"Bár biztos megoldható az is amit te szeretnél, txt fájlokat kezelni excelből."
A felülírás nagyon szépen megy (menne), sőt, a tartalmat is össze tudja hasonlítani, hogy egyáltalán felül kell-e írni a fájl tartalmát. De én úgy vettem észre, hogy az Excel (és a VBA) nem nagyon támogatja az ilyen szintű fájlműveleteket... :-(
Külön könyvtárba: ez is egy lehetőség, de szeretnék felhasználóbarát megoldást. ;-)
Írtam egy UDF-et (ez volt az első). Az a baj, hogy nem jól működik!
A kód:
Function MinKereso(Tartomány As Range, Lépték As Variant) Dim MyRange As Range Dim Min, Oszlop As Integer Min = Application.WorksheetFunction.Max(Tartomány) Oszlop = Range(Tartomány.Address).Column If Lépték <= 0 Then MinKereso = "Hibás lépték!" Exit Function End If For Each MyRange In Range(Tartomány.Address) If ((MyRange.Column - Oszlop) Mod Lépték) = 0 Then If MyRange.Value <= Min And MyRange <> 0 Then Min = MyRange.Value MinKereso = MyRange.Value End If End If Next If MinKereso = Empty Then MinKereso = 0 End If End Function
A kijelölt tartomány minden negyedik cellájáinak a minimumát adja, a nullát kihagyja. A probléma az, hogy ha ez a képlet "=MinKereso(B4:AA4;3)" több munkalapon szerepel, mindig az első munkalap tartományában dolgozik.
A kérdés, hogyan lehet egy UDF-et csak az aktuális munkalapra tartományára hivatkoztatni?
A három pont nálam azt jelenti, hogy "jól van, mondjad csak a hülyeségedet, de most már jó lenne befejezni". (Bocsánat a stílusért (vagy annak hiányáért).)
Általában ez inkoherens a környezetében lévő hozzászólásokkal és inkongruens a közlő szándékával, ezért inkább nem értem, mitsem félreértsem. A szmájli a végén meg teljesen érthetetlenné teszi számomra. :)
Van párszáz fájl (asszem valami 182 körül, de végülis mindegy), amik textfájlok, jegyzettömbben szerkeszthetőek (egy programnak a bemenő adatai, változók értékeit olvassa be belőle).
A fájlok tartalma struktúrált, tabulátorral tagolt. A legkönnyebb Excelben szerkeszteni és makróval kimenteni őket munkalaponként külön-külön fájlba (és ez a gyakorlat is).
Jelenleg az a megoldás, hogy ctrl+A, majd jegyzettömbben beillesztés, mentés. Ez sok változás esetén macerás, makróval gyorsítható.
Ez a makrós mentés szépen megy is, de ha az előző fájl már létezik, megkerülhetetlen külső ok miatt rajta van a read only bit. Ha nem új munkalapot hozok létre, hanem a tartalmát módosítom, akkor nem tudja felülírni a már létező fájlt (meglepő módon :P). Megoldásként le kéne venni róla a read only bitet, majd a kimentés után visszatenni.
Ha nagyon nincs min gondolkodni, nekem lenne egy kérdésem: makróval hogyan tudom egy adott fájlról levenni a read only bitet (és persze visszatenni rá)? (Ha esetleg nem fejezném ki magam elég jól: a batch fájlokból megszokott attrib -r megoldás VBA alapú verziójáról lenne szó.) :) De van esetleg erre valami megoldás?
Most az A oszlopban nem a két megálló közötti menetidő van, hanem a végállomástól a megállóig szükséges teljes menetidő (természetesen tartózkodással növelve, tehát menettartam). Tehát ha három perc alatt ér oda, akkor csak a hármat kéne hozzáadni, nem a kettőt. :)
Azt hiszem itt az excel elejétől kellene kezdeni a dolgot... Félretéve a tréfát!
Gondold végig mit szeretnél:
- Ha az A oszlopban a kiinduló állomástól való távolság van időben (szerintem Te ezt szeretnéd), akkor a kindulási időhoz hozzá kell adni az aktuális sor A oszlopában lévő számot
- Ha az A oszlopban az állomások közti távolság van idóben (erre adtunk neked eddig választ), akkor a kiindulási időhöz hozzáadtuk az addig eltelt összes idő.
Az első változtatra a képlet(C2-es cella): =C$1+A2 (ez azt jelenti, hogy a C1-hez hjozzáadja az A2-es cella értékét, ezt kell lehúzni)
Ha az adatraid az A, B, C oszlopban vannak, és a C1 cellában van a kiinduló idő, az A oszlopban az állomás közti menetidők, és Te mindig a C1-es cellához akarod hozzáadni az addig eltelt menetidő, akkor a C2-e cella képletet a következő:
Szóval az állomás előtti időadatot hozzárendelem a menetidőhőz 2 cellát megcsinálok és akkor le tudom húzni végig és így lépteti a menetidőt. Eddig jó.
DE hogy lehet azt megcsinálni hogy a kiindulási időhöz (13:00) lenne az egész alapja, és a megállók mellett a menetidőt rendelné hozzá? tehát:
0:00 Árpád híd
0:01 Váci út
0:03 Népfürdő u.
0:05 Margit sziget..
Mert bárhogy rendelgetem hozzá mindig a legutolsó vagy az azelőtti cellához akarja hozzányomatni a következő idejét, és pl a Népfürdő utca és a Margit sziget között 6-8 percek jönnek ki egy 2 perces útra.
Valamint hogy tudom eltüntetni ezt a kék L betűs függvénymoló izét a számadatok mellől?
A bug miatt csak egy ponton elmenti a fáljl, kilép és visszatölt. Utána már működik. A nagyobb baj az, hogy 2003-ban is működik, 2010-ben is, de épp a 2007-ben nem! :-(
Mondjuk, én az elsőt választanám, pontosabban azt, hogy Worksheet_Change segítségevel változtatom egy előre kirakott Image objektum képét. A második megoldás jópofa trükk, de ha jól értem, azt mondja a fickó, hogy bug van a háttérben, és így nem tudom, mennyire megbízható. Ad abszurdum még az is előfordulhat, hogy a Micro$oft jövő kedden kiad egy hotfixet, aztán vége a mókának...
Olyat tudsz a legegyszerűbben, hogy beteszel két képet, és makróval állítod a tulajdonságaikat. De képet beszúrni is lehet, csak sztem macerásabb.
A .visible tulajdonságot tudod állítani, és OK lesz.
(Fejből többet nem tudok, a szakirodalmam meg bent van, majd a többiek...)
-----
Az volt a bajom, hogy fogalmam sincs, hogyan kell cellába képet beszúrni. Én csak leteszem, és esetleg beállítom a cella méretének megfelelően, és megmondom, hogy a cellával együtt mozduljon a kép is (helye is, mérete is).
Képre szeretnék hivatkezni függvényel.úgy hogyha egy bizonyos cellába egy bizonyos érték (pl.1) van akkor egy másik cellába szúrjon be egy képet.pl.A1-es clella=1 akkor B1=egy bizonyos kép
Igaz ebben az esetben már nem sok értelme van a vRng tartománynak, mert ugyanazokat adod meg utána megint, akkor lenne értelme, ha ki tudnánk nyerni a vRng-ből, hogy mi a file neve, és mi a munkalap neve.
MÉGRE felfogtam egy részét annak, amit magyaráztatok nekem.
rWorkRange.Offset(0, 10).Value = "=VLOOKUP(RC[-10],PL_Wasko_SP_Standard_Services_Q1_2011.csv!B:L,10,0)" Helyett ez: rWorkRange.Offset(0, 10).FormulaR1C1 = "=VLOOKUP(RC[-10],PL_Wasko_SP_Standard_Services_Q1_2011.csv!C2:C12,10,0)" Vagy ahogy javasoltad:
Set vRng = wbPriceList.Worksheets(1).Range("B:L")...ami nem relatív
Tartomany = vRng.AddressLocal(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(1, 12))...de ez már relatívvá teszi és akkor a Vlookup is tudja értelmezni!!!!
Egy mini lépést már előre jutottam :-) hála nektek :-DDD...
És végre felfogtam Szinda, amit írtál erről tartomány dologról...
Vettem három mély lélegzetet és elkeztem lépésről lépésre...tesztelgetni...és a végére felfogtam amit írtál :-))).
Nálam működik a Te progid, csak beírtam egy set-et a vRng=wbPriceList.Worksheets(1).Range("B:L") elé.
Ha mondatonként (F8) futtatod, akkor miután tároltad a Tartomany változóba az adatot, vidd az egeret a Tartomany szóra, és kiírja, hogy mi a tartalma, ha ott "O" van, szerintem nem lesz, akkor cserélned kell, ha nem "C", akkor is cserélned kell "C"-re.
Köszi szépen a magyarázatot. Szerintem te érthetően magyarázod, csak én vagyok értetlen :-DDD.
Tehát elvileg az alább bemásolt kódnak működnie kell.
Beleírtam ezt a tartomány dolgot és mivel angol excelem van nem kell semmit sem cserélgetnem /ha jól értem/.
vRng definiálva van
Tartomany definialva van
és most nem foglalkozom egyenlőre azzal, hogy ha nem talál megfelelést, akkor leáll ez a fajta vlookup /szóval, hogy worksheetfunction-t kell majd használnom.
De valamit továbbra is rosszul csinálok, mert nem működik...
Erre ír hibát továbbra is: vRng = wbPriceList.Worksheets(1).Range("B:L")
Tudom kicsit hopeless vagyok :-)
-----------------
Sub teszt2() Dim wbPriceList As Workbook Dim wbCheckFile As Workbook Dim rWorkRange As Range Dim vRng As Range Dim x As Long Dim Msg As String Dim Ans As Integer
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show Set wbCheckFile = ActiveWorkbook
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show Set wbPriceList = ActiveWorkbook
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("B1") = "UniqueCode" Set rWorkRange = wbCheckFile.Worksheets(i).Range("A2")
Do While rWorkRange.Value <> Empty rWorkRange.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" Set rWorkRange = rWorkRange.Offset(1, 0) Loop Next i
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Copy wbCheckFile.Worksheets(i).Range("B:B").PasteSpecial xlPasteValues wbCheckFile.Worksheets(i).Range("L:M").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("O:P").Insert Shift:=xlToRight
Kezdjük az elején. Küldtél egy kódot, amiben valmi nem volt.
Ezt én bemásoltam egy VBA-ba, és elkezdtem futtatni. Üres munkalapokat nyittam meg, mert ugye úgy indul a program, hogy két file-t megnyit... (Aztán az első file-ba beírtam egy két számot, hogy legyen valami, mert az üres cellákkal nem foglalkozik a ciklus).
Miután eljutottam a Te hibádhoz, akkor szépen sorjában megnéztem, hogy mit akar csinálni a program. vRng simán set-elte. Aztán rájöttem, hogy te a "rWorkRange.Offset(0, 10).Value =" után az egész képletet idézőjelbe tetted, azaz szövegként beírattad a cellába. Ezt írta Robbantomestre is, és ezért vágta/vágtuk három részre a képletet: "=VLOOKUP(RC[-10]," & Tartomany & ",10,0)" a részeket az & fűzi össze. Ha a tartomány helyett csak a vRng-t írom, akkor lehülyézett, mert az egy range a benne lévő adatokkal, de én annak a címére voltam kíváncsi, ezért kipróbáltam a vRng.Address-t. Ez pedig "B:M" volt, amire azt gondoltam, hogy jó. Erre írta Robbantomester, hogy a VBA-ban írt képleteknek relatív sor/oszlophivatkozást kell tartalmazniuk, azaz ott ezt kell lásd: "C[-10]:C[1]", legalábbis a "B:M" ezt jelenti a cells(1,12) cellához képest. Ezután kipróbáltam a vRng.AddressLocal-t, ahol szükség volt a további argumentumokra a zárójelben. ezt tároltam a Tartomány változóban.
Ekkor kiíratva a Tartományt, azt láttam, hogy a magyar excelem a "C"-ket "O"-val jelöli, hát persze, hogy nem fogadta el, ezért ez a két betűt kicseréltem, és utána szépen lefutott a program, és jó fkeres függvényt tett be a megfelelő sorba.
Do While rWorkRange.Value <> Empty Tartomany = vRng.AddressLocal(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(1, 12))
tehát itt a már korábban definiált vRng-t használjuk?
tehát ez jó?: vRng = wbPriceList.Worksheets(1).Range("B:L")...valamiért erre mutat a debug, de a wbpriceList bizonyítottam működik, sok műveletben használja sikerrel a macro...de mi a gondja?
"Cells(1, 12)" ezt nem értem ebben a kontextustban...ez nem a 12-es oszlop első sorát jelenti? Nekem a vlookuphoz nem egy cellára, hanem egész rangre van szükségem, amiben keresgálhet, vagy totál nem értek valamit :-DDD...gondolom ez utóbbi.
'A magyar excel VBA-ja az oszlopot "O"-nak jelöli, ezt kell átcserélni "C"-re, ez a két sor azt csinálja :)
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("B1") = "UniqueCode" Set rWorkRange = wbCheckFile.Worksheets(i).Range("A2")
Do While rWorkRange.Value <> Empty rWorkRange.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" Set rWorkRange = rWorkRange.Offset(1, 0) Loop Next i
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Copy wbCheckFile.Worksheets(i).Range("B:B").PasteSpecial xlPasteValues wbCheckFile.Worksheets(i).Range("L:M").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("O:P").Insert Shift:=xlToRight
For i = 1 To x Set rWorkRange = wbCheckFile.Worksheets(i).Range("B2") Set vRng = wbPriceList.Worksheets(1).Range("B:M") Egyébként mostanság ehhez a sorhoz írja a debug, hogy nem érti...de mi nem jó ebben? Bár igaz olyat is láttam, hogy ezt jelöli ki, de nem is itt van a hiba...MIT NEM ÉRT EZEN? ... Kikészít már :-D
Do While rWorkRange.Value <> Empty rWorkRange.Offset(0, 10).Value = "=VLOOKUP(RC[-10],vRng,10,0)"
A probléma a sor/oszlop relatív hivatkozással van, a formulaR1C1 se működött, nálam. Ezért megcsináltam az én verzióm, ami nálam lefut, kicsit csúnya, de működik. Sajnos van benne egy azaz kett csere az angol-magyar nyelv miatt, erre lehet nem lesz szükséged Wawabagus.
A Kód: (mármint amit beírtam, az egyik do while loop ciklus)
Do While rWorkRange.Value <> Empty Tartomany = vRng.AddressLocal(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(1, 12)) 'A magyar excel VBA-ja az oszlopot "O"-nak jelöli, ezt kell átcserélni "C"-re, ez a két sor azt csinálja :)
ugyanis a vba a cellába beírandó képletet sor/oszlop relatív hivatkozással tudja csak értelmezni és valószínűleg ennek ez keresztbe tesz. Használhatsz .FormulaR1C helyett sima .Formula-t is. (Tudod, a .Value helyett)
Próbáltam, de nem nem érti. Beírj az első celléba, ahova kell és finish : #NAME?.
Kipróbáltam egy az egyben is. Megadva szépen a ranget és szépen kezdi is kitölteni, de az első olyan után cella után ahova nem talál megfelelést "n/a" lenne leáll az egésszel.
Olvastam a neten, hogy a worksheetfunction.vlookup-ot kéne itt használni, mert az nem robban le az első sikeretelen találat után...
De basszus lezsibbadtam ettől :-).
Egy hajszál választ el a kész macrotól :-D...és annyire idegesítő hogy ez a vlookup kérdés nem is annyira egyszerű...
Most már el kell mennem, de holnap folyt köv...NEM ADOM FEL :-)))...olyan szépen haladtam :-)
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("B1") = "UniqueCode" Set rWorkRange = wbCheckFile.Worksheets(i).Range("A2")
Do While rWorkRange.Value <> Empty rWorkRange.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" Set rWorkRange = rWorkRange.Offset(1, 0) Loop Next i
For i = 1 To x wbCheckFile.Worksheets(i).Range("B:B").Copy wbCheckFile.Worksheets(i).Range("B:B").PasteSpecial xlPasteValues wbCheckFile.Worksheets(i).Range("L:M").Insert Shift:=xlToRight wbCheckFile.Worksheets(i).Range("O:P").Insert Shift:=xlToRight
For i = 1 To x Set rWorkRange = wbCheckFile.Worksheets(i).Range("B2") Set vRng = wbPriceList.Worksheets(1).Range("B:M")
Do While rWorkRange.Value <> Empty rWorkRange.Offset(0, 10).Value = "=VLOOKUP(RC[-10],vRng,10,0)" rWorkRange.Offset(0, 11).Value = rWorkRange.Offset(0, 9).Value - rWorkRange.Offset(0, 10).Value Set rWorkRange = rWorkRange.Offset(1, 0) Loop Next i
Izé... Nekem se sikerült sehogy sem, pedig próbálkoztam...
Aztán utánanéztem, és ezt találtam:
"UDF's do not have the same flexibility as a standard Procedure. A UDF cannot alter the structure of a Worksheet, such as change the Worksheet name, turn off gridlines, protect the Worksheet etc. They cannot change a physical characteristic of a cell, including the one that houses the UDF. So we cannot use a UDF to change the font colour, background colour etc of any cell. They cannot be used to try and change any part of another cell in any way at all. This means a UDF cannot place a value into any other cell except the cell housing the UDF."
"Ebből csak azt nem látom még, hogy a cél-cellát hogy hivatkozzam meg az UDF-ben..."
Úgy látom, elsikkadt a 14083. hsz.
"Lehet egy Change eseménykezelővel jobban lehetne boldogulni"
Képlet számolása nem vált ki a Change eseményt.
Ha pl. B1 cellában a képlet =A1, és A1 megváltozik, akkor lesz Change, de ekkor a Target A1 lesz, és B1-et csak a Target.DirectDependents tartományból tudod kihámozni. Ha a Target.DirectDependents egyetlen cella, akkor szerencséd van. Ha több cella, akkor melyik lehet az, amit át kell színezni?
Én a forrás cellából csak rámásolnám .PasteSpecial Paste:=xlPasteFormats módon a célcellára a formátumot. A fene állítgatná egyesével azokat (mert erre következtettem a hszodból)
Sőt. A legegyszerűbb a teljes oszlopra átmásolni, lassítani nem nagyon lassít...
Nehogy egyesével állítgass be minden cellaformátum tulajdonságot AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish⇄AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishDetect language » Hungarian
Hát mert a kérdező az UDF saját cellájában szeretné látni a forrás-cella formázását.
Szóval a teendő:
- kitalálni mi a forrás cella (ez ugye bejövő adat, simán megy);
- kiolvasni a forrás-cella minden formázását (Bold, Italic, keret, szín, stb.)
- a cél cella formázását a fentiekkel azonossá tenni.
Ebből csak azt nem látom még, hogy a cél-cellát hogy hivatkozzam meg az UDF-ben...
Lehet egy Change eseménykezelővel jobban lehetne boldogulni (ott mondjuk az lenne relatíve bonyolult, hogy kiszedjük a cellatartalomból, hogy csak egy sima =B1 tipusú hivatkozás van benne és nem egy "Sheet3!A4+5"
Köszi! Valóban nem fórumoztam, plusz még ha fórumozok, akkor is ritkábban írok ide, mert nagyon eltolódott a topik a makróírás felé, amiben meg én is tanonc lehetnék, és csak lesem a válaszokat.
Elgondolkodtam rajta: például le lehetne kérdezni a cellára előre beállított formázást vagy feltételes formázást, vagy lehetne relatívan címezni a tőle eggyel balra levő cellát vagy ilyesmi.
Talán az afrikaanst választanám a listádból, ott most jó idő lehet.
SOS feladat, a G14 eredményét hozza át a H16-ba, de, ha negatív, akkor szorozza meg -1, hogy pozitív legyen, de, ha pozitív, akkor hagyja békén, mert ide, csak pozitív szám kerülhet.
Már nem nagyon emlékszem, de mintha a 2003 - 2007 verzióváltáskor merült volna fel, különböző függvények (dátum?) kapcsán. Talán még az Analysis Toolpak használata (illetve ennek bekapcsolása) is lehetett... Sajnos, nem tudok bővebben segíteni.
Majd nagyon, de nagyon figyelek, merthogy igazából teljesen ámátőőőr excel felhasználó vagyok. (Egyelőre fogalmam sincs mi az az UDF, de majd bólogatok, mintha érteném.)
Köszönöm robbantomester, a Te megoldásodat használom, mivel a cellák formátuma a legtöbb esetben szöveg! Tökéletesen müködik.
Mégegyszer köszönöm a többieknek is a segítséget!
Kérdeznék még egyet:
El tudom-e érni azt (függvénnyel, xl2003-ban, szövegformátumú cellákkal), hogy az A1 cellára hivatkozó B1 cellába is az A1 formátuma "menjen át"?
Tehát, ha a szöveg A1-ben fekete háttérszínnel fehér félkövér szöveg, akkor a B1-ben is ugyanaz a szöveg és ugyanígy fekete alapon fehér félkövér legyen.
Ha ehető méretű a táblázat, akkor egy másik munkalapon (igen, megint :) ) csinálsz egy olyan függvényt, hogy mondjuk a C15-be ez kerül: =HA(VAGY(ÉS(munka1!C14="";munka1!C15<>"");segéd1!C14="1");1;0), ekkor pontosan az első előfordulásnál lesz egy 1-esed a segédmunkalapon. Ennek a sorszámát már le tudod kérni akár egy FKERES-sel más függvénnyel is, hogy az értéket megkaphasd.
xl2007-ben (angol változat) a következő függvény adja meg a B oszlop utolsó cella értékét:
=INDEX(B:B,MAX((ROW(B:B)*(B:B<>""))))
Magyar verzióban talán: =INDEX(B:B,MAX((SOR(B:B)*(B:B<>""))))
FONTOS: a fenti függvényt úgy kell bevinni, hogy NEM sima enter-t ütsz, hanem CTRL+SHIFT+ENTER-t. Ha jól csináltad akkor {} zárójelek közé kerül a függvény.
A legelső nem üres cella értékét úgy kapod meg ha a fenti függvényben a MAX-ot kicseréled MIN-re.
Próbálok még kitalálni valamit ami xl2003 alatt is működne (mert a fenti B:B hivatkozást az xl2003 nem eszi meg).
A B oszlop cellái adatokkal vannak feltöltve, de nem B1-től B100-ig, hanem pl B12-től B25-ig. Ugyanígy a C, D, stb oszlopok, de változóak az első és utolsó feltöltött cellák.
Függvénnyel szeretném megkerestetni az első kitöltött cellát, illetve annak a tartalmát pl a B oszlopban. Utána az utolsó kitöltött celláét.
A MIN, MAX, illetve a KICSI és NAGY függvények azért nem jók, mert nem sorba rendezettek az egymás alatti adatok. Nekem mindig az első "nem üres" és az utolsó "nem üres" cella értékére lenne szükségem.
Akkor csináld meg a tükörképét egy másik munkalapra, ahol csak =A1 és hasonló képletek vannak. :-)
Vagy véges sok adat esetén HOL.VAN-nal kikeresed a betűt, hozzáadsz hármat és megkapod a sor számát. Egymásbaágyazott HA függvényekkel ki tudod kerestetni, de ez macerásan bővíthető.
valaki tudna nekem segíteni, hogy hogyan tudom fkeres függvénnyel visszaadni egy adott cella alatt 4 sorral lévő cella értékét? magyarul hogy tudnám visszaadni ebben a táblában a különböző változók értékeit?
Egy másik checkbox-al a színét így tudod ki- és bekapcsolni:
Private Sub CheckBox2_Change() If CheckBox2.Value = True Then ActiveSheet.Shapes("Negyzet").Fill.Solid ActiveSheet.Shapes("Negyzet").Fill.ForeColor.SchemeColor = 10 ElseIf CheckBox2.Value = False Then ActiveSheet.Shapes("Negyzet").Fill.Visible = msoFalse End If End Sub
Egy modulból hozzáadtam a munkalaphoz egy alakzatot:
Sub Alakzat() With ActiveSheet.Shapes.AddShape(msoShapeFlowchartProcess, 201.75, 159#, 72#, 48#) .Name = "Negyzet" End With End Sub
A lényeg, hogy nevet adtam neki: "Negyzet"
Ezután a visual basic eszköztárról kiraktam egy checkbox-ot, és annak a programja:
Private Sub CheckBox1_Change() If CheckBox1.Value = True Then ActiveSheet.Shapes("Negyzet").Visible = True ElseIf CheckBox1.Value = False Then ActiveSheet.Shapes("Negyzet").Visible = False End If End Sub
Ha ki van pipálva, akkor látszik az alakzat, aha nincs akkor nem!
Ezt a kérdést a Városi és elővárosi közlekedés (VEÉK) fórumban tessék feszegetni, ott vannak releváns személyek is. :)
"hanem az érkezés időpontját?"
Indulást szoktak feltüntetni :), és egyre több helyen az a gyakorlat (igen, a BKV-n belül), hogy az adott megállóból való indulást szerepeltetik. Mivel minden táblát le kell gyártani (meglepő módon), akkora nagy pluszköltséget nem okoz a dolog, de még nincs így mindenhol, valóban. Talán majd egyszer....
(Azt hiszem, ha változik a menetrend, és újra kell nyomni a táblákat, akkor van ilyenre lehetőség, külön nem fognak menetrendet gyártani, ha az időadatok nem változnak, éppen a költséghatékonyság jegyében, de pontosabb infókat nem tudok.)
HA már felmerült a téma, olyan menetrendet nem lehet excelezni, hogy ne az egymást követő állomások időben mért különbségét lehessen látni, hanem az érkezés időpontját?
Engem pl. tök idegesít, hogy egy BKV busz esetén ki kell számolnom, hogy akkor mikor fog adott helyre érkezni a busz! Igaz, akkor minden megállóba más papírt kéne kitenni, de nem hiszem, hogy ez akkora gond lenne ma már!
Nem bántottál meg, megszoktam már, hogy ez egy férfias világ... (Itt nyúlván nem erről van szó, de nem ráz meg, ha oltanak, ez a lényeg.) :)
Az én megoldásom elméletét bemásoltam, kérlek mondd meg, mondjátok meg, mit csinálnál, csinálnátok másképpen, egyszerűbben (én gondolkoztam a makrókban is, de akkor még teljesen az alapoktól kellett volna tanulni, nulla előképzettséggel, könnyebb volt képletekkel, most már más a helyzet).
Hát, a legperverzebb ötletem (amivel anno én csináltam), hogy külön cellában kezelem az órát, a percet és a másodpercet (S-Bahn menetrend volt, ott kellett a másodperc is, de módszertanilag semmi extra). És tudta kezelni az éjfélt is. A kavar az volt, hogy ha a vonat valahol áthalad, akkor csak indulási időadat van, érkezési nincs (ha a tartózkodás üres, akkor halad át). Ez azért gond, mert hol az érkezési, hol az indulási adatot kapom meg az előző indulás + menetidőből, attól függően, hogy a tartózkodási idő cellája üres-e. Az működött, de gonosz módon nem is adom ingyen. :-)
A legeslegperverzebb pedig az, hogy az órát csak akkor írja ki, ha változik az előzőhöz képest, de az első és az utolsó előfordulásnál mindig szerepelteti. Ez egy másik munkalapra került, másképpen megformázva (kicsit a MÁV szolgálati menetrendje alapján). Itt már volt valami gond: azt hiszem, az éjfélt nem mindig tudta kezelni.
Az itt már elhangzott megoldás kellően sok csacsogással megfűszerezve és a saját szavaimmal előadva, tizenegyedikei keltezéssel (részlet):
Na, ezt meg lehet csinálni. :)
Csinálj egy menetidős oszlopot, és oda kell beírni, hogy hány perc legyen az út. De arra vigyázz, hogy ne számnak legyen formázva, hanem időnek, és akkor jó lesz. :)
(Az indulási időket úgyis időnek kell megformázni, és az Excel ugye úgy dolgozik, hogy asszem 1904. január 4-től számolja a napokat. Tehát ha 35131-et írsz be, az egy konkrét napot határoz meg. Ha időt akarsz megadni, azt pedig törtként: tehát a 35131,5 az eme konkrét napnak a dele, azaz 1996. március 7. 12.00 lesz az. :-) Az Excel így kezeli a napokat, időpontokat, függetlenül a megjelenítéstől, azaz hogy te csak dátumot, csak időpontot, illetve ezek valamilyen formátumú kombinációját, töredékét akarod kiíratni.)
Tehát: minden időnek legyen formázva, és akkor a szerkesztőlécen be tudod állítani a menetidőt, és ezt kell görgetni.
Ha többfajta menetidővel kell dolgozni (pl. más-más sebességcsoportokra), akkor vegyél fel több menetidő-oszlopot, és mondjuk egy HA függvénnyel a vonatszám alapján eldöntöd, hogy melyik idővel kell számolnod (pl. HA(vonatszám>37000;kisebb_menetido+elozo_indulas;nagyobb_menetido+elozo_indulas).
Csak arra bátorkodtam célozni, hogy számomra nem nyilvánvaló, mit is mondtál neki. Ha látom, talán magam is meg tudom mondani, mi nem jó benne (már ha tényleg hibás elgondolás), és akkor tudok itt villogni vele.
Az is eszembe jutott, hogy esetleg két nicken írsz, és néha kevered őket. Vagy ilyesmi.
Amúgy a topik "szétoffolása" nem végzetes hiba, megtörtént már párszor, és mindenki túlélte ;-)
Sőt, szerintem jót tesz a közösségi szellemnek, ha néha van egy kis csevej kevésbé szakmai dolgokról.
Hát, erre én sem tudom a választ. Én arra gondoltam, hogy Snoopy válaszol nekem, hogy mi volt a baj... De nem így történt, hanem offoljuk szét a fórumot ezerrel.
Ezekbe az idős dolgokba, jól el lehet keveredni eleinte.
A lényeg, hogy mindig nézd meg, hogy az adott cella milyen formátumú, dátum, idő, általános stb.
Az idő és dátum formátumnál, mást amit látsz és más az ami a cellában van.
Időnél mindig egy olyan számot tartalmaz, aminek a törtrésze (azaz a tizedes pont utáni része) határozza meg az időt!
Ha a törtrész 0, akkor éjfél van, ha törtrész ,5 akkor déli 12, stb. Így egy perc az 1/60*24, tehát ha a két megálló közt 2 perc a menetidő, akkor nem 0,002-t kell hozzáadni, hanem 2/60*24-et. Azzal működne, de amit az urak ez előttem szólóak javasoltak, sokkal elegánsabb.
De miért nem töltöd le az egészet a BKV honlapjáról? Esetleg náluk dolgozol és készül az új menetrend?
Próbáld úgy, hogy egy oszlopba írd be a perceket, szintén idő formátumban (pl így 0:02, ez két perc) és ezt az értéket add hozzá a szintén idő formátumban lévő (5:00) cellához!
Ha nincs szükséged a perceket tartalmazó oszlopra, akkor rejtsd el!
Egy sima vasúti menetrendet szeretnék excellben készíteni.
Hogyan, milyen függvénnyel adjátok meg hogy az adott két állomás között mondjuk 2, 3, 4 5, perceket adjon az előtte lévő állomás időadatához, mert nekem hol 3-at ad hozzá hol 4-et ad hozzá a függvényem alkalmával és gyakran hibát jelez amit nem értek miért.
Én így csináltam
Moszkva tér: 5:00 05:00
Nyúl utca: 5:02 G10+0,002 (G10 ugye a cella száma)
János kórház 5:04 G10+0,003
és így tovább, így 2 perceket lép.
Aztán ha mondjuk a 0,003-at kijavítod 0,0035-re akkor +1 percet ad hozzá DE valamikor nem adja hozzá, meg kiírja hogy hibás képlet.
Szóval valami ilyesmire gondoltam hogyha leírok egy számot (időt) milyen képlettel tudom +1 +2 +3 +5 +10 perceket hozzáadni?
Lehet a legegyszerűbb az, ha VBA-n keresztül fixálja a beillesztett object helyét.
Pld. ha úgy akarja az object-et berakni, hogy a bal felső sarka a C5 cellában legyen akkor ki kell olvasni, hogy hol van a a C5 cella teteje meg a bal oldali széle és azt megadni input adatnak.
Ha az eredeti felvetést veszem, akkor az üres cellában -"- macskaköröm szerepel, azt első sorban értelemszerűen nem is lehet, hiszen nincs fölöttes érték ami kopizhatna.
De csak felülről másol, alulról felfelé nem szokás alkalmazni, így az "esetleg alatti" kitétel nem jó, sőt hibát is okozhat szvsz.
Én azt tapasztaltam, hogy akkor van jelentős eltérés a nyomtatás és a monitor között, ha a nagyítási szint eltér főleg ha jelentősen eltér a 100%-tól.
Láttam már olyan táblázatot, hogy a nagyítási szint kb 20-30 %-on mozgott. Így a delikvens nem látta, hogy mit ír a cellába, ezért a teljes táblázatba 36-os betűnagysággal írt. Aztán csodálkozott, hogy használhatatlan a nyomtatása. Minden diagramm és egyéb objektum elszált.
Ha Robbantómester módszerét választottad, a képletek beírása után a teljes oszlopokra irányítottan illesztd be az értéküket, mert ennek a kihagyása hamis értékeket okoz egy rendezésnél.
Jimmy the Hand es robbantomester, köszi szépen. A makróban lefut viszont ha manuálisan csinálom, akkor nem azt kapom, amit szerettem volna, hanem #HIV!, illetve 0. Mi lehet a gond?
Sziasztok! Van egy sok soros excel fájlom és az a gond, hogy ha keresni akarok benne valamit, akkor nem tudok, mert van benne egy csomó üres cella, mert ha az alatta lévő cella értéke ugyanaz, akkor nem töltötték ki, így a filter nem jeleníti meg azokat a sorokat, ahol üres cellák vannak. Hogyan lehetne úgy kitölteni az üres cellákat, hogy a felettük lévő legközelebbi teli cela értékét írja bele? 2007-es excelt használok, a makrókhoz sajnos keveset értek. Előre is nagyon köszi a segítséget!
Ez alapján: (Az Application.Volatile sort attól függően, hogy szeretnéd-e, hogy munkalapváltozáskor újragenerálódjon-e a szám vagy nem, hagyd benne vagy kommentezd ki, ezt én írtam bele, hogy próbálgatni lehessen az F9 billentyűvel)
'This function is used to simulate uniformly distributed random variables [0 1] excluding 0 and 1. Public Function alea() Randomize alea = Rnd() If alea = 1 Then alea = 0.999999999999 End If If alea = 0 Then alea = 1 - 0.999999999999 End If End Function
'Simulate a Poisson distributed randome variable with parameter lambda Public Function Randpoisson(ByVal lambda As Double) As Double Dim N As Integer Dim temp As Double Application.Volatile
temp = alea()
N = 1 While (temp > Exp(-lambda)) N = N + 1 temp = temp * alea() Wend Randpoisson = N - 1 End Function
Élek a gyanúperrel, hogy Ysty azért mondja, hogy nem ez a gond, mert a beállított és a látott kép között olyan nagy az eltérés, hogy azt nem gondolja magyarázhatónak az eltérő "felbontással".
Miközben én vagyok az első aki bevallja, hogy fogalmam sincs mi csinálja a problémát, azért megpróbálkoznék a cella-merge-ölés feloldásával majd ezután pozicionálással. Nem ez lenne az első eset, amikor cellák összeolvasztása megkeveri a matériát...
A normál nézetben teszed középre a képet, ami a monitor felbontásához igazodik. A nyomtatási nézet a printer felbontásában mutatja a lapot. Ezért kell, amennyire lehetséges, a nyomtatási nézetben igazítani, ahol csak a vízszintes igazításon tudsz módosítani.
A link másik végén ott van feketén-fehéren leírva, hogy az Analysis Toolpack tudja amire neked szükséged van. Az AT-t adják az excel-lel együtt, vagyis neked is van.
Mi a probléma akkor? Mert ennél többet én nem látom, h. hogy lehetne segíteni...
A nyomtatási kép a számítógépre telepített nyomtató felbontásának (többé-kevésbé) megfelelően mutatja a képet, ezért nem egyezik a normál módban megjelenítettel.
A vízszintes elrendezést a nyomtatási képen módosíthatod. Bekapcsolod a margókat, azokat elhúzva tudsz állítani az oszlopok szélességén. Sajnos a sorok magasságát csak a normál nézetnél tudod átállítani.
Segítsetek! Excel 2007-ben egyesítettem néhány cellát, beszúrtam egy képet, beigazítottam középre, beállítottam, hogy: "Áthelyezés és átméretezés a cellákkal együtt", úgy is tűnik, hogy oké, de a nyomtatási képben nem a cellában van a kép, illetve a következő megnyitáskor sem... Ilyenkor mi van?
Köszönöm szépen, az idő szűkössége miatt az irányított szűrés, egyedi rekordok megjelenítését használtam (amit Te is ajánlottál, elsőnek), és ez működik, és kellően gyors is! :)
Azt csinálja, hogy Collection-t alkalmaz, ami alapból kiszűri a duplikációkat.
Gondolom a fenti kódot masszírozni kell egy kicsit, hogy működjön a céljaidnak megfelelően, de ezek a kisérletezések azok amik tágítják az ember horizontját!
Mondjuk, ha ezt az utat választod, akkor ne feledd velünk is megosztani a kódot amit kidolgozol, hagy tanuljunk mi is.
Vagy megpróbálhatod használni a FREQUENCY függvényt is a munkalapon.
- valahova ahol nem látszik a munkalapon VBA-ból beteszed a FREQUENCY függvény adott elemre érvényes értékét,
- csak azokat az értékeket olvasod be, ahol a FREQUENCY függvény értéke NEM nulla (a FREQUENCY nulla értéket ad vissza egy szám nem első előfordulásakor),
- majd végül törlöd a FREQUENCY adatokat, szintén kódból.
Továbbfejlesztettem az előbbi képletet. Ez megmondja hogy az A1-be írt dátum ünnep v. hétvége más esetben kiírja, hogy az adott hónap hányadik munkanapja. Tartalmaz egy "ünnepek" nevezetű tartománynevet, amelyet neked kell kijelölnöd és feltöltened az ünnepnapokkal.
Íme:
=IF(OR(WEEKDAY(A1;2)>5;NOT(ISNA(MATCH(A1;ünnepek;0))));" hétvége v. ünnep";NETWORKDAYS(DATE(YEAR(A1);MONTH(A1);1);A1;$G$2:$G$6))
Cellákból töltök fel egy Combobox-ot adatokkal (több ezer sorról van szó). Ugyanazt az értéket ami már szerepel a Combobox item-jei közt, azt nem akarom hozzáadni. A mostani makróm nem is adja hozzá, mert hozzáadás előtt leellenőrzi az összes item-et.
A probléma az, hogy több ezer sorról van szó, ha mindegyik különbözik, akkor folyamatosan ellenőriz mindent, ezért nagyon sokáig tart a feltöltés.
Tud valaki erre egy gyorsítást, vagy valami egyszerűbb megoldást?
A kód:
For i = 2 To usor If Userform1.ComboBox1.ListCount = 0 Then Userform1.ComboBox1.AddItem Cells(i, Oszlop) Adat(i) = Cells(i, Oszlop) Else For j = 2 To Userform1.ComboBox1.ListCount + 1 If Cells(i, Oszlop) = Adat(j) Then Talalat = True Exit For End If Next j If Talalat = False Then Userform1.ComboBox1.AddItem Cells(i, Oszlop) Adat(i) = Cells(i, Oszlop) End If End If Talalat = False Next i
A networkdays függvény paraméterei a Kezdő_dátum (esetedben a hónap elseje), a Vég_dátum (az a nap, amiről meg akarod tudni, hányadik munkanap a hónapban), és az ünnepek. Ez egy, akár névvel ellátott tartomány, amelyik a kérdéses időszakban lévő ünnepnapok dátumait tartalmazza. Természetesen érdemes az egész évi ünnepek dátumát beleírni.
Az előbb leírt képlet - =NETWORKDAYS(DATE(YEAR(A1);MONTH(A1);1);A1) - nem veszi figyelembe az ünnepnapokat. A NETWORKDAYS fv utolsó argumentumában kijelölhetsz egy tartományt, amely az évben előforduló ünnepnapokat tartalmazza és ekkor ezeket is figyelembe veszi a számoláskor.
1. Kijelöltem a táblázatot és beszúrtam egy sima oszlopgrafikont (cluster/csoportosított).
2. Beállítottam, hogy a és b kerüljön a kategória tengelyre
3. Az értéket tartalmazó sorozatoknál beállítottam, hogy ne legyen kitöltés és szegély.
4. mindkét százalékos sorozatnál beállítottam a másodlagos értéktengelyt.
(ekkor a %-os és valódi érték oszlopok egymásra kerültek.
5. beállítom az oszlopoknál, hogy mutassa az értéket (4* kell megcsinálni, mert 4 oszlop van)
A láthatatlan oszlopokat a ChartTools (diagram eszközök), Layout (elrendezés) fül, CurrentSelection (aktuális kijelölés) csoport, legördülő listapaneljében tudod kiválasztani és így kijelölni, majd a Labels csoport (cimkék) DataLabels-nél (adatfeliratok) tudod beállítani, hogy hol mutassa az értéket.
6. A jelmagyarázatban a két láthatatlan oszlop feliratát fehér betüszinnel láthatatlanná tettem.
Nem sokat segítetem... :( Esetleg az SQLkerdes által elmített textboxokat valahogy makróval kitölteni? Nem tudom hogyan kell, de lehet így meg lehet oldani...
Ennél a típusú diagramnál én se láttam aktívnak a százalékos kijelzést, a kördiagramnál viszont igen, ott működik.
Itt a csúnya megoldás ami csak a százalékos írja ki, ha egy oszlopba kiszámolod a százalákot, és abból készítesz ilyen diagrammot, de akkor az érték nem fog látszani... :(
Olyan hisztogramot szeretnék létrehozni ahol % és szám is megjelenítésre kerül:
A százalák oszlop szerint számolódna.
Tehát: 50db 50db, de itt egyben 50% és 50%.
Míg 2011-nél 100db meg 50db és egyben 67% és 33%.
Hogy magyarázzam ezt el az excelnek? Elvileg tudom hol kell ezt beállítani,de mintha ennél a típusú hisztogramnál inaktív a %-os kijelzés...lehetséges egyáltalán a kérésem?
Nagyon szépen köszönöm a segítséget! Működik a dolog. Valamikor tanultam én ilyeneket, de már ezt az alapvető képletet is elfelejtettem, mert azóta sem használtam az excelt. Minden jót!
Én csak a hozzászólásomat írom be. A többit alighanem az Opera böngésző fordító addon-ja okozza. (külső Add-On)
természetesen lusta voltam utánanézni a javításnak :)
(cca. 15 éve használom ezt a böngészőt, nem is annak a hibája, inkább a pluginé) AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish⇄AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishDetect language » Hungarian
Valóban így van, de annyi mindent tud az excel, hogy lehetetlen up to date-nek lenni. Megnéztem a kedvenc excel bibliám írja, hogy lehet képet betenni a megjegyzés hátterébe! Sőt, akár szivecske, felhő, nyíl vagy akármilyen alakú is lehet a megjegyzés ablaka! :-)
Van. A megjegyzés kijelölése kétféle módon lehetséges. 1 kattintás (jobb) staffozott keretet ad, 2 pedig pontozottat. A másodiknál hívd be a megjegyzés formázását.
Fűzz megjegyzést a cellához. A formázásnál a 'Színek és vonalak' fülön a 'Szín' legördülője alján találod a 'Kitölrési effektusok'-at. Ott a 'Kép' fülön a 'Képválasztás'-nál kitallózód a beillesztendő képet.
A cellán (jobb klikk) a 'Megjegyzés elrejtése' állítja be, hogy csak a cella fölé mutatva látsszon a kép, egyébként csak a jobb felső sarokban utaljon egy piros háromszög a megjegyzés létére.
Nagyon amatőr kéréds, de nagy segítség lenne, ha valaki segítene.
Adott egy A oszlop benne 1-10 ig számok. Össze kellene őket adni, egy A11-be, de csak azt az A cella értéket adná hozzá az A11-hez amelyik A érték mellett van egy "pipa" vagy bármi féle jel.
Ópapi játtszik az excellel. De egy kicsit elakadt!
Az a problémám, hogy egy excel táblázathoz képes magyarázó ábrákat szeretnék beszúrni. Ennek lényege, hogy egy "lebegő" ablakban egy-egy cellára lépve megjelenjen a hozzá tartozó magyarázó kép.
Vagyis ahogy a nyíllal, vagy enterrel nyugtázom a beírtakat, a másik cellára lépve cserélődjön az ábra, és oda én tudjak beírni.
Ehhez tudom, hogy egy eseményvezérelt parancs kellene, de nem találtam ilyet. A mellette lévő cellát tudom használni erre a célra, ha ahhoz hiperhivatkozást teszek, de a leírt verzió kifogott rajtam.
Lassúság ügyben nem a makróddal van a gond (vagyis igen, de nem úgy).
Egy ekkora makró lefutása nem tud vészesen lassú lenni.
A probléma ott van, hogy minden egyes alkalommal amikor a kivánt függvényt beszúrod, az excel újraszámolja az érintett cella értékét. És ez már nagyon durván le tudja lassitani a kód lefutását, mert mielőtt a kód a következő sorra lépne, meg kell várja, hogy az excel kiszámolja az új cellaértékeket.
Meg lennél döbbenve, h. ez potenciálisan milyen sok időt vehet igénybe!
A megoldás a következő, a workbook tartalom számolást ki kell kapcsolni a kód elején és visszakapcsolni a kód végén. És ha már ott tartasz akkor a képernyő frissitést is.
Itt van hogyan, javaslom hogy MINDEN jövőbeli kódodba rakd ezt be:
ITt van a kód Select-ek nélkül, object-ek használatával. Mivel nem teljesen látom át, hogy a kód mit csinál csak manuálisan átirtam a kódot, fenntartom a jogot a hibázásra :-)
Pirossal kiemeltem az "új" object-eket, hogy lásd, hogy kell használni őket. Nem bonyi, ha elkezded használni őket egy idő után már az lesz furcsa ha névvel kell hivatkozni workbookra/worksheetre/cellára :-)
Sub teszt2() Dim wbPriceList As Workbook
Dim wbCheckFile As Workbook
Dim rWorkRange As Range 'Rangenek látszik, de igazából cella, a VBA nem különbözteti meg a kettőt
Én minden alkalommal emlékszem arra, hogy mondjátok ne használjam az activate és select parancsot...
ESKÜSZÖM nem falrahányt borsó amit mondtok nekem...:-DDD...tényleg emlékszem!!!
Csak sokszor felvett kódból dolgozom és sokszor mikor átírom, hogy ne legyen benne akkor nem akar működni, mert gondolom nem jól írtam át...ilyenkor ideges leszek...majd arra gondolok, hogy "úgyse látja senki" és nem tűnik fel senkinek, hogy kicsit hosszabban fut le a makró...tudom, hogy ez nem túl elegáns.
A legtöbb munkatársam, akinek segítek már attól odavannak, hogy nem kell végig csinálni az összes dögunalmas excel munkát...
Én egy totál "selfmade" makró író vagyok...eredetileg táncos és pszichológus végzetségem van :-))), láthatod mennyi közöm van a programozáshoz.
Nem munkám a makró írás, csak magamat idegesítem szórakoztatom vele.
Sosem tanultam padban kódokat írni, ezért néz ki úgy ahogy amit írok. De valahogy mindig elérek a makró végére és működik, az biztos hogy messze van a tökéletestől, de mindig tanulok valami újat.
Nincs ez másképp most sem :-)...már egy csomó újat tanultam.
For i = 1 To x Worksheets(i).Range("B:B").Insert Shift:=xlToRight Range("A2").Select
Do While ActiveCell.Value <> Empty ActiveCell.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" ActiveCell.Offset(1, 0).Select Loop Next i
A fenti for i= / next helyett érdemesebb lenne For Each / Next ciklust használni, sokkal excel-esebb és gyorsabb.
Ha már ott tartasz a kódban, hogy lesz időd/energiád/kedved ilyesmivel foglalkozni szólj és azt is megmutatjuk. Garantálom meglátni és megszeretni egy pillanat műve lesz :-)
Nem javitottam át a teljes kódot, csak egy részt, hogy lásd hogy műxik a dolog:
Sub teszt2()
Dim PriceList As Variant Dim wbPriceList as Workbook Dim CheckFile As VariantDim wbCheckFile as Workbook Dim x As Long
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
Set wbCheckFile = ActiveWorkbook 'ITT LÉTREHOZOL EGY WORKBOOK OBJECT-ET AMI NEM MÁS MINT AZ A FILE AMIT "WANT TO CHECK" Ezt a lépést csak itt tudod megtenni, mert a következő kódsor után már nem ugyanaz a file lesz az ActiveWorkbook!
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show
'Mivel a workbookokat már hozzárendeltügy egy-egy workbookobjecthez, nem kell a nevük és még jobb nem kell szenvedni azzal, hogy kiszámoljuk hanyadik file-ok a fileok hosszú sorában...
Workbooks(CheckFile).Activate
'A workbookra nem a nevével hivakozunk, hanem meghivjuk a vele "összerendelt" workbook object-et (wbCheckFile)
wbCheckFile.activate 'Továbbra sem értek egyet az activate használatával, de most a példa kedvéért maradjon így.
x = Worksheets.Count
For i = 1 To x Worksheets(i).Range("B:B").Insert Shift:=xlToRight Range("A2").Select
Do While ActiveCell.Value <> Empty ActiveCell.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" ActiveCell.Offset(1, 0).Select Loop Next i
Szerintem is az a hiba. A Range("A2").select mindíg az activeworkbook.activesheet -re értelmeződik, az meg fentebb nem változik, szóval ugyanannak a workbooknak, ugyanazon worksheetjének az A2 celláját nézegeti a kód soxor.
Én továbbra is fenntartom, hogy Select-et használni nem jó, legyen az a cím pontosan meghivatkozva, mégha esetleg kicsit többet is kell agyalni a kódon, mert utána nem kell azon gondolkodni, hogy most éppen hova irogat az excel, mert valahol leragadt az activeworksheet.
Szerintem sokkal jobb megoldás lenne egy Workbook objectet létrehozni és utána azt hivatkozni.
Pld:
Dim wbCheckFile as workbook
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
Set wbCheckFile = activeworkbook (itt az a trükk, hogy az újonnan megnyitott workbook-ot mindíg activeworkbook-ként kezeli az excel, szóval itt biztonsággal lehet az activeworkbook objectet használni.
Ezután már nem kell kiolvasni a workbook nevét, hanem a wbCheckFile object-re lehet hivatkozni, ahelyett, hogy Workbooks(CheckFile). Pld. wbCheckFile.worksheets(1).range("A2")
A különböző object-ek azért vannak excelben, hogy használjuk őket. Kiolvasni a filenevet aztán a workbooks object-csoportból a neve alapján meghivatkozni, szerintem lassabb mint a fenti módszer.
Do While ActiveCell.Value <> Empty ActiveCell.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" ActiveCell.Offset(1, 0).Select Loop Next i
Ha a beszúrást megcsinálja, de a függvényt nem illeszti be, akkor a gond az lehet, hogy a Do While ActiveCell.Value <> Empty rész félreviszi a kódot és oly módon értékelődik ki, hogy csak egyetlen egyszer kerül be a loop belsejébe a kód.
Feltéve de nem megengedve, hogy ez igaz, én nem az ActiveCell object-re hivatkoznék, hanem valahogy máshogy hivatkoznám meg azt a területet amit ki akarsz értékeltetni. Könnyen lehet, hogy az activecell nem változik a kód futásakor, vagyis nem végigfut az oszlopokon, henem beáll egy cellára, oda beilleszti a függvényt és nem mozdul. Amikor a loop megint kiértékelteti, hogy az activecell üres-e, akkor azt látja, hogy nem (mert az első lépésben bekerült a képlet) és jgy a kód megy tovább dolgára.
Pont ez az oka annak, hogy Select-et, Active-et meg Active-val kezdődő objecteket nem best practice használni, mert nehéz kiokoskodni, hogy a program futásakor épp mi lesz az Active.
Köszi, közben kieszeltem egy másik megoldást, ami működni látszik :-)...
Csak a loop-pal nem stimmel valami...
vagyis a for-ral, tehát hogy minden munkalapon megismételje a munkát.
Szerintem mit rontottam el?
Beszúr mindenhova egy oszlopot, pont mint kértem az első sheeten meg is csinálja a függvényt, de a többi sheetre már nem teszi be...valami hibádzik :-DDD.
Mi lehet a gond?
Köszi!!
Sub teszt2()
Dim PriceList As Variant Dim CheckFile As Variant Dim x As Long
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show
Workbooks(CheckFile).Activate x = Worksheets.Count
For i = 1 To x Worksheets(i).Range("B:B").Insert Shift:=xlToRight Range("A2").Select
Do While ActiveCell.Value <> Empty ActiveCell.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" ActiveCell.Offset(1, 0).Select Loop Next i
Az alábbi makrót gyártottam és felmerült egy kis probléma. A lényeg, hogy a felhasználónak ki kell választani a 2 db fájlt amin majd a makró futni fog. Ehhez GetOpenFilename-t használok.
Viszont sokszor utalgatnék a fájlokra, de ez a fenti parancs az egész elérési útvonalat is belerakja a névbe... Az viszont nem jó per pillant. Hogyan lehetne azt megoldani, hogy a kliens: 1. kiválasztja a 2 db fájlt 2. fájlok meg is nyílnak 3. excel meg is jegyzi szépen a nevet de az elérési útvonal nélkül tehát pl: "JakabPista.xls"
Van valami praktikus tanácsotok ezzel kapcsolatban?
Nagyon köszönöm!! ------------------------ Sub Price_check()
Dim CheckFile As String Dim PriceList As String
'Open Checkfile
MsgBox "Open the file you want to check!"
CheckFile = Application.GetOpenFilename If CheckFile = "False" Then MsgBox "No file was selected." Exit Sub End If
MsgBox "FileName is: " & CheckFile
'Open PriceList
MsgBox "Open the PriceList!" PriceList = Application.GetOpenFilename If PriceList = "False" Then MsgBox "No file was selected." Exit Sub End If
Hogyan lehet VBA-ban bekérni egy file elérési útját?
Van egy kód, ami email-ben csatolt file-t küld automatikusan, ha nem találja az általam beírt file, akkor meg akarom kérdezni a felhasználót, hogy adja meg az elérési utat. Mivel már nem DOS-ban dolgozunk, ezért nem várható el egy átlagos felhasználótó, hogy egy inputbox-ba írja be, hogy "c:file.txt", ezért egy olyan ablakot szeretnék kiadni a képernyőre, mint például a megynyitás, vagy a mentésnél.
Az azonosítókhoz tartozó összegek (a lehívások összegei) a te táblázatod szerint az E oszlopban szerepelnek.
Az én táblázatom szerint az első 2500-as értékről van szó, és azt szertném, ha a sárgával jelölt cellába automatikusan beíródna.
Lehet, hogy nem írtam le jól, hogy mire lenne szükség, megpróbálom újból.
Tehát ha felviszi valaki a táblázatba a 4 azonosítót, az első alkalommalmég neki kell beírnia, hogy milyen értékű a lehívás.
Amikor viszi fel a következőket, akkor azt szeretném, hogy ha már volt korábban ilyen lehívás akkor az E oszlopba beírná annak az értékét. Tehát a sok lehívásnál elég legyen csak a legelső alkalommal beírni az összeget, ha legközelebb előkerül ugyan az akkor már töltse ki a cellát a korábbi érték szerint.
Ha 1 lapon vannak, írd meg, melyik oszlopban mi található. Pl. melyikben vannak az összegek, amik az A:D oszlopokba írt száll. azonosítókhoz tartoznak.
A hivatkozásokból hagyd ki a Munka1!-et, és jó lesz, ha a táblázatod az itteni kép szerinti.
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.