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.
Okosabb nem vagyok nálad... de az alábbi makró szerintem jó lehet:
Sub szamos(ByRef rng As Range) Dim cl As Range, vl As Double For Each cl In rng.Cells vl = Val(cl.Value) cl.NumberFormat = "General" cl.Value = vl Next End Sub
A meghívásnál meg kell adni a tartományt. Természetesen lehet úgy is, hogy a makrón belül adod meg a tartományt (de Te ezt nyilván kapcsiból megoldod).
A tizedespont helyettesítése a tizedesvesszővel azért nem szerencsés, mert a számformátumok nem a cella szöveges tartalmát látják.
Kipróbáltam. Rögzítettem egy makrót, ami minden cellában elvégezte a cserét, hibátlanul.
Ezt a makrót lefuttattam az újra amerikai formára átírt adatokon. Megdöbbenve tapasztaltam, hogy ahol 2-nél több volt a tizedesek száma, ott valóban csak elhagyta a pontot, nem cserélte.
Átírtam a makrót, hogy egyenként végezze el a cserét a kijelölt tartomány celláin egy ciklusban, ez sem használt.
A segítségeteket szeretném kérni az ügyben, hogy miként tudok makroval lecserélni egy amerikai formátumú számot (310.156) pontos vesszős verzióra (310,156)
Az alábbi makro rosszul fut le
ahelyett, hogy 310.156-ból 310,156 os verziót készítene a végeredmény ez lesz 310156
Nagyon köszi a részletes választ! Nem semmi meló lehetett azért ezt így összerakni... :-/ Élnék is a segítségeddel, de nekem e hét végéig le kell adnom az anyagot készen... :'-( :'-( Valószínűleg marad az a verzió egyelőre, hogy a maradék adatokat kézzel végigellenőrzöm, más megoldást hirtelen nem látok. Már sikerült 1000 sort legyűrnöm... már csak 4x ennyi van hátra :-O :-O :-O
Ne haragudj, nem bizalmatlanság, de céges adatbázisról van szó, és valószínűleg nem lennének felhőtlenül boldogok, ha elküldeném :) :) :) De azért köszi!
Én is valami ilyenben gondolkoztam, de ha egyszeri a feladat, sztem egyszerűbb nekiülni és végigkapálni az egészet. Most 2200 adattal csináltam ezt, ami szintén sok, bár persze közel sem 5000.
Közter. jellegek nekem valami NAV-os nyilvános forrásból vannak, budapesti utcanévjegyzék pedig kódorog a neten. Nem azt mondom, hogy a legfrissebb, de egyszerűbb azt a párat feloldani, amit nem talált meg, mint az összeset (aztán hogy a Kossuth., a Kossuth L. és a Kossuth Lajos stimmelni fog-e (Október 23-ról nem is beszélve) az külön kérdés. :) ).
A posta.hu oldalon is van fent talán irányítószámokhoz rendelt utcalista.
Szia, én dolgoztam már ilyen jellegű adatokkal. Van is egy-két makróm, ami sok dolgot megold ezek közül. Látom, az irányítószámot megoldottad. Ez könnyű. A településnév utáni vessző is sokat segít. Az én eddigi megoldásaim lényege a közterület nevének és jellegének szétválasztása. Erre is vannak algoritmusaim. A lényege az, hogy letöltöttem valamikor az Internetről az összes lehetséges közterület jelleget. Először ezeket kerestetem ki a programmal (mégpedig hosszúság szerint rendezve, hogy a körút megtalálása után az út már ne kerüljön a listába), meg persze az utca, az u. és az u (pont nélkül, de előtte-utána szóközzel) egyaránt az utcát jelentse , így sikerült a közterület jellegeket a szóközöktől függetlenül kikeresni. És ha megvolt a közterület jellege, akkor már adott volt, hogy a település és a közterület jellege közti szövegrész a közterület neve. A házszám és a többiek már nem igazán algoritmizálhatók (legalábbis nekem ez nem igazán sikerült), de ez kézzel is kisebb munka, mint a közterületek egyenkénti áttekintése. Persze még így is sok az elütésekből adódó hibalehetőség. Ezt nehéz kivédeni, de ha tudjuk, hogy ha pl. Budapestről van szó, és a kerületi önkormányzattól vannak kész utcalisták, az sokat segíthet, bár attól tartok, hogy nálad ilyen nem áll rendelkezésre. Ez még a házszámok megtalálásában is segíthet.
A lényeg, hogy tudnék segíteni egy olyan makróval, ami az első 4 adatot (Település; Közterület; Közterület jellege), meg esetleg a házszámot némi bizonytalansággal szétszedi. Egy apró gond van. Kell hozzá pár nap (1-2 hét) munka, én pedig hétfőn elutazom Balatonra 2 hétre, és ott nem szívesen foglalkoznék vele. Ha utána is jó még, akkor kérlek küldj egy emailt a címemre, és augusztus közepén megbeszéljük. Szívesen segítek.
Ha nincs semmilyen rendszer az adatokban, akkor sajnos sok munkába fog kerülni rendbeszedni az adatokat. Itt még a makró sem nagyon tud segíteni, hiszen nincs egyértelmű támpont a szétválasztáshoz.
Szerintem a szétválasztás után az utolsó oszloptól indulva az adott oszlopban levő nem üres cellák sorait megnézve talán nem lesz olyan nagy a munka.
Jogos... :-( Elnézést! 2010-ről van szó, és köszi a tippet!
Próbáltam én is ezzel a megoldással, de a több tagú utcaneveket (néha akár 3 is pl. Dr. miatt) így szétkapja, és akkor mindenképpen soronként kell végigböngészni :-/
Nem írtad az excel verziót. 2007-től van az adatok menücsoportban szövegből oszlopok. Itt megadhatod, milyen határolójel van az egyes adatok között. A példád alapján én a szóközt gondolom jó határolójelnek.
Ezután a szóvégi vesszőket keres-cserél funkcióval el tudod tüntetni. Az viszont gond lehet, hogy a Kossuth Lajos utca két oszlop helyett 3 oszlopba fog kerülni.
Van egy kb. 5100 soros, lakcímeket tartalmazó táblázatom. Pillanatnyilag úgy szerepelnek benne az adatok, hogy egyetlen cellában van a teljes cím. Pl. 2999 Tötömkefalva, Kukucs u. 1/B. Egy migráció miatt úgy kellene megbontanom az adatokat (mind külön cellában), hogy: Irányítószám; Település; Közterület; Közterület jellege; Házszám; Épület; Lépcsőház; Emelet; Ajtó.... Nyilván a címek, illetve az azokban található adatok mind különböznek.
A kérdésem az lenne, hogy van-e valamilyen módszer arra, hogy ezeket sok-sok órányi csinovnyik munka nélkül szét lehet-e szedni a fentiek szerint? Annyit meg tudtam tenni, hogy az irányítószám utáni fix szóköz, és a településnév utáni fix vessző miatt ezeket szépen ki tudtam emelni, de a többivel nem boldogulok.
Köszi, beírtam. Ki is írja, hogy kész, de az eredményt (az összegyűjtött adatokat ) nem látom így sem: üres maradt a munkafüzet,mintha most nyitottam volna meg.
Sok fájlról van szó, ezért a makró futásának az idejére letiltottam a képernyő frissítését, mert az lassítja a futást. A tálca frissítését nem tudom letiltani, azért villog. Minden füzet ikonja megjelenik rajta, mikor megnyílik.
A makró alsó sora (End Sub) fölé írd be: Msgbox "Kész" – akkor megjelenik az üzenet, hogy végzett.
A gyűjtő füzetben azért, hogy a folyamat nem látszott, megjelentek az adatok.
Ha sok cella van, akkor egy saját függvény használ csak:
Function BetuSzamolo(ByRef hol As Range, ByVal mit As String) As Integer Dim sor As Range, szoveg As String If hol.Columns.Count > 1 Then For Each sor In hol.Rows szoveg = szoveg & Join(Application.Transpose(Application.Transpose(sor.Value)), ";") Next Else For Each sor In hol.Cells szoveg = szoveg & sor.Value Next End If BetuSzamolo = Len(szoveg) - Len(Replace(szoveg, mit, "")) End Function
Ezt beírhatod a munkalap kódlapjára: lapfül - jobb egérgomb - kód megjelenítése - bemásolás.
A cellában a képlet = betuszamoló(tartomány, betű idézőjelben)
A második hozzászólásodban az ÉRTÉK hiba szerintem csak elírás miatt lehet.
Gondolom a D:import a valóságban így néz ki D:\import. A backslasht "megeszi" a blogmotor, ezért duplázva kell beírni.
Ezen kívül a csv formátumban csak az aktív munkalapot tudja menteni, de sajnos a számformátummal - tizedespont vs vessző - probléma lehet (a területi beállítás ellenére), át kell állítani a gépet programból, hogy jó legyen kiírva a csv-be.
Application.DecimalSeparator = "," átállítod a tizedesvesszőt
Application.UseSystemSeparators = False ezzel kikapcsolod a rendszer beállításokat. lemented a fájlt
Application.UseSystemSeparators = True visszakapcsolod a rendszer beállításokat.
(Ezek egyébként a 2010-es excelben a speciális beállításoknál találhatóak mint a rendszerbeállítások szerint jelölőnégyzet és alatta a tizedesjel és ezreselválasztó kockája).
A másik lehetőség, makróból kiírni direktben a fájlba. Ha az előző mesterkedés nem sikerül, akkor írd meg és segítek benne.
Sziasztok! Hogyan tudom összeszámolni, hogy egy adott betű hányszor szerepel egy táblázatban? Van egy táblázatom a reggeli/ebéd/vacsora rendelésekről, ami úgy néz ki, hogy egy embernek mindig egy cellában van a rendelése. Tehát vagy R,E,V vagy E,V vagy pl. R, V stb. van egy cellában. Na most ebből nekem össze kellene adnom, hogy akkor itt összesen melyik étkezésből hány van. Milyen képlet kell ehhez?
van nekem egy táblázatom ami igazából szabászlistát gyűjt össze, hossz, szélesség, darab, anyag, és éltulajdonságok. Nekem ezt a listát le kell mentenem pontosvesszővel tagolt csv-be, mert ezt olvassa a táblafelosztó program.
manuálisan csináltam eddig; kijelölöm az másolandókat, másolok, új munkafüzet megnyit, értékkel beilleszt, mentés másként, csv, biztos benne? aha, kész. És amikor a csv-t megnyitom tök jó minden érték a megfelelő cellában van, a tizedes értékek vesszővel tagoltak(cellán belül). A szabászprogram fogadja is.
Elég sokat gyártok egy nap és gondoltam ezt a műveletsort automatizálom egy makróval.
Össze is lapátoltam egy makrót ami jó is, mert szépen lefut meg külön extrázik is mert megrendelésszámot kell, hogy fájlnévként mentsen meg egyéb finomságok.
viszont amikor ez a szerencsétlen makró lefut elmenti az adott számmal, és megszületik a csv, és én azt megnyitom, akkor már sorokban elhelyezkedő értékeket; hossz, szél darab, mennyiség, anyag és éltulajdonságokat amiknek külön cellákban kéne lenniök, soron belül egy cellába teszi és pontosvesszővel választja el. A program amibe illeszteném nem értelmezi és csak pislog velem együtt hogy mi ez.
egy érdekesség amit észrevettem amikor szűkítem a makróparancsokat; ha elkészíttetem a fájlt a makróval, és az meg is jelenik az adott helyen,de nem menti el és nem zárja be, ám én még rámentek manuálisan és ; biztos menti? aha! akkor jó. De a cél az, ne kattintgassak annyit ha ezt helyettem egy makró megcsinálja, mert naggyon sokat haladnék egy nap.
segítene valaki?
valahol a piros szedetnél lehet a hiba( én jelöltem meg.)
Valamit biztosan elronthattam, mert amikor elindítom a makrot, akkor a tálcán lévő excel ikon elkezd vibrálni, (tehát megnyitogatja a fileokat), de nem jelenik meg semmilyen tartalom.
Mit ronthattam el?
Az útvonalat beírtam ahogy mondtad, egy könyvtárban vannak a forrás fileok....
Keresnék egy olyan excel függvényt (vagy függvényeket), amikkel a következő problémát tudnám megoldani.
Egy táblázatban szerepelnek egy torna mérkőzései, szeretném meghatározni, hogy az egyes csapatoknak hány győzelme veresége ill. döntetlenje van. A csapat előfordulhat hazai és vendég oldalon is.
De a lényeg, hogy két feltételt kell kielégíteni. A csapat neve szerepel a hazai oldalon (A2:A22) és a hazai gól cella értéke > vendég gól cella értéke (E2>F2, ...E3>F3...), ha ez igaz, akkor 1 győzelem.
A DARABHATÖBB fv-t gondoltam jónak, de a F2:F22 tartomány soronkénti elemzését nem tudom megcsinálni. Mit kellene és hogyan használnom?
A makrót a gyűjtő füzetbe kell bemásolnod. Füzeben Alt+F11-re megnyílik a VB szerkesztő. Bal oldalon kiválasztod a füzetedet, Insert menü, Module. Jobb oldalon kapsz egy nagy fehér területet, oda másold be a makrót. A füzetet makróbarátként kell elmentened. NE abba a könyvtárba tedd, ahol a 150 másik fájl van!
Írd át az útvonalat arra, ahol a sok füzeted van. Ügyelj rá, hogy az útvonal végén is legyen \.
Sub Osszegzes() Dim WSIde As Worksheet, utvonal As String, FN As String, ide As Integer
Application.ScreenUpdating = False
Set WSIde = ActiveWorkbook.Sheets(1) utvonal = "C:\Temp\" 'EZT ÍRD ÁT A SAJÁT ÚTVONALADRA!
FN = Dir(utvonal & "*.xlsx")
Do While FN <> "" Workbooks.Open utvonal & FN On Error Resume Next ide = Application.Match(Sheets(1).Range("A2"), WSIde.Columns(1), 0) If IsError(ide) Then On Error GoTo 0 GoTo Tovabb End If
Az AB2 valóban egy darab cella, de ez az AB2 cellát kellene a többi excel fileből összeszedni, ezért írtam többes számban.
A fileok egy könyvtárban vannak.
A file egy napi forgalom összesítő file, ahol az 5.sorban lévő oszlopok tartalmazzák a termékek neveit.
Ezek napi fogyása van a B30 as sorban lévő cellákban összesítve.A példában a "mini" nevű termékből fogyott 1 db,. "normal"-ból 8, a "super"-ből ismét 1 darab.
Az AB2 egyesített cella a napi dátumot mutatja.
A baj, hogy ezeket naponta küldik, mindig egy fileban, ezért van már kb 120-140 file
Ezekből a naponta küldött fileokból szeretném a napi dátum szerinti fogyást termékenként kigyűjteni valahogy így:
Ugyanakkor a B4, C4 és D4 cellákban egységárakat látok, amelyek a B30, C30 és D30 cellákban lévő darabszámokkal összeszorozva megtalálhatók a B31, C31 és D31 cellákban. Ezekkel semmi teendő nincs, csak a B30-as cellával?
Inkább pontosítani kellene cellánként megadva, hogy mit kell összegezni (nem összeszedni, ez a fogalom enyhén pontatlan az Excelben), és az összegek hova kerüljenek az összesítő táblázatban. És esetleg van-e más feladat is?
Teljes elérési útvonal van megadva (\hely...) de ha már szerkeszteni akarom, akkor ..-el kezdődik, ha kiteszem pl. egy külső meghajtóra, akkor meg a meghajtó betűjelével helyettesíti be, ha fölé állok, és megnézem.
Tömegesen dolgozok Excelben olyan rekordokkal, amelyek egy-egy mezője hivatkozásokat tartalmaz adott helyen lévő fájlokra.
Ezeket UNC-pathként adom meg, ennek ellenére, ha az adott Excel fájl helyét (nem a hivatkozott fájlét) megváltoztatom, nem működik a hivatkozás, amit nem értek, hogy miért. Ebben kérnék segítséget.
Kavarod a fogalmakat. Az AB2 1 db cella, az AB oszlop második sorában. Az összevonás az A2:B2 cellában van. A B30 szintén 1 db cella, nem 1 sor.
Amit gondolok: van a gyűjtő fájlod, ahol összevontad az A2:B2 cellákat. Van a 150 db egylapos fájlod. Fontos, hogy ez utóbbiak azonos mappában vannak-e.
A gyűjtő füzetben be akarod írnia C2 cellába a másik 150 fájl B30 cellájában szereplő adatot.
Kérdés: nyissa meg az elsőt a 150 közül, írja be az értéket a gyűjtő C2-be, zárja az elsőt, majd nyissa a következőt, adja hozzá a gyűjtő C2-hez a második füzet B30 értékét, vagy írja a gyűjtő füzet következő, D2 cellájába?
A "gyűjteni" alatt azt értem, hogy a meglévő fileok(nem változnak bennük az adatok) adott celláiban szereplő adatokat szedje össze egy másik fileba.
A konkrét igény:
Az AB2 egyesített cellák (Fecha=dátum felirat) mellé gyűjtse össze az ugyanabban a fileban a B30 as sorban lévő értékeket minden megadott, egy sheettel rendelkező excel fileból egy másik különálló fileba.
Ezzel egy sorban lesznek az adott dátumhoz tartozó eladások ( amiket majd összesíteni lehet oszloponként.)
Makróval meg lehet csinálni, de ennyi input nem elég hozzá. Kellene a táblázat felépítésével kapcsolatban minden releváns adat, mint pl.:
- egy munkalaposak-e a táblázatok, vagy több
- ha több munkalapos, akkor mindegyik kell-e
- ha nem kell mindegyik, akkor mi alapján határozható meg, hogy melyik kell és melyik nem
- az egyes munkalapokon konkrétan hol van a fejléc
Az is érdekes infó, hogy mit értesz pontosan a "gyűjteni" szó alatt. Mert ez lehet összesítés, lehet másolás, lehet hivatkozás, ami frissül, ha az eredeti fájlt frissítik.
Szóval gondold át algoritmus szemmel, aztán adj valami pontosabb képet. Esetleg mintafájl feltöltés is szóba jöhet, lást topik fejléc. Aztán majd valaki biztos tud ilyen makrót írni.
Segítségre lenne szükségem a következő probléma megoldásában:
Adott egy rakat excel file (kb 120) amiben egy egységes formulában vannak feltüntetve a mozgások. A keret, a táblázat fejléce és a képletek is állandóak(ugyanazt az alap filet használják) csak a havi mozgások váltózóak, ezeket töltik ki az adminisztrátorok, tehát a 120 filenak az A1-es cellájába mindig ugyanaz van, pl az adott termék napi fogyása
Hogy lehet ezeket az adott dátumhoz tartozó fogyásokat egy külön file-ba gyűjteni a 120 különálló excel fileból?
Ezt hívják a Microsoftnál fejlődésnek. Amikor már semmi értelmes nem jut eszükbe, mert mindent tud a program, és két élet se elég megtanulni a használatát, akkor elkezdik lebontani a meglévő funkciókat, hogy legyen valami mozgás a piac törvényei szerint. :-)
Üdv, belefutottam egy nem várt gondba. Adott két, majdnem azonos kinézetű munkalap, az egyiken a raktáron lévő termékek nyilvántartását, a másikban ugyanolyan elrendezéssel a termékek eladási számait tárolom. (Ergo igyekszem a kétdimenziós celláknak egy új dimenziót adni, ahol az eladási számláló van.)
Hogy az eladások regisztrálásakor mindkettőt könnyen elérjem, párhuzamosan jelenítem meg a két munkalapot.
Amikor csak egy munkalapon szerkesztek, például új termékek felvitelekor vagy létező termékek darabszámának növelésekor, akkor a 2 soros fejlécet és az első oszlopot rögzítem, különben összekeverednék.
Ha ezt mindkét megjelenített munkalapon megteszem, akkor sajnos a párhuzamos görgetés megbolondul. A bal oldali, első panel görgetésekor előbb lép kettőt, mire a második panelon is elkezd görgetni, mintha a párhuzamosság csak akkor működne, amikor a mozgatható rész is túllép a fejlécen. Az eredmény, hogy hacsak nem görgetem az oldalt a legtetejére, akkor elcsúszik a két lista, és semmit sem érek az egész párhuzamossággal, mert nem párhuzamos, és biztosan tévesztek. Nem találok megoldást...
Excel 2007-et használok XP-n, nem tudom, az újakban is jelen van-e ez a probléma, vagy hogy egyáltalán probléma-e, nem csak én szúrok el valamit. Tudnátok ajánlani valami megoldást?
Fájl menü -> Beállítások -> Speciális fülön a "Megjelenítés" résznél "Az összes ablak megjelenítése a tálcán" pipa törlése.
Ha így sem megy és eddig más fájlkezelő programon keresztül nyitottad meg az Excel fájlokat, akkor azoknál kell keresni valamit, vagy pedig normál módon az Excel menüből kell megnyitni a táblákat.
'Betöltjük a képet a lapra ActiveSheet.Pictures.Insert(Range("A1")).Select
'Felvesszük 2 változóba a szélességér és magasságát sz = Selection.Width: m = Selection.Height
Selection.Delete 'Töröljük a képet
'Betöltjük a képet a TextBox1-be With Worksheets("Munka1").Shapes("TextBox1") .Fill.UserPicture Range("A1") 'Megadjuk a Textbox1 két méretét .Width = sz: .Height = m End With End Sub
A tömbképletek úgy működnek, mint a programozásban a ciklusok: ugyanaz a művelet többször hajtódik végre. Van egy kvázi "ciklusváltozó", amely meghatározza a lépések számát, továbbá paraméterként szerepelhet a műveletekben.
A SZÖVEG(A1;"ééééhhnnóópp") egymás mellé rakja a dátum + időpont számjegyeit, szöveggé konvertálva.
A KÖZÉP függvény kivesz ebből a karaktersorozatból 1-1 elemet, az ÉRTÉK átalakítja számokká, a SZUM összeadja őket.
A tömbképlet "lelke" a SOR($1:$12), ami a kvázi ciklusváltozót jelenti. A SOR függvény alapesetben visszaadja az argumentumként beírt cellatartomány sorának számát. Jelen esetben, mivel most tömbképletben használjuk, 1-től 12-ig az egész számokat adja vissza. Ezek a számok a KÖZÉP függvény 2. paramétereként azt teszik lehetővé, hogy az "ééééhhnnóópp" szöveg mindegyik karakterére sor kerüljön, mindegyik ki legyen emelve a szövegből, számmá konvertálva, és a végén összeadva.
Közben arra jöttem rá, hogy felesleges a sima dátum miatt 8-ra visszavenni sorok számát. Hiszen ha pusztán dátum van, az nulla óra nulla percet jelent időpontos ábrázolásban, tehát a dátum számjegyeinek összegéhez már csak nullákat adunk hozzá, ha 12 sor van, vagyis a végeredmény nem változik.
Nagyon köszönöm, most már müködik! Jövök neked egy valamivel. Igen, én is kérnék egy kis magyarázatot, miért és hogyan müködik ebben a képlethalmazban? Hátha még én is megértem. Az zavart meg (egyebek mellett), hogy nemcsak egy cellában, hanem a teljes oszlopban vannak adatok, de amikor lehoztam, akkor a második cellától már 2-eseket irt ki. Ezért arra tippeltem, hogy az 1-8 sorban van az eb elhantolva, de nem ott volt.
Ha a szerkesztőlécen írod a képletet, nem kell külön F2. Az F2 a cellában való szerkesztéshez kell.
Jimmy: a SOR() függvényben az oszlop betűjelének a kiírása zavarja meg a júzert. Elég a SOR($1:$8). Ugye milyen okos vagyok, mikor összehoztad a képletet?
Az egyébként szenzációs megoldást magam is szerettem volna kipróbálni. Emlékszem, hogy már találkoztam a tömbfüggvény technikával, így különösen érdekelt. És nekem az F2 lenyomása nélkül nem adta ki az eredményt. Nem tudom, miért. De az után kiadta. Persze, hogy csak egy sorban. És persze a 12 kijelölt (üres) soron az eredmény kiszámolása után el is tüntette a kijelölést.
Jimmy bocs, de nekem úgy tűnik, hogy egy apró momentum kimaradt: A CTRL+SHIFT+ENTER-rel történő lezárás előtt nálam kell egy F2 nyomás, ami kijelöli a 12 (vagy a 8) sort. És csak aztán jön a CTRL+SHIFT+ENTER.
Szeretném megoldani azt a problémát (excel 2007), hogy egy szövegdoboz tartalmát (kitöltése kép fájl-al) egy cellában tárolt elérési útvonal segítségével töltse ki.
A válaszokat, segítségeteket előre is nagyon köszönöm.
azér', mer' a mail box pont hu régen egy felületkezelt gmail volt, aztán májusben megszűnt a gmail támogatás, és most nemtom mi van helyette. Azt mondták, minden ugyanúgy fog működni, mint az átállás előtt. De akkor nem.
Arra nincs lehetőséged, hogy a keresés eredményét egy munkalap tartományba beletedd -fejlécet hozzátéve- és azt a tartományt add meg a listbox forrásaként?
Ez így nem fog menni. Nem lenne baj, ha az érintett idejönne, és mondana pár szót arról, hogy milyen jellegű adatokat visz fel, milyen módon, esetleg milyen környezetben. Megnézte-e, hogy nincs-e makróvírus stb.
Ez egy kicsit kevés információ. Akár egyetlen üres sor bekerülése sem indokolt, ha nem ez a szándékod. Ha kézzel viszed fel az adatokat, akkor nyilván nem történhet ilyen a tudtod nélkül. Ha program (makró) tölti ki az adatokat, akkor tudni kellene valamit arról. Hátha ott lett elszúrva valami.
Van valakinek tippje arra, hogy miért kerülnek be egyes xlsx fájlokba üres sorok, de több 10ezer? Már több ilyennel találkoztam. Ilyenkor a fájl mérete több megabájt, van, hogy 100 fölött. Néha törölni sem lehet őket, mert a köv. hibaüzenetet dobja. "Az excel nem képes az igénybe vehető erőforrásokkal a feladat végrehajtására. válasszon kevesebb adatot, vagy zárja be a többi alkalmazást."
A RowSource tartomány beállításával tudod szabályozni. Ha például 3 oszlopot akarsz listázni, és az első sorban vannak a fejléc szövegek, akkor ListBox1.RowSource = "A2:C..." beállítás az első sort tekinti fejlécnek. Ha "A3:..." a beállítás, akkor a 2. sort.
Most jött szembe először komolyabban a ListBox (komolyabban: itt: többoszlopos formában).
Szeretnék neki oszlopfejlécet csinálni (ListBox1.ColumnHeads = True), de nem jöttem rá, hogyan tudok stringet oszlopfejlécnek megadni (cellából nem jó). Gondolom valami ListBox1.Valami = ("1. oszlop", "2. oszlop", ... ) stb. alakban kéne megadnom (7 oszlop van, ha ez számít).
diagramos kérdésem lenne. Van egy nagy táblázatom, amiben van 6 600 adat 22 nyitvatartási naphoz. Egy hónap különböző adatai. Megcsináltam hozzá 90 diagramot. Minden hónapban változik a nyitvatartási napok száma. hogyan tudom megadni, hogy mi legyen az adattartomány. Most be van állítva egy fix, de minden hónapban más nyitvatartási szám van, így nem szeretném minden hónapban átállítani. Makró? Vagy más megoldás?
A táblában nincs kereshető fix érték, illetve az "A" oszlopban egyszer van, de nincs ott minden diatartományának elején.
Vicces vagy, privát emailt kérsz, miközben az email címed nem publikus:-)
Szerinte nyugodtan tedd fel itt a kérdéseket. Legalább a témakört vesd fel itt! Hátha nagyobb eséllyel kapsz segítséget. Aztán, ha a probléma ismeretében szükségesnek látszik, és valóban terhelné a fórumot, akkor majd lehet folytatni privátban.
Valaki esetleg tudna nekem privát e-mil-ben segíteni excellel kapcsolatban? Mivel nagy tábláról van szó és több ponról így lassú lenne, illetve nem szeretném a fórumot terhelni. ELőre is köszönöm! Evelin
Van 2 exel munkafüzet, a munka füzetek A oszlopa számokat tartalmaz. A 2. Munkafüzet b oszlopa egy megnevezést,azt szeretném ha az 1 munkafüzet
A. oszlopának száma(értéke) megegyezik a 2. Munkafüzet A. értével akkor adja meg 1 munkafüzet B oszlopába az a megnevezést ,amit a 2 munkafüzet b oszlopában lévő számhoz tartozik.. Milyen függvényt kell használnom.
Nincs szükség felismerni, hogy melyikben van és melyikben nincs, ha egyszer a HELYETTE függvény specifikusan lecseréli a "/2015" karaktereket a semmire.
Köszönöm a gyors választ! Nem azzal a résszel van problémám, hogy leszedjem a végéről, hanem, azzal hogy a ha függvény nem ismeri fel, hogy melyikben van /2015 és melyikben nincs
=IF(B2="*/2015";LEFT(B2;7);"") --> ez as képletem a B2 az a cella amiben a számlaszám van
Valaki tudna nekem segteni abban, hogy milyen függénnyel lehet megoldani azt, hogy a /2015 végű számlaszámokról lejöjjjön a /2015, ahol pedig nincs ott maradjon az eredeti számlaszám: (én ha, bal függgvény egybeágyazással próbálkoztam, nem valami nem jó benne). Köszönöm a válaszokat!
Én Kovalcsik Géza: Az Excel'97 programozása című könyvből tanultam meg az alapokat. A könyv példáit az Excel 2003 verziója alatt próbáltam ki, és azok működőképesek voltak. Azt hiszem, hogy az újabb Excel verziókkal sem lenne gond, mert zömmel azokat az alapokat tanítja, amik nem változtak ezekben sem. A könyv számomra nagyon világos, érthető, könnyen tanulható volt. (Persze a jelen fórumon feltett kérdéseimre kapott válaszok rengeteget segítettek a továbblépésben)
Sziasztok! Programoztam is már, Excelben elég gyakorlott vagyok, de most záros időn belül meg kellene barátkoznom az Excel programozásával. Milyen webes, esetleg nyomtatott anyagot ajánlanátok ehhez? Általában kitartó vagyok, de most szorít az idő :-(
A makró a füzet végére beszúr egy új lapot. Az első lap címsorát átmásolja erre.
Az első lap H1 cellájából veszi, hogy mire szűrje a lapok A oszlopát. Az A oszlopot a Field:=1 határozza meg. B oszlop esetén Field:=2-t kell írnod (2 helyen). A MireSzur értéket közvetlenül is beírhatod a makróba:
MireSzur="répa" , a mostani MireSzur = Sheets(1).Range("H1") helyett.
A szűrt sorokat átmásolja a beszúrt új lapra, majd az utolsó lapra áll.
Sub UjLapra() Dim lap As Integer, MireSzur, usor As Long
Sheets.Add After:=Sheets(Sheets.Count) 'Új lap a füzet végére Sheets(1).Rows(1).Copy Sheets(Sheets.Count).Range("A1") 'Címsor az új lapra MireSzur = Sheets(1).Range("H1") 'Szűrési érték megadása
For lap = 1 To Sheets.Count - 1 Sheets(lap).Select Range("A1").CurrentRegion.Select Selection.AutoFilter Field:=1, Criteria1:=MireSzur usor = Sheets(Sheets.Count).Range("A" & Rows.Count).End(xlUp).Row + 1 Selection.Offset(1).Copy Sheets(Sheets.Count).Range("A" & usor) Selection.AutoFilter Field:=1 Next
Egy neveket több munkalapon tartalmazó teljes munkafüzetre szeretnék szűrést végezni, aminek az eredményét egy új munkalapon kéne megjeleníteni. (Tehát van pl. az adott munkafüzetben 10 lap, szeretném ha kigyűjtené róluk pl. a Nagy vezetékneveket egy új munkalapra.)
mert azt tudom hogy az érvényesítésnél mondjuk ha csak "K"-t akarom hogy elfogadja az így néz ki =O16<>K akkor megáll.... de ha azt akarom, hogy a "K" mellé vegye fel a CS és az A betűt akkor hogyan fűzzem hozzá. egyszer megcsináltam de az kb vagy 10 éve volt... :/
az a baj, hogy nem tudom hogyan soroltassam fel vele aza hogyan írjam meg a képletet, mert egy-re tudom korlátozni de többre nem sikerült, nem tudom a képletet, de max. marad a lista....
itt pedig koncentráljunk a E, H, B, J oszlopokra és ebből van kettő. Mint látható az E és H oszlopok szürkék a B és J oszlopok pedig fehérek. a szürkék az egyik halmaz a fehérek a másik halmaz. és nincsenek hatással egymásra.
remélem meg tudom egyszerűen fogalmazni.... nos mindegyik rublikába csak "x" betűt írhatok. Viszont ha mondjuk az egyik "E" oszlopba rakok egy "x"-et akkor a mellette lévő sorban található "E" oszlopba már ne tehessek.
Valamint és itt a csavar :P maximum csak két darab "x" -et rakhatok be egy sorban a szürkékhez. tehát megikszelthetek 1db "E"-t vagy 1db "H"-t vagy "E" és "H"-t mert így 1 vagy két helyet foglalok de már harmaikat vagy negyediket nem rakhatok.
Az adatok -> érvényesítés -> lista a te barátod. Ilyen keveset talán ott helyben is fel tudsz sorolni a párbeszédablakban, ha jól emlékszem, de ha nem, akkor írd be egy eldugott helyre, és vedd fel azt a tartományt.
"...megdöbbenve tapasztaltam, hogy itt sem folyamatos a sorszám. Vajh' miért "törlődtek" ki egyes szakmai hsz-ek?"
Azért a modik mentségére jelentem, hogy van, amikor méltányolható a törlés. Például az itteni #27308-as hozzászólás hiánya az én bűnöm. A szokásos figyelmetlenségem okán előbb írtam, és csak aztán vettem észre, hogy más már megválaszolta azt, amire én megkésve reagáltam. Gyorsan kértem a Techmodit a felesleges bejegyzés törlésére, ami pár percen belül meg is történt.
segítséget kérnék abban, hogy ha egy cellába azt szeretném hogy csak 3 betűt lehessen beírni (K vagy CS vagy A) akkor az érvényesítésnél hogyan fogalmazzam meg a képletet, hogy a program tudja mit akarok?
Viszont ez az a hely, ahol még rengeteg más topicban is mozgok, és rendszeresen ránézek. Még néhány új rendszeresen látogatandó oldal nem fér bele az életembe.
Ez persze csak tényközlés, mert ha a moderációról beszélgetésbe kezdesz egy nem moderációs topikban, pláne ha véleményt is mondasz, az statáriális főbűn, akár 15 év konstruktív, hibamentes fórumozás után is azonnal elmeszelhetnek érte.
A fórummotor javítására hiábavaló minden bejegyzés.
Mikor ez az idétlen időkijelzés született, hónapokig sokan ágáltunk ellene, hiába. A rendszertelen gazda meg sem jelenik, ha pedig mégis, közli, hogy ez így modern, és ők mindent megtesznek a mi érdekünkben, hogy komfortosan érezzük magunkat. A neki nem tetsző (nem trágár) hozzászólásokat egyszerűen kitörli.
Most, hogy egy ilyen régi hsz-t kerestem ki, megdöbbenve tapasztaltam, hogy itt sem folyamatos a sorszám. Vajh' miért "törlődtek" ki egyes szakmai hsz-ek?
Ott az esetleges hibákat, a jobbításra tett javaslatokat azonnal javítják. Kívánságra minden új hsz-ről e-mail értesítést kapunk, könnyű a keresés, a privát levelezés jól követhető (itt nem találok ilyent, bár ez lehet az én hibám).
Beállítasz 500-at a hozzászólásoknál (jobb felső sarokban találod a nyilat) és ezután ötszázasával vissza tudsz menni a hozzászólásokban. Én legalább is így szoktam, ha régebbi írást keresek.
Én sem gondolom, hogy a hozzászólás sorszáma lenne a fő vezérfonal ahhoz, hogy egy (ezt a sorszámot ismerő) segítségre szoruló meg is találja a segítséget. Én csak azért lyukadtam ki erre a gondolatra, mert Delila azt írta, hogy nézzem meg a 8600-as hozzászólását, és én meg is próbáltam ezt a keresővel (majd pedig a részletes keresővel) megtalálni, amikor világossá vált számomra, hogy ez közvetlenül nem megy, hanem csak több lépésben és nem eléggé felhasználóbarát módon.
Egyébként mindenkitől elnézést kérek, ez a jobbítási gondolat valóban nem ide való, itt nem is nyitottam volna ezt meg, ide pusztán a kapott segítség igénybevételi szándékának a technikai részletei vezettek. Innentől részemről Off.
Az érdemi megjegyzésem az, hogy az elmúlt években, amióta a fórumon vagyok, elvétve emlékszem olyan esetre, ahol egy fórum hozzászólás sorszámát tudtam, és ennek a segítségével szerettem volna azt közvetlenül elérni. (Feltételezem, hogy másoknál sem ehet túl gyakori az ilyen igény.) Részemről mindenesetre igencsak megfelelő az a Delila által is javasolt megoldás, amit magam is alkalmazok, ilyen esetben. Azzal is általában 10-15 lépésen belül sikerül megtalálni a keresett hozzászólást.
Ettől függetlenül kívánom, hogy legyen sikered, hiszen, ha javítják a fórummotort, az mindig hasznos.
Köszönöm a válaszodat, ami megerősített abban a véleményemben, hogy fejleszteni kellene a fórummotoron.
Nekem - és talán más fórumozónak is(?) - eléggé érthetetlen, hogy létre lett hozva egy fórum felület azzal a céllal, hogy a tapasztaltabbak felhasználóbarát módon tudják segíteni a tapasztalatlanabbakat, de ezt a segítséget ők mégsem tudják egy egyszerű, a korábbi hozzászólásra hivatkozással (ahogyan Delila is próbálta) megadni, hanem inkább újra és újra le kell ugyanazt írni, mert hogy a korábbi hozzászólás sorszámára történő hivatkozásra nem lehet a keresővel keresni, enélkül meg igencsak macerás azt megtalálni.
Én szívesen segítenék a technikai háttér ilyen irányú továbbfejlesztésében, ha értenék ehhez, de nem értek. Így marad az, hogy "Kedves adminisztrátor. Nem tudnátok ezen a gondon segíteni?"
Segítséget szeretnék kérni. Excel munkalapon elhelyezett képhez szeretnék a cellákhoz hasonlóan megjegyzést fűzni, de nem találom a megoldást. Arra volna szükségem, hogy egy képre, ha ráhúzom az egeret, akkor jelenjen meg egy megjegyzés.
A prohardver fórumon a képek és dátumok is normálisan jelennek meg. Érdemes megnézni a régi hsz-ek közötti sávos válogatás lehetőségét is (balra fent és balra lent).
Sajnos nincs a hsz-oknak értelmes linkjük, így elég nehéz megtalálni egy ilyet. Én a baloldali keresőbe beírtam, hogy "delila" és kiválasztottam, hogy "nickek között". Az eredményhalmazban klikk "Delila_1", utána "Excel", utána sajnos lapozni kellett az 5. oldalra. Ha egy hsz linkje nem így nézne ki, hogy:
…hanem mondjuk úgy, hogy "blablabla/viewArticle?t=9009340&p=12345" (t=topic, p=post), akkor csak a p= után odaírnánk, hogy 8600 és meg is lennénk. De nem így van. Vagy lehetne valahol egy legördülő (ugrás ide: hsz szám vagy dátum), meg egy textbox ( pl. 8600 vagy 2009-01-22), az is segítene. De nincs.
A belső preferencia analízist nem ismerem. A Tomcsányi féle páros preferencia analízist igen. Arra egykor programot is írtam. Ha érdekes, akkor küldj emailt. (Az enyém publikus) Ne terheljük vele ezt a fórumot.
Sziasztok. Szükségem lenne segítségre! Joghurtok érzékszervi tulajdonságait vizsgálom, és egy belső preferencia analízis segítségével a statisztikai eredményeket ki kellene értékeljem. Sajnos nem tudom használni egyáltalán, Nagyon jó lenne ha valaki tudna nekem segíteni!
Kösz a válaszod. ("Rákattintasz a hivatkozott (8600) -ra.")
Sajnos a talált hozzászólásodban lévő szövegben lévő 8600-as hozzászólásod emlegetése nem egy link, így aztán kattintgathatok rá ezerrel, az nem visz sehova.
Igazából én egy módszert gondoltam megtanulni valakitől a profi keresésre, mert azt gondoltam, hogy az általad leírt próbálkozásos módszernél a fórum motor kínál profibb módszert is. ("Mégis hamar előbújt. A hozzászólások tetején jobbra 500 db/lapot állítottam be, ezzel a 38. oldalon megtaláltam az előzményt.")
De ha te - régi fórumozó - nem tudsz profibb megoldást, akkor biztosan nincs is (sajnos).
Még valami: a grafikon körül ott vannak az kis átméretező kockák, de le vannak tiltva. Rájuk állva kétirányú nyílra vált a kurzor, de nem működnek. Ezt fel lehet oldani valahogy?
Ja igen, a Delila_1 is én voltam, csak közben változott az email címem, és a régi nickkel nem engedett be a csodás fórummotor, a címet pedig nem lehetett módosítani. :)
'estét! Kéne készítenem egy riportot, táblázatokkal meg grafikonokkal, amit pdf-be exportálva kapnak majd meg a felhasználók. Sose fogják kinyomtatni, csak monitoron nézegetni, ezért fekvő 16:9-es (szélesvásznú monitor) formátumban kellene dolgoznom. Hogy lehet beállítani ezt a méretet? A Lapelrendezés -> Méret pontban csak előre gyártott méreteket enged, amik elég messze vannak a 16:9-től. Ha a 'További papírméretek'-re kattintok, akkor megnézhetem ugyanazokat még egyszer. Gondoltam, hogy hátha a nyomtató szoftverében beállíthatom és onnan átveszi az Office, de nem lehet a nyomtatóm szoftverében egyéni méretet beállítani (szuper-fapad HP tintatusgaras).
Office PP 2013 Win 8.1-en.
megj.: Most komolyan: magyar Windows alatti magyar Office-ban 'japán boríték', 'Matahari' meg 'Ofakiu Harakiri' papírméretek? :-))
Nem szeretnék nagyon pofátlan lenni, de lenne még egy kérdésem ezzel a feladattal kapcsolatban.
Az A oszlopbeli adatok között találhatók kategóriacímek, amelyeket nem kell formázni. Mindegyik kategóriacím előtt egy üres cella van. Azt hogy lehetne belevenni a feltételes formázás képletébe, hogy ezeket figyelje és ne formázza?
Sziasztok! Szeretném a segítségeteket kérni feltételes formázásban. (Excel 2010) Van egy táblázatom, melynek A oszlopában több ezer szöveges adat van, melyek közül némelyik többször is előfordul. Egy olyan szabályt szeretnék megadni, amelynek eredményeként az A oszlop celláira vonatkozóan felülről lefelé haladva, minden adat első előfordulása pl. piros betűszínnel jelenik meg.
Ilyen esetre a megoldás az Irányított (újabb Excelekben Speciális) szűrő használata. Az Autoszűrő csak ÉS művelettel képes összekapcsolni két oszlopot, ezzel VAGY-ot is, de egyébként tetszőleges bonyolultságú logikai feltételt meg tudsz adni. A legfontosabb ismeret a Szűrőtartomány használat. A Youtube-on több példát találsz, ha irányított szűrésre rákeresel pl. https://www.youtube.com/watch?v=lk8q-RPvKWM
Egy olyan problémával fordulnék hozzátok, hogy egyik napról a másikra valami miatt nem működnek a táblázatban levő linkek. Ha rájuk kattintok, ez a hibaüzenet jön: Cannot dowload the information you requested.
A folytonos copy paste eléggé megnehezíti a munkámat, míg régebben csak egy gombnyomás volt. Erre van valami megoldás? Köszönöm.
Elég "kacifántos" a dolog, akkor működik, ha a munkalap maga le van védve. Adott tartományok szerkesztéséhez rendelhetsz jelszót, amit csak annak adsz meg, akinek engedélyezed a szerkesztést.
A felhasználó hozzárendelést az engedélyeknél teheted meg, ott a Windows felhasználók közül kell kiválasztani a szerkesztőket - a beírt neveket ellenőrizheted, hogy tényleges felhasználók legyenek - ebben az esetben ők jelszó nélkül is szerkeszthetik az adott tartományt.
A korlátozás csak bekapcsolt lapvédelemnél működik.
Újabb kérdésem lenne. Van két oszlopom. Egyik név, másik testmagasság.
Szeretném megtudni, hogy a Sanyi nevű emberek közül - nincs rendezve az oszlop és dinamikusan változik - mennyi a legmagasabb Sanyi értéke?
A MAX és a HA függvény kombója kell, gondolom én, de nem jövök rá a mikéntre.
MÁS: Tudnátok ajánlani haladó szintű online excel tanfolyamot, ahol a táblázatok kombinálását is oktatják(és a programozást is)? A közeljövőben komolyan akarok foglalkozni az Excel programmal.
Excel A oszlopa töménytelen mennyiségű nevet tartalmaz (Vezetéknév Keresztnév) Van e olyan függvény, ami pl a Géza, József, István nevek esetén a B oszlopba beír egy választott számot?
Előre is köszönöm, ha valakinek van mentő ötlete! ;)
Van egy szűrési problémám és nem jövök rá, hogyan kellene megoldani a dolgot Excelben. Van két oszlop, az egyikben random keresztnevek, a másikban a hozzájuk tartozó testmagasságok.
A táblázat állandóan változik törlődnek nevek és kerülnek a helyükre újak, a testmagasságokkal együtt.
Azt szeretném megoldani, hogy egy harmadik mezőbe írva a program keresse meg az összes XYZ keresztnevű embert az egész oszlopban és a nevük mellett levő oszlopban levő testmagasságokat adja össze, majd a végeredményt írja ki nekem. Pl.: Adja össze az összes Péter testmagasságát és írja ki az eredményt nekem.
Köszönöm az utánajárást! Ezúttal már kinyomtattam a dokumentumot, de lesz még ilyenre szükségem máskor is. Az első út nem járható, a második viszont annak tűnik. Gondolom, további escape-elésekkel 8ami további guglizást jelent) valahogy normálisan is megoldható lenne, hiszen ha egy literális szöveget sehogy nem lehet beírni, az nagy szegénységi bizonyítvány a programozóra nézve.
Valóban, mentés és újranyitás után, amennyiben a H közvetlenül az & után van (nincs szóköz közte), akkor "átváltozik" Á-vá.
Viszont, ha megnézed a Pagesetup megfelelő footer/header értékét, akkor a K&&H értéket fogja kiírni. Szóval ezek szerint ez egy szép kis bugnak tűnik.
Ha már van egy szóköz ott, akkor viszont normálisan látszik. Azt gondolom, az &H valamilyen vezérlő karakternek felel meg. Gugliztam egy kicsit, lehet, hogy ez a probléma gyökere:
&color Prints the characters in the specified color. User supplies a hexidecimal color value. A H -t valószínűleg hexa karakternek érzékeli...
Áthidaló megoldás, ha szóközt teszel közé (K && H). Másik lehetőség, a munkalapot elnevezed K&H -nak és a láblécben a &A kód a lapnevet adja be, azt már jól mentés után is. (Ez persze nem feltétlenül járható mindig...)
Ettől függetlenül a türelem nem ártalmas - elég sokszor tűnik úgy, hogy a számítógépnek/programnak is van lelke, amit ápolni kell (néha szidással...). Persze az esetek 110%-ban kiderül, hogy a gép csak azt csinálta amit valaki (jelen esetben egy "redmondi") megadott neki. A türelem ahhoz kell, hogy ezt kinyomozd és megállapítsd, hogy ki a hunyó...
Türelmesnek egy gyerekkel kell lenni, ha valamilyen hatást el akarsz érni, nem egy számítógépprogrammal, aminek az a dolga, hogy kövesse az utasításaidat. Nehogy már lelkivilága legyen! De egyébként legalább 4-5 próbálkozás után írtam ezt, többször visszajavítottam, elmentettem, újból megnéztem.
2.Nem tudom, neked miért nem sikerült "megetetni" vele a K&H szöveget. Nálam a magyar excel 2010 megeszi a dupla & mellett, úgy is, ha van szóköz és úgyis, ha nincs közötte szóköz.
Lehet, hogy nem voltál elég türelmes?
3. Ha külön sessionban nyitod meg másik excel fájlt, sajnos valóban így viselkedik, csak akkor tudsz irányított beillesztést, ha egy excel applikációban van megnyitva a két excel fájl (a két-vagy több - ablak látszik a ribbon menüben). Bár emlékeim szerint máskor is sikerült már, de azért arra nem vennék mérget és több száz cellára pláne nem.
Excel 2010-ben élőlábat kellett szerkesztenem (ez már önmagában óriási gyötrelem annak, aki korábbi verziókhoz szokott, mert jelentős visszalépést sikerült elérni kényelemben).
1. akadály: az ördögnek se vesz be az ampersandet. Próbálkozik a dolgozó mindenféle escape-eléssel, aztán guglizik, kijön a megoldás, hogy kettő kell belőle, hurrá. Akadály leküzdve.
2. akadály: Most, hogy sikerült megoldani a kérdést, bepötyögném a láblécbe a "K&H" karakterláncot. Nem reklám, ezeknek a karaktereknek kellett volna ott lenni, természetesen a dupla & jellel. A nyomtatási képen folyton K&Á lesz belőle többszöri visszajavítás, sőt javítás-mentés után is. Mindig ott romlik el. Végül beírtam valami mást, mint aminek ott kéne igazából lennie. Akadály elbukva. Érti ezt valaki?
3. akadály: az egyik Excel-táblázatból a másikba nem lehet irányított beillesztéssel áttenni pár száz cellát, mindenáron objektumként akarja beilleszteni, többszöri próbálkozás után. Az emlékeimből előjön, hogy igen, ezzel a sárkánnyal már találkoztam és levágtam a fejét, ez akkor van, amikor két külön folyamatként vagy Excel-példányként érzékeli az Excel a táblázatokat, és a partnerben nem ismeri fel saját magát. Már sokszor mondtam, hogy a Microsoft gyártja azokat a programokat, amik önmagukkal sem kompatibilisek, de ez az egésznek a nonplusultrája. Megoldás: a céltáblázatot bezárni, majd a forrástáblázat file menüjéből újra megnyitni, és így már megy. Akadály leküzdve, de ki érti ezt?
HELP! CELLÁK AUTOMATIKUS KITÖLTÉSE MEGFELELŐ ADATOKKAL
Sziasztok!
Segítségeteket szeretném kérni egy probléma megoldásához.
Termék nyilvántartó táblázatot kéne csinálnom, de elakadtam a következő pontnál.
A termékek nevéhez automatikusan kéne hozzárendelni a kategória neveket.
Az elképzelés az, hogy egy oszlop tartalmazza a termékek nevét és a másik oszlopba automatikusan írja be a kategória nevét.
"Tanítható" táblázatra gondoltam:
Ha jön egy új termék, akkor természetesen manuálisan írom be hozzá a kategóriát, viszont ha újra jön (pl. más beszállítótól), akkor már magától kéne, hogy mellé kerüljön a kategória neve.
Valahogy úgy kéne megoldani, hogy a táblázat szélén befognék két oszlopot, egyikbe bevezetném a termékek nevét, a másikba pedig a hozzájuk rendelt kategória nevet. A lényeg az lenne, hogy ez alapján, ha a táblázatba bekerül egy termék, ami egyszer már szerepel a listában, akkor automatikusan dobja hozzá a két oszlopban lévő adatok szerint a kategória nevet.
Példa:
Az A1 mezőben szerepel a termék neve: ZanussiZRT18100WA
A B1 mezőbe be kéne írnia magától: Hűtőszekrény
Ezt az alapján kéne kitöltenie, ami a fent említett két oszlopról írtam, amennyiben abban szerepel ez a párosítás.
Ha nincs, akkor tegyen mellé valamit (pl. X), ebből látom, hogy még nincs ilyen párosítás, ebben az esetben beírom kézzel és hozzáteszem a listához.
Ez így lehet bonyolultnak tűnik, de remélem van aki tud segíteni.
Az érvényességet megadhatod az A és C oszlopra: =$A$2:$A$500;$C$2:$C$500 – az 500 helyett a saját sorszámodat írd. Ebben az esetben ezt a két oszlopot formázza.
Arra már rájöttem, hogy ezt a feltételes formázást képlettel kell megcsinálni, csak a képletre nem jövök rá, ami nem csoda, középiskola óta nem foglalkoztam Excel-el. :D
ne haragudj az újabb zavarásért, feleségemnek próbálok segíteni... egy állásinterjú második köréhez kell excel, de nem nagyon boldogulok vele. :D Próbálom önállóan megoldani, mert úgy lehet tanulni, de ezen azóta ülök, mióta válaszoltam, hogy köszönöm! :D
Meg kellene mondani egy képlettel, hogy összesen mennyi panasz érkezett a volvo-tól. Képlettel kell! Tehát kell valami, ami kiszűri az A oszlopból a volvokat, majd összepárosítja a H oszloppal és végeredményül megadja, hogy összesen mennyi YES érték szerepel.
Sub torol() Dim pict As Shape For Each sh In ActiveSheet.Shapes If sh.Type = msoPicture Then On Error Resume Next If Not sh.Hyperlink Is Nothing Then sh.Hyperlink.Delete
Elkezdtem végre foglalkozni VBA-val és rájöttem hogy eddig hülye voltam hogy miért nem használtam :D
A következőkben tudnátok segíteni, hogy ezt a két scriptet hogyan lehetne egybe gyúrni? Azaz hogy tudok a dátumnak változót adni amire tudok hivatkozni hogy hova másolja. Mert ugye a dátum mindig változik?
Sub datumosmf()
Dim SheetName As String
SheetName = Format(Date, "dd-mm-yyyy") 'a fomrátumot lehet változtanti
End Sub
Sub achiválás() Dim i, lastrow Dim mytext As String lastrow = Sheets("projects").Range("A" & Rows.Count).End(xlUp).Row For i = 2 To lastrow mytext = Sheets("projects").Cells(i, "C").Text If InStr(mytext, "archiválva") Then Sheets("projects").Cells(i, "A").EntireRow.Copy Destination:=Sheets("delivered").Range("A" & Rows.Count).End(xlUp).Offset(1) 'Sheets("projects").Cells(i, "A").EntireRow.Delete End If Next i
A 2 azt adja meg, hogy a hivatkozott tartomány 2. oszlopában lévő érték legyen az eredmény, a 0 (ami helyett írhatsz HAMIS-at is) pedig azt, hogy pontos eredményt vársz, nem közelítő értéket.
Volna egy kérdésem, hátha valaki megszán, és megmondja a tutit.
Win7-esem van.
Az excelben azt szeretném megoldani, hogy ha beírok valamilyen számot, akkor a mellette lévő cellában egy általam megadott név jelenjen meg és lehetőleg egy meghatározott színnel.
Korábban dolgoztam ilyen megoldással a munkahelyemen, de sehogy sem jövök rá, hogyan volt beírva. Arra emlékszem, hogy sok-sok zárójelet tartalmazott.
Köszönöm előre is!
(Bele-bele olvastam az előzményekbe, de mind nem olvastam el...)
Egy egyszerűnek tűnő problémába beletört a bicskám.
A következőt kellene megoldanom annak függvényében hogy 0 érték melyik cellában van. A képletet egy cellán belül kellene megvalósítanom segédcellák nélkül
A1 B1 C1
0 0 Legyen az érték 0 0 valami Legyen az érték 1 valami valami 15/7,5
valami 0 20/9,7
"Valami" az nagyobb mint 0
Az "és" "vagy"-al operáltam de teljes mértékben soha nem értem el a célt.
Biztos, hogy van Sheet1 nevű munkalapod. Azért kérdezem, mert nálam 2010-es excelben műxik a dolog.
Mi lenne, ha kilépnél az excelből és egy "frissen nyitott" példánnyal próbálnád meg. Lehet, hogy összezavartad már a memóriáját a sok próbálkozással...
Köszönöm az ötleteket! Sajnos mindkét megoldásnál megkapom ugyanazt a hibát, mégpedig a másolási parancssornál. Ha kiveszem a sheet átnevezését, hagyom Sheet1-nek, akkor is ugyanebbe ütközöm, ugyanott.
Ha lépésenként futtatod, akkor melyik sornál jön be a hibaüzenet? (Fejlesztőeszközök - makrók - makrókiválasztás - lépésenként, utána F8 egy sorral továbbviszi a programot.)
Van egy olyan érzésem, hogy a sheet1 átnevezése okozhatja a problémát:
Az elején ez van: Worksheets("Sheet1").Visible = True
Majd a másolás után Sheets("Sheet1").Select és a formázás után pedig ActiveSheet.Name = "TB_List" és ezt másolod át egy új munkafüzetbe.
A régiben pedig ottmarad a munkalap, mostmár TB_List néven.
Természetes, hogy innentől hiába szeretnél ismét Sheet1-re hivatkozni, mert az már nincs.
Nem biztos, hogy ez a gond, de mi lenne, ha az átnevezést csak a Sheet1 új munkafüzetbe másolása után - az új munkafüzetben tennéd meg, azaz a Sheet1 -et másolod át és ott nevezed át TB_List-re.
A főnökök többnyire megértik idővel, hogy amit mondasz, az jó nekik. Amelyik teljesen fejlődésképtelen, annak úgysem érdemes dolgozni. :-)
Például amikor majd módosítani kell valamit ezen a táblázaton, mondd azt, hogy Excelben két perc alatt megcsinálnád, de újból áttenni Wordbe és normálisan elrendezni plusz egy óra munkaidő, ami miatt egy másik feladatot halasztani kell.
Van egy spreadsheetem, amely egyik lapjának két oszlopa multicolumn lisboxban kerül a képernyőre. Két command button van alatta, az egyik PDF-be exportálja a listboxban megjelenő adatokat a sheetről, a másik külön Excelbe. Az Excelbe való exportálás nem közvetlenül működik, hanem előbb egy másik sheetre másolódik a két oszlop az eredeti helyről, majd maga ez a sheet másolódik ki külön fájlba. És ennél a lépésnél, a másolásnál valami gubanc van.
A gondom a következő.
Ha csak az egyik exportálást használom, minden megy, mint a karikacsapás. Ha viszont előbb PDF-be, majd utána egyből az Excelbe való exportálásra kattintok, mindenféle misztikus hibaüzenettel szembesülök. Ami azért érdekes számomra, mert vagy az egyik, vagy a másik működik. A kettő együtt nem. Illetve úgy igen, ha az exportálás befejezése után automatikusan bezárom a listbox ablakát, és arra kényszerítem a felhasználót, hogy újból jelenítse meg a listboxot, ha mindkét exportálást végre szeretné hajtani. Szeretném visszont kiküszöbölni ezt a felesleges lépést.
Nagyon örülnék, ha valaki valami tanáccsal tudna szolgálni.
Adott egy 6000 soros táblázat. Ezt szeretném áttenni wordbe. A problémám az hogy az első 7sort ismétlődő sorként állítottam be hogy minden oldalon ez legyen az első 7sor. Namost ha kijelölöm a 6000sort és átmásolom vagy csatolom a word dokumentumhoz akkor csak az első oldalon jelenik meg a 7 sor a többin nem. Hogy tudom átmásolni? Valahogy az excelben a nyomtatási képet nem lehet "kimásolni"?? Mert ugye a nyomatási képben látszódik minden oldalon a 7sor az excelben. Köszi!
Fferitől már tudod, hogy 160-as kódú karakter van a számjegyeid között.
Jelöld ki a tisztítandó oszlopot, a Csere funkciónál lépj a Keresett szöveg rovatába. A bal Alt gombot nyomva tartva a számbillentyűzeten írj be 0160-at, engedd fel az Alt-ot. Ezt cseréld semmire az összesnél.
"Csak" annyi történt, hogy nem rendes szóköz van a cellákban, hanem annak 128-cal megnövelt kódú változata, azaz nem 32 a kódja, hanem 160. Ezt a tiszít függvény úgy tűnik, nem habzsolja fel.
Javaslom ezt a képletet: = helyette(B3;karakter(160);"")
ha még így is van problémád, akkor nyilván maradhatott "normál" szóköz is, amit elvileg a tisztít felismer, vagy dupla helyette függvényt használsz: =helyette(helyette(B3;" ";"");karakter(160);"")
Adott egy oszlop adatokkal (példában 9 jegyű azonosítószámokkal), a kapott adatok feleslegesen tartalmaznak szóközöket a számok elején és/vagy végén. Akár többet is.
Excelben elvileg a KIMETSZ (TRIM) függvény képes ezt tisztítani. Egy egyszerű próbánál, kézzel beírt adatokkal rendesen működik is, azonban az elvégzendő állományon nem teszi a dolgát. A szóközzel tűzdelt számok vegyesen vannak számként, általánosként, illetve szövegként formázva. Próbáltam ÉRTÉK függvény használatával formázni, de az a szóközök miatt megint csak nem lehetséges. Viszont manuálisan változtatva a cellaformázásokat arra jutottam, hogy nem ez okozhatja a KIMETSZ függvény problémáját.
Csatolok egy lista töredéket, amelyen látszik, hogy nem szedi ki valamiért a szóközöket. Többszáz/ezer darabnál kellene megoldani, így fontos lenne. A probléma, hogy a szóközök miatt nem tudom összekerestetni a cellaértékeket FKERES-sel.
Tudnátok ötletet adni, hogy mi a probléma oka, mi lehet a megoldás?
Csatolni nem tudtam, így itt egy link hozzá: (előre is köszönöm a segítséget)
Éppen ma kellett egy csomó file-ból törölnöm egyforma részeket. Rájöttem, még program sem kell hozzá. Megnyitottam egyet Notepad++-ban, makrórögzítéssel megcsináltam, hogy csere-mentés-bezárás, ehhez hozzárendeltem egy könnyen elérhető billentyűkombinációt, aztán Total Commanderben kijelöltem az állományokat (nem mind a 42-t egyszerre, hátha sok lenne neki, hanem 3 részletben), jobb gomb, megnyitás Notepad++-ban, és ott annyiszor megnyomtam a makróhoz rendelt kombinációt, ahány meg volt nyitva. Szerintem annak kell tudnia regexet is. Nekem pillanatnyilag ez volt a leggyorsabb, de 100 file felett már lehet, hogy írnék programot.
A csv-t nem excelben csinálom. Ott csak megszerkesztem a táblázatot, amit a netes konvertálók csinálnak, aztán copy az egész OpenOfficeba és ott mentem a csv-t. Ennek az az oka, hogy vannak szerkesztési funkciók, amik OOfficeban nincsenek. De ha tudsz esetleg valami egyszerűbb megoldást, szívesen veszek minden ötletet.
Sziasztok! Tud valaki segíteni, hogy mitől romolhat el az Excelnek csak a mentés másként parancsa, akárhányszor a mentés máskéntre kattintok lefagy az egész és onnnatól vége van!! Köszönöm
Nem olvastam végig az egész témát, de ha csak az a feladat, hogy XML-ből CSV legyen, ahhoz nem kell Excel, sőt az Excelt használnám utoljára. Előtte pedig bármilyen programnyelvet, amit képes reguláris kifejezéseket kezelni, ez ma már eléggé alap. Úgy értem, töredéke a munkamennyiség, mint regexek nélkül.
Szinte minden hozzászólásban van valamennyi igazság.
Hogy könnyebben érthető legyen, leírom amit eddig kihagytam.
Xml árlistákat kell csv-be alakítanom. Eddig nem nehéz a feladat, mert rengeteg ingyenes online konvertáló létezik. A gondom az, hogy az xml fájlból némi "szemét" benne marad a csv-ben.
Nem kell az egész cella tartalmát törölni, csak azokat, amik a "<>" karakterek között vannak. (A példában a "Hasznos adatok" nincs ezen karakterek között.)
Nagyon jó lenne a .html-es save as megoldás, de sajnos akkor elveszti a táblázat formáját, már én is gondoltam rá. Akkor megint copyzhatok napokig 1400 termék esetében.
A megoldáshoz Eredő Vektor függvénykombija áll a legközelebb, az a példával tényleg tökéletesen működik, viszont semmi mással nem. :(
Gondolom ennek az az oka, hogy a "<>" jelek közötti dolgok össze-vissza vannak, itt egy másik példa, ezzel sem működik már:
Van egy mező,(amibe összeg lesz) és felette 2 kockával egy legördülő-ből választható név mező. A következőt szeretném: Ha beírok egy összeget az adott mezőbe (J7) és mondjuk felette 2-vel (J5) Pisti név van akkor másolja az összeget egy adott mezőbe (F79) és adja hozzá ha már van ott bármilyen összeg. Persze ha Misi név van ott akkor egy másik másik helyre másolja és adja hozzá a már ott lévő összeghez. Max 5 névről van szó Remélem értelmesen tettem fel a kérdést, de ha nem akkor korrigálom, ha valaki tudna segíteni.. Köszi előre is
Adott napon aktuális dátumot a ma() függvénnyel tudod elővarázsolni. Innentől kezdve különbséget vonsz a mai dátumból és a lejárat dátumából a C oszlopban úgy, hogy a mai dátumot rögzíted $ jellel. Arra figyelj, hogy a C oszlop cellaformázása általános vagy számformátum legyen. Ezután még csinálsz a C oszlopra feltételes formázást --> az a cella ami 30 vagy annál kisebb számot tartalmaz legyen kitöltve pirossal.
Az egyik oszlopban nevek vannak, a másik oszlopban a nevekhez rendelt személyi igazolványok lejártának dátuma.
Hogy tudnám azt elérni, hogy mindennap bekapcsolva a gépet kijelzi (pirosítsa, aláhúzza stb), ha a személyi igazolvány lejártáig 30 nap vagy annál kevesebb idő van?
A segítségeteket szeretném kérni. Lehet nagyon primitív a kérdés, de nem vagyok egy excel zseni.
A probléma: Van 160 xls táblázatom (szerintem xml-ből csinálták). Van néhány egyszerű dolog amiket meg kéne ezekkel csinálnom, a nagy része már kész, de elakadtam.
Feladat:
Vannak olyan cellák, amikben az adatok "|" karakterrel vannak elválasztva. Egy cella tartalma így néz ki:
Adat1 | Adat2 | Adat3
A munka az lenne, hogy az adatokat egymás melletti külön cellákba pakoljam a "|" karakterek mentén. Valahogy így:
Ahogy én gondolom: Az 500 egyedi cikkszámot kimásolnám egy új oszlopba (akár azon a munkalapon is - pl. átmásolod az összeset és utána adatok - ismétlődések eltávolítása, vagy ehelyett irányított/speciális szűrés egyedi tételeket).
Tételezzük fel, hogy A oszlop a 20000 tételes cikkszám, B oszlop ugyanitt a mennyiség, C oszlop ugyanitt az egységár. A D oszlopba tennék egy szorzatot: =B2*C2
Az 500 egyedi cikkszám pedig a F oszlopban van, legyenek az értékek a második sortól lefelé mindenütt.
súlyozott átlag képlet meg van - és működne is, ha 1 cikkszámra kellene, viszont nekem a 20.000 soros Excel táblában van 500 cikkszám, amelyekre egyenként kellene a súlyozott átlagár... (ha cikkszámonként rendezem és 500 alkalommal kijelölném a tartományt és arra alkalmazom a képletet, valószínű működne is, de talán van kevésbé időigényes megoldás is :) ) Köszönöm előre is!
Azt észrevettétek már Excel 2010-ben, hogy ha egy függőlegesen összevont cellát formátummásolással másolom tovább az alatta lévőkre, akkor az így másolt cellák esetén - a cellaösszevonás mellett is - megtartja minden sor értékét? Ezt a szűrők alkalmazásából lehet észrevenni.
Kipróbálási lehetőség:
1. A1 = "Szám" B1 = "Betű"
2. A2= 1; A3= 1;
3. A3= 2; A4= 2; A5= 2
4. B2 = 'a' B3 = 'b' B4='a' B5= 'b'
5. Cellaegyesítéssel az A2 és A3-t összevonom - erre feljön az üzenet, erre OK.
6. Az összevont A2&A3 cellát formátummásoljuk az A4-A5-re.
7. Szűrőt felteszünk az első sorra
8. A oszlopot leszűrjük a 2-esre. -> akkor helyesen A oszlopban a A4-A5-ös cella 2-essel, B oszlopban pedig a B4= a és B5= b
9. Az A oszlopot ezután leszűröm 1-esre, akkor a B oszlopban csak a B2-es cellát hozza fel eredményül, pedig még a B3-nak is meg kellene jelennie. A B3-as cellát csak úgy lehet megjeleníteni a fenti műveletek során, ha az A oszlopot nem 1-esre, nem 2-esre, hanem (Üres)-re szűrjük.
Nem tudom, hogy az újabb Excelek esetén is előfordul-e ez a hiba.
Kis segítséget szeretnék kérni súlyozott átlag számításhoz! - Van egy 20.000 soros lekérdezésem tele cikkszámokkal. A cikkszámokhoz tartozik egy egységár és eladott mennyiség.
Szükségem lenne egy olyan képletre vagy makróra ami cikkszámonként rendezve a darabszámmal súlyozott egység átlagárakat adja ki! (A PIVOT csupán átlagár számítására képes ami számomra nem megfelelő mert van olyan cikk amit 0 ft/egység 1DB mennyiségben és pl 10ft/egységáron (100DB) átlagban 5ft/DB átlagáron hoz ki pedig nyilván súlyozott átlagként 10 körüli értéknek kellene szerepelnie.)
gondolom itt ha / szumha vagy fkeres függvények segítségével lehetne egy összetett képlettel megoldani a problémát.
Az adott cella interior.colorindexe vagy interior.color értéke (a kettő természetesen nem ugyanaz).
Pl. beszínezel egy cellát, ráállsz és megnézed a VBA nézet immediate panelján : ?activecell.interior.colorindex (enter)
A VBA immediate panelján a ? (print parancs rövidítése) használatával hasznos információkat tudhatsz meg.
A colorindexnél nem mindegy, hogy melyik szinskála van "használatban", mivel több (elég sok ...) is van belőle. Ezért egyértelműbb a color lekérdezése.
Van néhány konstans is, vbwhite,vbblack,vbyellow,vbgreen pl.
A color értéket megadhatod az RGB függvénnyel (pl. RGG(255,0,0)) az piros szín lesz.
Azt szeretném megkérdezni, hogy ha egy cellát valamilyen színnel "befestünk"- háttérszín. Akkor azt a színkódot hol tudom "leolvasni" hogy a makróban tudjam használni a interior.colorindex tulajdonságban.
Cégnél lenne rá szükségem. A raktárból a dolgozók által kivitt szerszámokat kéne jegyezni. Van egy szerszám kivétel dátuma oszlop, egy visszahozatal dátuma oszlop, szerszám neve, darabszáma, dolgozó neve, és pluszba még egy olyan oszlop hogy "Visszahozta-e?". A ötletem a munka megkönnyítése miatt az volt, hogyha bármit beírok a szerszám oszlopba akkor mellé autómatán beírja a kivétel dátuma oszlopba a rendszer dátumát. És dettó hogyha a "Visszahozta" oszlopba igent írok, akkor a visszahozatal dátumát is autómatán beírja.
Különben köszönöm a választ. De ehhez makrót hogy kéne keresnem? Ha csak annyit írok hogy fix rendszerdátum beírás, vagy nem frissített rendszerdátum beírás, ezekre semmi érdemlegeset nem találok. Sajna makró íráshoz viszont nem értek.
Hát erre vagy makrót írsz, vagy fogod, ami megjelent, és érték szerint visszamásolod ugyanoda irányított beillesztéssel. Ha nem túl sok, akkor talán ez az egyszerűbb. Sajnos nincs ilyen beépített lehetőség, pedig hasznos volna.
Megoldható úgy is, hogy az eredeti csoportosító jelek megnyomásával működjön. Vagyis a már elkészített csoportosítások kinyithatók, becsukhatók, de új csoportosítás nem hozható létre és a meglévők sem változtathatók meg.
Excel-ben szeretném megcsinálni hogyha pl: AZ "A" oszlopba egyik cellájába beírok valami, akkor a mellette lévő cellábe beírja az aznapi dátumot. HA fügvénnyel sikerült megcsinálnom, autómatikusan beleírjon a másik cellába, a rendszeridőt is kitudom jeleztetni. A probléma csak az hogyha másnap megnyitom az excelt akkor megváltoztatja a dátumot. Viszont nekem úgy kéne hogy amit 05.11.-én beírok, akkor azt másnap már ne írja át 05.12-re.
Nem akartam eddig reagálni erre, de most megteszem:
Mivel én általában nem magamnak csinálok excel táblákat, hanem néha tök laikusoknak is, valószínűleg ezért "alakult ki bennem", hogy próbáljam minél átláthatóbban (ránézésre is követhetőbben) prezentálni a dolgokat. nyilván kihagyhattam volna az igaz-hamis opciót, de akkor három, számokból álló oszlop keletkezett volna, mely úgymond nem különül el egymástól. Így, hogy az utolsó oszlop nem szám, talán gyorsabban értelmezhetőbb a dolog.TUDOM, hogy az igaz-hamis nélkül is működött volna, és valakinek ez "felesleges túlbonyolítás" én ilyen módon is próbálok segíteni a usereknek.
Azért fölösleges, mert rögtön oda lehet írni a kívánt értéket, ahogy mutattam. A másik megoldásban az igaz-hamis csak egy segédérték a szűréshez, de a kérdező nem ezt akarta látni.
a konvertált file, rákkantitva, a Google Earth programban, megjelennek ugyanezek az adatok kivéve, a "KÉP" hiperhivatkozás. A fotó hivatkozása, ami ugyanabban a mappában van mint az eredeti Excel file.
Meglehet egyáltalán ezt jeleníteni KML-ben?
Másik kérdés, hogy tudom változtatni az ikonok színét, méretét, alakját megadva, excel táblázatban, majd átkonvertálva KML-be ott a Google Earth-ben már különböző ikonnal jelenjenek meg az adatok.
Az Fkeres nagyon jó a pontos egyezés megkeresésére, hidd el (és ahhoz nem kell rendezettnek lennie annak a tartománynak, amiben keresel). Hátránya, hogy csak az első találatot adja meg (de ez igaz az általad favorizált kombóra is....)
"Én az index és hol.van függvényeket használom mindig."
Ez tulajdonképpen a keresőfüggvények általánosított "formája", amikor bármelyik sorban - oszlopban kereshetsz és nézheted meg a hozzá tartozó adatot.
Sőt - az index képes tartományt is visszaadni (erre csak nemrég vezettek rá éppen itt...).
Fkeres és vkeres pedig az első oszlopban ill. az első sorban keres és ahhoz rendeli hozzá a dolgokat.
A hol.van függvény is hasonlóan viselkedik, mint az fkeres, csak ott a 3. paraméterrel szabályozhatod a keresés formáját.
Még szerencse, hogy ilyen sok megoldási lehetőség van és ki-ki vérmérséklete szerint használhatja az eszközeit.
Tényleg, én sosem szerettem ezt az fkerest, még a szeme sem áll jól. Becslésre tényleg jó lenne, de azt nem csinálok. Meg a kollégáim, amikor rám akarnak sózni egy félórás-órás munkát, általában azt mondják, hogy "csak egy fkeres". Én az index és hol.van függvényeket használom mindig.
"Márbocsánat, de az FKERES tudtommal rendezett halmazon működik"
Ezt nem egészen jól tudod. Az Fkeres negyedik paraméter mondja meg azt, hogy "tartományban keres" vagy sem.
Ha a negyedik paraméter hamis(vagy 0, ami ugyanazt jelenti az Excelnek), ez azt jelenti, hogy pontos egyezést keresünk, ebben az esetben nem kell rendezettnek lennie a halmaznak.
A rendezettség akkor szükséges, ha közelítő értéket keresünk, akkor viszont feltétlenül rendezett halmazra van szükség.
Az összehasonlításra szerintem is egyszerűbb a képleted.
Már bocsánat, de az FKERES tudtommal rendezett halmazon működik, az igaz-hamis meg felesleges bonyolítás.
Én ezt írnám a C1-be: =HA(DARABTELI(A:A;B1)=0;B1;"")
És kész. Ha két halmaz különbségét akarom megkapni, akkor nem árt látni a két eredeti halmazt is, már csak azért is, mert a bemenő adatokat megsemmisíteni soha nem bölcs dolog, szükség lehet még rájuk, el is lehet rejteni a B oszlopot.
Ha a kérdező mégis ragaszkodik hozzá, hogy a B oszlop helyén jöjjön létre az eredmény, akkor C oszlop kijelöl, visszailleszt ugyanoda érték szerint, majd B oszlop töröl, ez sokkal gyorsabb a szűrésnél. Utána akár egy kupacba is lehet gyűjteni őket rendezéssel.
Ez majdnem jó, csak egy kis bibi van. A feladat az, hogy a B oszlopból töröljük a megfelelőket. A megoldásod pedig azokban a sorokban ír igaz értéket, ahol az A oszlopbeli számot talált meg B-ben bárhol. És nem biztos, hogy mellette a B-ben egy törlendő adat van. Pl. az alábbi példában az A oszlopbeli 1, 2 és 3 számokat kellene törölni B-ből, miközben IGAZ értéket a B oszlopbeli 1,3 és 5-höz rendeltünk.
A B C
6 4 HAMIS
2 1 IGAZ
7 2 HAMIS
1 3 IGAZ
3 5 IGAZ
Ha viszont a keresést a B oszlopról indítva hajtjuk végre, az A-n keresve - ami a lényeget illetően ugyanaz - (=HA(SZÁM(FKERES(B1;A:A;1;0));IGAZ;HAMIS)), akkor jó lesz az eredmény:
A megoldás lehet az hogy egy üres oszlopba csinálsz egy keresést, ahol az egyik oszlop értékeit megkeresi a másikban, és igaz szöveget ír ki ha talált egyezést (és hamisat ha nem).
Majd leszűrve az igaz értékre kitörlöd a B oszlop adatait.
A példában a keresést az A és B oszlopokban csináltam, (ha nálad más a két oszlop írd át). a függvény lefele húzható.
Egyszerűnek tűnő problémám van, de én sehogyan sem jöttem rá: van két oszlopom, minden cellájukban egy-egy számmal. Azt szeretném elérni, hogy a második oszlopból törlődjenek azok a számok, melyek az első oszlopban szerepelnek (vagyis két halmaz különbségét akarom megkapni).
Ez úgy is működhet, hogy a csoport bontó/nyitó gombra kattintva aktiválódik a makró és végzi el a dolgát, vagy külön egy gombra kell kattintani ? (utóbbi esetben, mi van ha több csoport van egy lapon?)
1. A forrás állományodban (ahol vannak a listázandó elemek) vannak üres elemek. Hiszen, ha A:A formában adtad meg a hivatkozást, akkor - ahogy írod is - az utolsó utáni első üres cella lesz az első e legördülőben.
2. Az érvényesítésnél az Excel nem az "első üres cellát" választja ki elsőként, hanem az első olyant, ami egyezik a legördülő mező már meglévő értékével. És ha abba eddig még nem lett semmi sem kiválasztva, akkor megkeresi az első vele azonosat (az első üreset), és azt veszi elsőnek.
Ha már választottál valamit, és erre lépsz vissza, akkor a választott érték lesz az első a legördülő listában.
3. Ha meg tudod oldani, hogy a forrás állomány végén se legyenek üres elemek (ezt oldja meg Fferi képlete), akkor nem tud mást tenni, kínjában a lista első elemére áll, ha nem talált üreset az üreshez:-)))
Ezután az adatok érvényesítésénél beírod a lista forrásának =név
A munkalapok nevét és a tartományok helyét változtasd a saját helyzetednek megfelelően, a darab2 tartomány vége lehet természetesen sokkal hosszabb is, hogy tudd tölteni.
A név mindig az éppen teli sorokat fogja tartalmazni. Fontos, hogy az első cellában is legyen adat, ha azt nem szeretnéd megjeleníteni a listában, akkor =ELTOLÁS(Munka1!$A$1;1;0;DARAB2(Munka1!$A$2:$A$60);1) legyen a képlet.
Nincsenek üres cellák! Viszont az adatbázis feltöltése folyamatos, ezért kell megadni, cellaérvényesítésnek az egész oszlopot PL B:B.
Ma 10 sor van benne, holnap már 12 lesz stb. Rendezni nem kell, mert az adatoknak sorszáma van, de nincsenek is üres cellák.
Tegyük fel 10 sor van a lapon + a "fejléc" , ekkor a B2:B11 cellákban lesznek azok az adatok, melyek megjelennek a másik lap legördülőjében, viszont ott ezek szerint a B12-es (üres) cella "adata" lesz az első.
És az lenne a jó ha az első (B2) cella adatától indulna a lista. De nem így van.
Azt írtad: "Amíg van üres cella a tartományban, addig az adatérvényesítés onnan fog indulni, ha nincs adat abban a cellában, amelybe írni szeretnél" Ezek szerint az megoldás, ha a fejléc és az első sor közé beszúrok egy üres sort, amit el rejtek és azt is beleveszem az érvényesítésbe ?
"Meg lehet oldani, hogy a legördülő menü mindig az első adattól mutassa az adatokat ?"
Mit értesz "legördülő menü" alatt? Az adott cellához tartozó adatérvényesítést?
Ha igen és amint írod, egy másik munkalapra készül el az adatérvényesítési lista, akkor miért vannak közte üres cellák? Az üres cellákat vedd ki a tartományból (rendezés után a végére vagy az elejére kerül és törölhető).
Amíg van üres cella a tartományban, addig az adatérvényesítés onnan fog indulni, ha nincs adat abban a cellában, amelybe írni szeretnél.
Adott egy sheet melyen soronként, manuálisan történik az adatok feltöltése (naponta változhat)
Ennek a sheetnek az egyik oszlopának az adatairól (egy másik lapon) legördülő menü készült.
A probléma az, hogy a legördülő menü, sosem az elejéről mutatja az adatokat, hanem mindig valahol középen, ahol nincs adat.
Ezért 1. mindenképpen görgetni kell a listán, 2. a user azt hiszi nincs "benne" adat.
Meg lehet oldani, hogy a legördülő menü mindig az első adattól mutassa az adatokat ?
(akárhogy adom meg a területet (teljes oszlop, elnevezés, cellahatárok), mindig ugyanaz az eredmény). A beállításokban sem találok ilyen lehetőséget :(.
Lefut, zárol amit kell, de a végén hibát dob: "Range osztály Locked tulajdonsága nem állítható be"
És nem utolsó sorban lassú is. kb 14.000 sor és 17 oszlop ami vizsgálnia kell, képlet sehol sincs csak értékek. Lehet valamit gyorsítani rajta?
Köszönöm P.
Sub cella_lock() Dim ws As Worksheet Dim c As Range Dim pwd As Variant
Application.EnableEvents = False
pwd = "Company" For Each ws In ThisWorkbook.Worksheets For Each c In ws.UsedRange c.Locked = c.Interior.Color = RGB(255, 192, 0) Next c ws.Protect Password:=pwd
Jó rég jártam már erre :-D, de most ismét itt vagyok.
Abban szeretnék segítséget kérni, hogy megoldható-e a dolog függvényezéssel:
Adva van egy oszlopom "piszkos" adatokkal,
Piszkos adatok
Budapest 87631
9723hdu Kairo
Madrid ö982j312
És adva van egy lista is, ahol a vérosnevek "tisztán" szerepelnek
Budapest
Ka
Madrid
A kérdés az lenne, hogy tudom a piszkos mellé kikeresni a tisztából a városnevet. A feniek csak példák, mindenféle felesleges dolog van a cellában, de nekem mindig a város kell.
Próbálkoztam a FIND függvénnyel:
=FIND(Sheet3!A:A;A1;1)
Ugye normál esetben a find első helyére a konkrt értéket kell beírni...de én azt szeretném, ha nem 1 cellát nézne, hanem egész range-ben keresne...nem tudom mennyire érthető...
Igy nézne ki rendesen a függvény:
=FIND("Budapest";A1;1)
Ez meg az ügyeskedésem:
=FIND(Sheet3!A:A;A1;1)
Sheet3!A:A itt tallható a letisztított lista. De valahogy nem akar működni :-(...
Szerintem valami array függvény kéne...de lehet hülyeséget beszélek.
Nem szeretném macroval, ha lehetne ezt függvénnyel...vba-ban nem vagyok akkora penge.
Tudnátok abban segíteni, hogy van e megoldás arra, hogy ha 1 cellába szeretnék, szöveget és egy számolás értékét írni akkor, is szabályozható legyen az eredmény hossza.
Pl ennél a számolásnál: ="az eredmény "&500/12 13 tizedesjegyig kiírja az eredményt, de nem tudom beállítani, hogy csak egyet mutasson.
Hát megpróbáltam lekezelni a Select case előtt de valahogy így sem akar normálisan működni.
Itt van a javított változat.
Dim kezdes, vege Dim ledolgozott, szamit1, szamit2 Dim szamit As Currency Const oraber = 430
kezdes = Cells(Target.Row, 3).Value vege = Cells(Target.Row, 4).Value If Str(vege) = "OFF" Or Str(vege) = "" Then Cells(Target.Row, 5) = 0 Exit Sub End If
Select Case (Minute(vege)) Case 0, 30 Cells(Target.Row, 5) = ((vege - kezdes) * 24) Case 1 To 29 Cells(Target.Row, 5) = WorksheetFunction.RoundUp((vege - kezdes) * 24 / 0.5, 0) * 0.5 Case 31 To 59 Cells(Target.Row, 5) = WorksheetFunction.RoundUp((vege - kezdes) * 24 / 0.5, 0) * 0.5 Case Else Cells(Target.Row, 5) = 0 End Select
A Thisworkbook kódlapon is van elég sok olyan eseménykezelő, amelyik a munkalapok változásaira "indul be":
Pl. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
és van még jópár, amelyik Sheet-el kezdődik.
Az Sh paraméter mutatja meg, hogy melyik munkalapon történt az esemény.
Ez azért jó, mert itt tudsz megadni több munkalapra vonatkozóan egyszerre - együtt eseménykezelési eljárást, nem kell minden munkalapon külön - külön beírni a kódlapjára.
Az Sh paraméter alapján pedig elágaztathatod az eljárást attól függően, hogy melyik munkalapon volt az esemény.
"A Worksheets helyett a Worksbooks-a is müködne ez az eljárás?"
Nem. Az az Excel fix beállítása, hogy a munkafüzeten, illetve a munkalapon milyen eseményvezérlőket használhatsz.
Ezt magad is meg tudod nézni a VBA képernyőn következő módon:
Munkafüzetnél: Az egyik munkafüzet fölé állsz az egérrel, jobb gomb, majd a listában View Code kiválasztás.
A megjelenő Kód ablak bal oldalán fenn a General helyett a Worksheet-et választod (mást úgysem tudsz). És mellette a jobb oldalon legördülő menüben választhatod az itt felsorolt eseményeket.
Munkalapnál: A Thisworkbook fölé állsz az egérrel, jobb gomb, majd a listában View Code kiválasztás.
A megjelenő Kód ablak bal oldalán fenn a General helyett a Workbook-ot választod (mást úgysem tudsz). És mellette a jobb oldalon legördülő menüben választhatod az itt felsorolt eseményeket.
Először is köszönöm az előző kérdésemre adott választ.
Most egy másik gondom van. van egy excel táblázatom amiben a munka időmet tárolom. Sőt a többi kollégáimét is.
na most az a problémám, ahogy a programban is látni lehet ha az aktuális cellába beírom hogy OFF ami azt jelenti, hogy azon a napon nem dolgozom akkor a ledolgozott idő kiszámításánál type Mismatch hiba üzenetet ír ki.
Itt a program:
Private Sub Worksheet_Change(ByVal Target As Range) Dim kezdes, vege Dim ledolgozott, szamit1, szamit2 Dim szamit As Currency Const oraber = 430
Select Case (Minute(vege)) Case "OFF" Cells(Target.Row, 5) = 0 Case 0, 30 Cells(Target.Row, 5) = ((vege - kezdes) * 24) Case 1 To 29 Cells(Target.Row, 5) = WorksheetFunction.RoundUp((vege - kezdes) * 24 / 0.5, 0) * 0.5 Case 31 To 59 Cells(Target.Row, 5) = WorksheetFunction.RoundUp((vege - kezdes) * 24 / 0.5, 0) * 0.5 Case Else Cells(Target.Row, 5) = 0 End Select
End Sub
Az órabér változó azért van deklarálva, mert azt akartam, hogy a ledogozott összóraszám szerint kiszámolom az utolsó cellában a kapott pénzt, de ez sem sikerült, mert itt is valami hiba üzenetet ír ki.
Ui. A Worksheets helyett a Worksbooks-a is müködne ez az eljárás?
A "Dinamukus adatok" munkafüzet "A1" oszlopaban van egy egyedi ID. És az F oszlotól szeretném kiírni, hogy "Bevételek munkafüzet" "AG" oszlopában milyen egységárakon jött be. A "Bevételek Munkafüzet" "AJ" oszlopában van az egyedi ID amivel össze szeretném hasonlítani.
Tehát több találatom is lehet és ez okozza a fejtörést nekem, hogy ezeket hogy lehetne kiíratni egymás utáni cellákba
Ezt írja erről az illetékes help (2010 magyar verzió).
"A szűrő- és nyomtatási beállításokat tetszés szerint módosíthatja. Alapértelmezés szerint minden felhasználó saját beállításait mentheti."
A munkafüzet megosztásakor a közös használat beállítások fülön lehet bejelölni az egyéni beállítások mentését. (Elvileg alapértelmezett, de nézd meg a beállításokat.)
Sziasztok, egy olyan kérdésem lenne, hogy szűrőket valóban nem lehet használni megosztott munkafüzetek esetében? Én vagyok a file létrehozója, nálam minden tökéletes, viszont akárki már nyitja meg a hálózati meghajtóról, semmi nyoma a beállított szűrőknek. Kösz előre is
Szeretném a segítségeteket kérni. Adott egy a1-es és egy a2-es cella. Az a2-es cella csak számokat tartalmaz. Létezik e olyan képlet amivel el tudom érni hogy az a1es cella értéke legyen egyenlő az a2es cella értékével, de ha az a2-es cella értéke nulla, akkor az a1-es cella kitöltése legyen mondjuk világos szürke. Remélem érthetően írtam le, nem értek az excel-hez csak használom. :) Segítségeteket előre is köszönöm.
Ebben a megoldásban kimaradt egy sor. Az első if sor elé kellett volna egy sor:
if lastrow=0 then exit sub
Ez azt használja ki, hogy amikor megnyitod az Excel táblát, és először indul el a program, a lastrow változó alapértelmezése 0. Ezzel pedig nem tud dolgozni a Range parancs.
A színt én állítom, és sajnos semmi nem változik az excelben, amire "rá lehetne ültetni" a parancsot. Úgy értem, hogy semmi olyan változás nem történik az excelben, amiből ő tudná, hogy csinálni kell valamit. Pont ez a baj. Sajnos nem tudom jobban leírni. De közben rájöttem, hogy ez több gondot csinál, mint amennyit segítene.
Ne haragudjatok nem akartam programot csinálni nektek.
Amit először írtál már az is nagy segítség volt. Ez nem volt olyan fontos.
Azért nekem is lennének kérdéseim. Miért pont a szín alapján akartál adatokat módosíatni? Ebből persze jön a következő két kérdés:
1. A színt mi alapján kapja a cella?
2. A színt ki állítja be? Te, vagy valamilyen automatizmus?
Azért kérdezem, mert ha magad állítod be, akkor annak valami oka van. Mondjuk az, hogy valamelyik cella adata alapján kiderül, hogy az a sor a B2 típusú szőrszálhasogató gép tartozéka, amire nincs szükség.
Ebben az esetben azért én is jobbnak tartanám annak az adatnak (vagy azoknak az adatoknak) a figyelését, amely(ek) változása alapján most pirosra színezed. Ez sokkal könnyebben kezelhető, például az eseménykezelővel.
Nem kell a lastrow/lastcol változópárral figyelni az előző cellát.
A sorok átmásolásával fenntartom, és nyomatékosan megismétlem, hogy semmiképp nem tenném az eseménykezelőbe. Ha mondjuk munkahelyi gépen dolgozol, akkor elég, ha a főnököd nézegeti a táblázatot és a tudtodon kívül beszúr egy csomó sort a másik munkalapon lévő táblázatba, pusztán azzal, hogy lépeget a sorokon.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim usor As Long If Target.Column = 7 And Cells(lastrow, "G").Interior.ColorIndex = 3 Then Cells(lastrow, "N") = "Nem" usor = Munka2.Range("B" & Rows.Count).End(xlUp).Row + 1 Range("A" & lastrow & ":M" & lastrow).Copy Munka2.Range("A" & usor) End If lastrow = Target.Row End Sub
Ezt írom bele. Elvileg ez annyit csinálna, hogyha a G oszlopban valamelyik cella hátterét pirosra változtatom, akkor ugyanabban a sorban az N oszlopban a cellába beírja, hogy "Nem".
Ezután az egész sort átmásolja a Munka2 lap utolsó sorában.
Nekem viszont sajnos semmit nem csinál. Vagyis Run-time error '1004';-et ír...
" If Target.Column = 1 And Cells(lastrow, "A").Interior.ColorIndex = 3 Then Itt az "A"-t átírom, arra a cellára, ahol keresem a piros kitöltést. "G"-re!"
Azért "nem csinál semmit", mert mind a két feltételt át kell írnod. A Target.Column=1 helyett Target.Column=7,vagyis feltétel
If Target.Column = 7 And Cells(lastrow, "G").Interior.ColorIndex = 3 Then
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim usor As Long If Target.Column = 1 And Cells(lastrow, "A").Interior.ColorIndex = 3 Then Itt az "A"-t átírom, arra a cellára, ahol keresem a piros kitöltést. "G"-re! Cells(lastrow, "B") = "Nem" Itt a "B"-t átírom, arra a cellára, ahova írja be a "Nem" szót. "N"-re! usor = Munka2.Range("B" & Rows.Count).End(xlUp).Row + 1 Itt a Munka 2-t átírom a másik lap nevére, ahova másolni szeretnék. Range("A" & lastrow & ":M" & lastrow).Copy Sheets("Munka2").Range("A" & usor) Itt a Munka 2-t szintén átírom. End If lastrow = Target.Row End Sub
Ha akkor változtatod a háttérszínt, mikor írsz valamit a G oszlopba, akkor sokkal egyszerűbb a dolog.
Adj feltételes formázást a G oszlopra, ami akkor változzon pirosra, mikor beírsz oda valamit.
Az N oszlopot egy képlet segítségével kitöltheted, nem kell hozzá makró. Az N2 képlete: =HA(G2>0;"Nem";"")
A másoló makró továbbra is a lapodhoz rendelve:
Private Sub Worksheet_Change(ByVal Target As Range) Dim usor As Long If Target.Column = 7 And Target <> "" Then usor = Sheets("Munkalap2").Range("A" & Rows.Count).End(xlUp).Row + 1 Range("A" & Target.Row & ":M" & Target.Row).Copy Sheets("Munkalap2").Range("A" & usor) End If End Sub
Mivel beírást kell figyelni, a Worksheet_Change esemény kezelésével egyszerűen megoldható.
Nem tudom, az első kérdésedben miért adtál meg a valóságtól eltérő oszlopokat. Mire jó, ha duplán, triplán kell dolgozni 1 feladaton?
Igazából annyira lenne szükségem, hogy ha a "munkalap1"-en a G oszlopban egy cellát pirosra színezek (töltök ki), akkor az a teljes sor (A-M-ig) másolodjon át a "munkalap2"-be.
Folyamatosan feltöltve azt, egymás alá, és ismétlés nélkül.
Nem javaslom, hogy ezt is a korábbi módon oldd meg. Ezt inkább egy olyan makróban kellene, ami egyszer elindítva végigmegy teljes munkalapon, és másolja a pirossal jelzett sorokat.
Ugyanis, ha ebbe az eseménykezelőbe tennéd bele, akkor valahányszor visszamész egy ilyen sorra, másolatot készítene ezekről a sorokról. Javaslom, hogy készíts egy új modult, és oda másold be a következő makrót:
Option Explicit
Sub copypiros()
Dim forrutolsosor As Long, celutolsosor As Long, forrws As Worksheet, celws As Worksheet, i As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim usor As Long If Target.Column = 1 And Cells(lastrow, "A").Interior.ColorIndex = 3 Then Itt az "A"-t átírom, arra a cellára, ahol keresem a piros kitöltést Cells(lastrow, "B") = "Nem" Itt a "B"-t átírom, arra a cellára, ahova írja be a "Nem" szót. usor = Munka2.Range("B" & Rows.Count).End(xlUp).Row + 1 Itt a Munka 2-t átírom a másik lap nevére, ahova másolni szeretnék Range("A" & lastrow & ":M" & lastrow).Copy Munka2.Range("A" & usor) Itt a Munka 2-t átírom szintén átírom, viszont az utána lévő "A"-t nem igazán tudom mire kéne átírnom... End If lastrow = Target.Row End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim usor As Long If Target.Column = 1 And Cells(lastrow, "A").Interior.ColorIndex = 3 Then Cells(lastrow, "B") = "Nem" usor = Munka2.Range("B" & Rows.Count).End(xlUp).Row + 1 Range("A" & lastrow & ":M" & lastrow).Copy Munka2.Range("A" & usor) End If lastrow = Target.Row End Sub
Még egy olyan kérdésem lenne, hogy megoldható-e az esetleg, hogy azt a sort, ahol piros a kitöltése a cellának azt A-M oszlopig átmásolja magától egy másik lapnak az utolsó üres sorához?
Az előző makród:
Option Explicit
Public lastrow As Long, lastcol As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If lastcol = 1 Then ' Ha már mozdultunk, és az imént az A oszlopon voltunk
If Cells(lastrow, lastcol).Interior.ColorIndex = 3 Then
A Dim a, b, c, d, e forma automatikusan variable típusként foglal helyet a változóknak.
A Long típus egész szám, -2 147 483 648 és 2 147 483 648 között. Ebbe nem fér bele a kérdező által használt 0,39; 0,4; 0,8 és 0,81-es lebegőpontos érték.
Kezdem egy pontosítással. Az előbb azt írtam, hogy előfordul ilyen az Excelben. Ez hibás válasz volt, éppen Jimmy válaszából derült ki, hogy ez a jelenség nem Excel specifikus, és nem is VBA eredetű.
Annyiban mégis VBA eredetű, hogy feltehetőleg nem használod a VBA-ban a Tools-Options->Reqiure Variable Declarationt, ami minden kód elejére beszórja az Option Explicit parancsot. Ettől függetlenül is nagyon ajánlom. Segít az elütések ellen.
Vagy, ha használod, akkor "Dim a, b, c, d, e" formában deklarálod a változóidat, ami automatikusan Double típusúnak deklarálja őket.
Deklaráld őket Long típusúnak, és máris nem lesz kerekítési hiba.
Köszi a linkeket, akkor ezek szerint a kerekítés a megoldás. Az a baj, hogy több szálon vannak az értékek felhasználva és a végén összehasonlítás "dönti" el, hogy a csoportosított értékek összege megegyezik-e a teljes összeggel. Szóval a végső összehasonlításnál nem lehet gond egy ilyen beiktatott kerekítésből?
Szia Feri, ma reggel nekiduráltam magam, és elkezdtem átrágni magam az általad is elküldött leíráson. Az igazság az, hogy egy-két nappal előbb már én is megtaláltam, csak annyira utálom a Support office leírásokat (részleteket ld. alább), hogy az visszatartott attól, hogy belekezdjek. Jött a "majd-majd..." effektus.
Kezdem a megoldással: {Születési_idő @"yyyy.MM.dd"}.
Eddig a végtelen egyszerű megoldásig több mint egy óra olvasással, és sok próbálgatással jutottam el. És itt kénytelen vagyok egy kis offolással elmondani, hogy mi a bajom ezekkel a Support office leírásokkal.
Egyszerűen a használhatatlanságig zavarosak.
1. Elkezd a leírás magyarázni valamit, aztán abszolút nem odavaló példákat hoz fel. Pédául ebben a leírásban van egy cím: Mezőkódok szintaxisa. Itt leír 3 elnagyolt sort erről, majd példának leírja a Filenév megadását az élőfej/élőlábban (persze azt is hiányosan). Ezután teljesen más témára tér át.
2. Kicsit később jön a mező szerkesztésének leírása. Már kezdtem reménykedni, hogy ez használható leírás lesz,, de mit látok: Kattintson a jobb gombbal a mezőre, és kattintson a Mező szerkesztése parancsra. Megtettem, hát amit itt találtam, az biztos jó valamire, de nem a mező szerkesztés tanulmányozására. A leírás ajánlja hozzá a SHIFT f9 kombinációt, ami így nem működik. Valamit elront ugyan a mezőben, de nem volt kedvem belemélyedni az okok tanulmányozásába. És további magyarázat nincs, a leírás áttér az eredmények megjelenítésére.
3. Aztán végre jönnek a formátum kapcsolók nagyon részletesen. Csak éppen arról, hogy ezt miként kell alkalmazni a saját mezőimre vonatkozóan, arról egyetlen szó nem esik. Jó, itt mondjuk rájöhettem volna, hogy ahol a leírás a saját beépített DATE mezőnevét használja, ott nekem a sajátomat kell.
4. A szövegformázásnál többször is említi a MERGEFORMAT kapcsolót. A példák elnagyoltak, és az sem derül ki, hogy miféle formázást lehet ezzel megőrizni. Ráadásul az, hogy az én konkrét esetemben ez nem javítja, hanem éppen elrontja a szándékolt eredményt, az végképp nem derül ki.
Szóval ezért kellett most több mint egy óra a megfelelő (egyébként végtelenül egyszerű) formázás megtalálásához, és ezért - nemcsak az egyéb elfoglaltságaim miatt - halogattam a dolgot mostanáig.
De azért nagyon köszönet az úton való elindításért, és elnézést a hosszú panaszkodásért.
Egy érdekes "jelenségre" lettem figyelmes, amit nem igazán tudok megoldani és még abban sem vagyok biztos, hogy én bénáztam el valamit. Megpróbálom amennyire lehet leegyszerűsíteni. Szóval lényegében két cella összegét kell kivonni egy harmadik cella értékéből. Működik is rendesen, de 2 esetben nem. Vagyis, ha a 0,4 és 0,8 a két kivonandó érték és 1,2 amiből ki kell vonni, az excel 0 helyett -2,22045E-16 ot ad eredményül. Ez a hiba jön még 0,81 és 0,39 nél is de fölötte (0,82+0,38) és alatta (0,79+0,41) már nem. Mi lehet a gond? Találkozott már valaki hasonlóval?
Ha azt szeretnéd, hogy a táblázatodon menjen végig a program, és végezze el a "Nem" beírogatását, akkor xxxxxxxx megoldása tökéletes.
Ha viszont azt szeretnéd, hogy beírás közben is működjön a figyelés, akkor van egy kis gond. Lehet írni olyan makrót, ami egy cella tartalmának változására reagál, de sajnos a szín esetében ez nem működik.
Erre a következő áthidaló megoldást ajánlom. Az alábbi programot szúrd be a vizsgálni kívánt munkalap kódjaként (A technika:Alt + F11 megnyitja a VBA képernyőt. A bal oldalon látod a munkafüzeted lapjait. Egérrel fölé állsz a kívánt munkalapnak, majd jobb gomb után klick a View Code szövegre, és a mellette megnyíló nagy ablakba bemásolod a kódot. Aztán Alt + F11-el visszalépsz a munkalapra):
Option Explicit
Public lastrow As Long, lastcol As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If lastcol = 1 Then ' Ha már mozdultunk, és az imént az A oszlopon voltunk
If Cells(lastrow, lastcol).Interior.ColorIndex = 3 Then
Cells(lastrow, lastcol + 1) = "Nem"
End If
End If
lastrow = Target.Row
lastcol = Target.Column
End Sub
A makró következőt csinálja: Amint elhagysz egy cellát, elvégzi a szín vizsgálatot. Ha az az elhagyott cella az A oszlopban volt, akkor kiírja az előző cella mellett a B oszlopban a Nem-et.
A Select kiválasztja az objektumot, az Activate aktivál egyet a kiválasztottak közül. Kiválasztani többet is lehet egyszerre, de azok közül mindig csak egy aktív.
A makrórögzítő előszeretettel használja mindkét metódust, ezért aztán gyakran megjelennek az ember által írt makrókban is, de a futáslassításon és a képernyő-villogtatáson kívül különösebb értelme nincs egyiknek sem. Bármilyen objektum használatát biztonságosabb és hibamentesebb, tehát célszerűbb teljes hivatkozáson keresztül végezni, mint úgy, hogy Selection vagy Activecell, ActiveWorksheet, stb.
Az Activate esetleg hasznos lehet bizonyos esetben, amikor mondjuk aktiválsz egy munkalapot, mert akkor onnantól kezdve munkalap előtag nélkül használhatod a Range hivatkozásokat.
Szeretnék kérdezni Excel makró vagyis Excel programozás terén.
Arra szeretnék választ kapni, hogy mi a különbség az activate és a select metódus között? Mind a kettő kijelöli az objektumot. Nem?
A másik kérdésem az lenne, hogy melyiket mikor kell használni a Worksheets és a Sheets objektumokat?
Ha például az írom hogy Worksheets.add after:=Worksheets(Worksheets.Count)
Vagy így Sheets.add after:=Sheets.count.
Mert sajnos amit tudok - bár nem sokat - azt is autodidakta módon tanultam sajnos nem tanultam iskolában teljes Excel programozást. Bár jó volna ha lenne valaki aki megtanítana. De tudom hogy ez pénzbe kerül.
Azt te tudod miért kell közvetlen excel, de egyébként SQVI-ben lekérdezhető bármelyik tábla, akár relációval is. Ezt pedig azonnal át tudja adni az excelnek.
Láttam már ilyet (és használtam is) megírni sajna nem tudom. Az excelbe kell egy logon script, ami nem bonyolult. Viszont ahhoz hogy le tudj kérdezni bármit tudni kell a táblák neveit és a bennük található mezőkét is, ami azért szép számmal van (és nem árt ha van jogosultságod ezeket megnézni mondjuk SE12-ben). Egy sablont ráhúzni az egészre csak részben lehet.
Magyar 2010-es excelben a Darabhatöbb függvényt használhatod. Egyik vizsgálandó oszlop az id lista, kritérium az kérdéses id, másik vizsgálandó oszlop a belépés dátuma, kritérium az adott nap. Ez így megmutatja, hogy hányszor lépett be a felhasználó azon a napon.
pl. A oszlop az id-ket tartalmazza, B oszlop a dátumokat. C1 cellába írod a keresendő id-t, C2 cellába a napot.
Tehát nem tudom milyen függvénnyel kéne megoldani, hogy van egy több oszlopos táblánk. De igazából ehhez csak két oszlop szükséges szerintem. Az egyik egy id oszlop ahol a kódok, a másikba pedig dátum szerepel. Na és nekem olyan kellene, hogy a függvény leszűrje azt hogy 1 bizonyos id-val léptek e be egy nap többször, illetve hányszor?
A másik fórumon, ahol 1 órával előbb tetted fel a kérdést, írtam Neked 2 makrót. Az első simán transzponál, a második az eredeti értékek bal oldali 5 karakterét másolja egymás alá.
A BAL(TRANSZPONÁLÁS(Munka2!B3:H3);5) képlet hibás.
Vannak itt nálam sokkal okosabbak, de az is egyszerű, ha notepadba másolod száz sorba (csak copy/paste, pillanatok alatt megvan), majd mindet kijelölve másold vissza az Excel oszlopod első sorába.
Ezt a függvényt, hogy tudom több száz soron át ismételni, manuális bevitel nélkül? Sorokat próbálok átalakítani oszlopokká.
=BAL(TRANSZPONÁLÁS(Munka2!B3:H3);5)
A Munka2 B3 és H3 oszlop adatait rakja föggőlegesen egymás alá... Minden második sorból kellene hivatkozni..... Tehát a fenti B3-H3 után B5-H5 majd B7-H7 és így tovább következik...
UI: A függvény sajnos csak crtl+shift+enter esetén tömbként működik....
Így van. A tranzisztortól a mikrochipig sem egy csettintéssel jutottak el, vagy akkora munkával, ami egy ilyen fórumon az önkéntes segítségnyújtás kereteibe belefér.
És főleg nem olyan emberek, akik a tranzisztor mibenlétét sem voltak hajlandók megérteni.
Természetesen megoldható. Nem kell más hozzá, csak írj egy jó programot a honlapodnak, ami emulálja az Excel összes funkcióját, a VBA környezetet is beleértve. Ha ez megvan, utána már gyerekjáték lesz.
A korábbi válaszokat elolvastad? Vagy úgy gondolod, mint az egyszeri utas a zalaegerszegi gyorson, hogy ha azt mondjuk, hogy "léccilécci", akkor Debrecenbe fog menni?
Megtaláltam a korábbi (több mint egy évvel ezelőtti) sikeres próbálkozásomat, amire emlékezve írtam, hogy lehet a mezőt formázni:
Próbáld így:
A születési idő mezőre jobb egérgombbal rákattintasz, kiválasztod a mezőkódok váltást, majd bemásolod a vastag bordó szöveget úgy, hogy a kapcsos zárójelen belül legyen:
Hát éppen ez az, ami nekem nem jön össze a 2010-es verzióval sem. Készítettem egy nyúlfarknyi körlevelet itt, és egy még nyúlfarknyibb forrásfájlt itt. Letoltés után a docx elvileg automatikusan rákérdez, és nyitja a hozzátartozó excel táblát. És a levelezés->eredmény megjelenítés nekem az amerikai formátumot hozza.
Olvastam valahol arról, hogy a 2010-es Excelnek milyen bonyolult mezőkód formázó parancsai vannak, de nem tudom, hol lehetne elérni őket.
A 2010-es World-ben lehet állítani a körlevélbeli dátummező formátumát, amit akkor is megtart, ha az excelből jön a dátum. (Legalábbis nekem sikerült már ilyen.)
A következő gondom nem feltétlen Excel, bár érinti azt. De egyrészt nincs olyan fórum, ami élő és az Office-on belül készítendő körlevelekkel foglalkozik, másrészt az Excel adatforrásokat érinti ezért kénytelen vagyok itt kérdezni.
Szóval körlevelet írok WORD-ben (Doc, vagy Docx teljesen mindegy, működik). Ugyanakkor már évekkel ezelőtt tapasztaltam, hogy Word táblázatból nem igazán tudom kezelni a körlevél címzettjeit, és az adatmezők beszúrását a levélbe (ez lehet, hogy az én hibám), Excel táblából viszont igen. Azóta az adatforrást Excelben kezelem. Aztán egyszer beleütköztem egy olyan problémába, hogy a dátumokat nem hajlandó az én választásomnak megfelelően beolvasni, hanem minden beállítási próbálkozás ellenére amerikai stílusban hónap/nap/év formában olvassa be azokat az adatmező helyére.
Hosszas nyomozással kiderítettem, hogy az adatforrás fájl megnyitásakor beállítható, hogy kérdezzen rá a megnyitás módjára, és itt az "MS Excel munkafüzetek DDE által (*.xls)" opcióval kell megnyitni az Excel táblázatot adatforrásként. És így működik. Vannak ugyan korlátai, például az Excel táblában csak egy munkalap lehet, de legalább jól használja az adatokat.
A hiba jelentkezésekor még – szerencsére – Office 2003-al dolgoztam, másképp soha nem tudtam volna rájönni a megoldásra.
Amióta áttértem az újabb Office verziókra (2007 vagy 2010), azóta az xlsx fájlt szeretném használni adatforrásnak. Viszont ezeknél kizárólag az "OLE DB adatbázisok" opcióval engedi megnyitni a fájlt. Igaz ugyan, hogy itt már lehetne egy-egy körlevélhez munkalapokat is kiválasztani, de a dátumformátumnál nem tudok megszabadulni a hónap/nap/év formától. Aztán vannak még egyéb furcsaságai is a mezők kezelésének ebben a formátumban, de azzal addig nem is foglalkozom, amíg ezt meg nem oldom.
A lényeg, hogy hiába az újabb Excel verziók, az adatforrás használatához kénytelen vagyok a 2003 verzióhoz visszanyúlni.
Tudja valaki, hogy lehet megoldani a dolgot a 2007, vagy 2010-es verzión belül?
Set accountlist=Range("A1", Range("A1").Offset(Range("A" & Rows.Count).End(xlUp).Row - 1, 1))
Az accountlist range az A-B oszlop azon részét tartalmazza, amelyben vannak az adatok (tehát 2 oszlopot, ha csak egy oszlopot szeretnél, akkor a végéről a ,1 elhagyható, vagy ,0 kell helyette.
De ennél szerintem egyszerűbb a két oszlop megfogása így:
Set accountlist=Range("A1", "B" & Range("A" & Rows.Count).End(xlUp).Row)
Ha itt megtartod a két oszlopot, akkor a további részben kell kis változtatás:
For Each i In accountlist.Columns(1).Cells
If i.Value = Sheets("Data").Range("A1").Value Then Dest.Value=range(i,i.offset(0,1)).Value Set Dest = Dest.Offset(1) End If
vagy
For Each i In accountlist.Rows
If i.cells(1).Value = Sheets("Data").Range("A1").Value Then Dest.Value=i.Value Set Dest = Dest.Offset(1) End If
Köszönöm! Az offset paramétereit ismerem, az volt a gond, hogy én a "Set accountlist = Range("A1", Range("A" & Rows.Count).End(xlUp))" résznél próbáltam offszetelni.
Valószínűleg azt nem kalkuláltad, hogy az offset-nek két paramétere van, sor és oszlop.
Ezért i.EntireRow.Copy helyett range(i,i.offset(0,1)).copy az első két oszlopot fogja kimásolni. (A Set Dest=Dest.Offset(1) azért működik, mert egy sorral mész lejjebb az oszlop változtatása nélkül.)
De egy pár dolgot még lehetne egyszerűsíteni rajta.
A másolás - irányított beillesztés helyett működik az értékadás pl.
Set Dest=.Range("A2") helyett Set Dest=.Range("A2:B2")
Ezután az
If i.Value = Sheets("Data").Range("A1") Then i.EntireRow.Copy Dest.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Set Dest = Dest.Offset(1) End If
programrész helyett helyett:
If i.Value = Sheets("Data").Range("A1") Then Dest.Value=range(i,i.offset(0,1)).Value Set Dest = Dest.Offset(1) End If
Na van még egy gondom és nem igazán tudok rájönni a nyitjára. A kód működik, de kellene bele egy olyan módosítás, hogy ne entirerow legyen, hanem csak A és B oszlop. Offset-tel próbálkoztam, de az valamiért nem akart úgy működni ahogy én szerettem volna. Mit nem látok?
köszi
P.
Sub Copy_accounts2() Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Dim accountlist As Range Dim i As Range Dim Dest As Range Sheets("ax 3.0 főkönyvi adatbázis").Select Set accountlist = Range("A1", Range("A" & Rows.Count).End(xlUp)) With Sheets("new accounts") Set Dest = .Range("A2") End With For Each i In accountlist If i.Value = Sheets("Data").Range("A1") Then i.EntireRow.Copy Dest.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Set Dest = Dest.Offset(1) End If Next i Worksheets("data").Activate Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub
Már csak egy képlet hiányzik a megvalósításhoz, de arra nem tudok sehogy sem rájönni. Feltételes formázásról lenne szó.
Van egy excel táblám, aminek egyik oszlopában legördülő listából lehet kiválasztani a kategóriákat. Én azt szeretném, ha kiválasztok egy kategóriát, akkor az egész sor színeződjön be adott színre. Azt már megtaláltam, hogy a cellát hogyan lehet beszínezni, ha adott szöveg szerepel benne (feltételes formázás/cellakijelölési szabályok/szövegtartalom), és képlettel szeretném ezt kiterjeszteni az egész sorra, ami tartalmazza adott szót.
például:
fejléc: fellépő neve, időpont, műfaj. A műfajnál van a legördülő lista. Pl. ha "zene" kategóriát állítok be azt szeretném, ha az egész sor zöldre váltana.
Ha eddig jól kutakodtam, akkor ide kellene beírni egy képletet:
Na ezt észre sem vettem. Automatikusan A2:C6-nak olvastam.
A következő (#20217) valóban megoldotta rejtélyt. Elfelejtettem, hogy én rendszerszinten tizedespontot használok, ahol vessző van, az nálam szöveg. A javítás után már működik. Köszönöm.
Semmi más baja nem volt a fájlodnak, csak annyi, hogy a B oszlopban nem számként, hanem szövegként vannak az értékek. Ha átalakítod számmá, azonnal rendbe jön a képlet eredménye.
Ha bemásolod a magyar excel INDEX hivatkozás formátum súgójában levő táblázatot, akkor pontosan úgy működik, ahogyan írják.
Egyetlen "bibit" látok:
"Az oldal egyik példája szerint az =SZUM(B2:INDEX(A2:C6;5;2)) képlet eredménye:
A B2 cellánál kezdődő és az A2:A6 tartomány ötödik sorának és második oszlopának metszéspontjában végződő tartomány értékeinek összege, azaz B2:B6 összege (2,42)"
A magyarázatban rossz tartományról beszél, mivel egy db oszlopnak nem lehet második oszlopa...
Az INDEX függvény hivatkozást ad eredményül; más képletek ennek megfelelően kezelik. A képlettől függ, hogy az INDEX függvény által szolgáltatott érték értékként vagy hivatkozásként kerül-e felhasználásra. A CELLA("szélesség";INDEX(A1:B2;1;2)) képlet például egyenértékű a CELLA("szélesség";B1) képlettel.
Ez nagyon megtetszett, és rögtön ki is próbáltam, az általuk adott példában. A példában a következő minta szerepel. Mivel itt az indexen táblázatot bemásolni nem tudok, ide tettem:
Az oldal egyik példája szerint az =SZUM(B2:INDEX(A2:C6;5;2)) képlet eredménye:
A B2 cellánál kezdődő és az A2:A6 tartomány ötödik sorának és második oszlopának metszéspontjában végződő tartomány értékeinek összege, azaz B2:B6 összege (2,42) *
Viszont amikor kipróbáltam nekem 0 értéket adott.
Amikor kiveszem belőle az INDEX-et, az =INDEX(A2:C6;5;2) képlet 0.59-et ad, ami megfelel a B6 értékének, csak éppen mintha mégsem lenne igaz, hogy a SZUM függvény nem az értéket, hanem a címet veszi figyelembe.
Szerintetek én értek félre valamit, én rontok el valamit, vagy a fent hivatkozott működési mód nem igaz Excel 2010 alatt?
*/Megjegyzés: Afenti link példájának szövege Chrome alatt olvashatatlan volt, teljesen szétesett nálam a képernyő. Kénytelen voltam Explorerrel nyitni a linket. Úgy olvasható volt/
Sziasztok! Szükségem lenne egy kis segítségre. QR kódot kéne raknom az excelbe. De Úgy hogyha változtatok a benne lévő cellának az adatain akkor a QR kódot autómatikusan megváltoztassa. Vonalkóddal csináltam már ilyet. De QR kódra nem találok megoldás. Nemhiszem hogy sima Font elég lenne hozzá. Viszont nemtudom hogy a letölthető addon-ok nem kamuk-e vagy ilyesmi. Cégnél kéne. Egy addon-t próbáltam de az nem működik. Semmitsem csinál.
A válasz benne van a kérdésedben. Nem "Makróbarát Excel-munkafüzet (*.xlsm)"-ként hanem "Excel-bővítmény (*.xlam)"-ként kell elmenteni. A mentés helyét automatikusan át is állítja az Excel AddIns könyvtárára. Ezután a bővítmények között ki kell pipálni, ha az nem történik meg automatikusan.
Bocs, a délutániban elfelejtettem, hogy a Backslash-eket elnyeli a motor. Akkor a másolás helye (ahova a *.xlam formátumban mentett programot tenni kell): C:\Users\<felhasználónév>\AppData\Roaming\Microsoft\AddIns
A bejelöléshez meg Beállítások->bővítmények->Ugrás után jutsz el. Ott meg kell, hogy jelenjen a függvényed, és pipálhatod.
Bonyolult problémával fordulok hozzátok, bár nektek valószínűleg nem okoz nagy fejtörést. Teljesen megakadtam az alábbi feladattal.
Szeretném ha csatolt képeken látható Munkalap elnevezésű oldal, forrástábla érték mezőiben megjelenne a Forrás lap oldal fehér mezőiben szereplő értékek megfeleője, de úgy, hogy a Munkalapon szereplő adatok És Ha összevetéssel szintén azonosítva lenne a Forrás lapon.
Pl. Ha Munkalap Leírás oszlopában szereplő szöveg és A érték mezőben lévő szám és B érték mezőben lévő szám megegyezik a Forrás lap Leírás oszlopban szereplő szöveg valamelyikével és A érték oszlop és B érték oszlopok C2:M2-ben található számaival, akkor a Munkalap Forrás érték mezőiben megjelnjen a Forrás lap C3:M11 mezőiben szereplő társított szám! Bonyolult? Remélem érthetően fejeztem ki magam.
Másold a függvényt C:Users<felhasználónév>AppDataRoamingMicrosoftAddIns könyvtárba, majd az Excelben a beállítások->bővítményeknél jelöld be, hogy a bővítményt használni is szeretnéd.
Excel 2013-ban szerettem volna írni egy saját függvényt Function...end Function de az a problémám, hogy ha elmentem makróbarát munkalapként akkor az excel ad neki egy *.xlsm kiterjesztést a régi *.xlam kiterjesztés helyett. De ha szeretném betölteni mint bővítményt - már mint az valami.xlsm fájlt - akkor nem látható a függvényeim között. hogy oldható ez meg?
Előre is köszönöm.
Még egy kérdés. makróban mit jelent a Currentregion. select utasítás?
Igen, a program adataiból az látszik, hogy végig kell mennie a teljes tartományon az Excelnek, hogy megtalálja az adatok első, illetve utolsó folyamatosan kitöltött celláját. Hiszen, ha minden cellában tárolná a tartomány egyes adatait, annak valóban nagy memóriaigénye lenne. Nem is beszélve arról, hogy egy adott cella tartozhat egyszerre több tartományhoz is.
Viszont az Excel a tartományhoz tartozó utolsó folyamatosan kitöltött adat megkereséséhez feltehetőleg kénytelen egyenként kiolvasni az adatokat, hogy megállapítsa, van-e értéke, vagy sem. Hiszen erről semmilyen pointer nem ad információt. És feltételezem, hogy maga a kiolvasás lehet a leglassúbb része a folyamatnak.
Úgy tűnik, nagyjából arányos az End(xlDown) végrehajtásának ideje az átugrandó cellák számával.
Kicsit módosított programom így néz ki:
Sub ugrálás() Dim t As String, i As Long, j As Long, r As Range For j = 1 To 10 t = Timer Set r = Range("B12") For i = 1 To 30000 Set r = r.End(xlDown) Set r = r.End(xlUp) Next Range("B" & j) = CSng(Timer) - CSng(t) Debug.Print j DoEvents Next End Sub
Az A12-ben kezdődő tartomány 500 soros, a B12-es 5000.
Az A12-ből 30000 ugrálás átlag 0.677 sec, B12-ből 5.694 sec
Ami nagyjából azt jelenti, hogy az End(xlDown) lényegében for-next ciklussal keresi meg az utolsó cellát az oszlopban...
Kiindulva a pointeres munkahipotézisedből, eszembe jutott, hogy egy adott cellához tartozó memóriahelyen esetleg nem csak az eggyel fölötte lévő cella memóriacímét kell tárolni, hanem más dolgokat is, amelyek megváltozhatnak egy sor beszúrásával. Pl. azt, hogy melyik a tartomány első és utolsó cellája. Amikor ugyanis az End(xlUp) és End(xlDown) metódusokat használjuk, az Excel pillanatok alatt megtalálja, hogy melyik az alsó és fölső cellája a tartománynak. Írtam egy kis tesztprogramot, ami 100 000-szer ugrál ide-oda a tartomány teteje és alja között. Ha minden cellában benne van, hogy hová kell ugrani, akkor időben nincs különbség 600 és 600 000 cella átugrása között. Most fut...
600 cellával kb. 19 másodperc volt a futási idő, 600 000 cellával 15 perce fut, és még semmi visszajelzés. Ha az idő arányos a köztes cellák számával, akkor 5 óra múlva tán lesz eredmény :)
Jimmy, természetesen igazad van. Ezt én is látom, ugyanebből következtetve.
Ezért is fogalmaztam óvatosan: "Ebből számomra az is következik, hogy nem járhatok messze az igazságtól azzal a sejtésemmel, hogy a sorok beszúrásánál és törlésénél valamilyen más technikát alkalmaz az Excel az adatok fizikai átmásolgatásához képest."
Hogy mit, azt nem tudom. Csak feltételezéseim, vagy inkább sejtéseim vannak.
Az egyik ilyen erős sejtésem, hogy egy nagyméretű Excel táblát - a maga cellánkénti rengeteg tulajdonságával - nem tarthat a memóriában az Excel. Viszont egy 1-2 Gigabájtos memóriában nem lehet nagy gond néhány millió cella helyének tárolása mondjuk cellánként 4 byte igénybevételével.
Ehhez kapcsolódva persze biztos, hogy vannak ezen túlmenő teendők is ezekkel a mutatókkal. Ezt a kísérleteim is igazolták, azaz hogy a "mozgatandó" sorok számával közel arányosan nő a beszúrás/törlés időigénye.
Ugyanakkor nem tudom pontosan, hogy a memóriaműveletek sebessége hogyan viszonylik a HDD írási és olvasási sebességéhez. Feltételezem, hogy több nagyságrendi a különbség. Ebből próbálok laikus módon arra következtetni, hogy, ha a sorok beszúrását és törlését a memóriában lévő pointerek mozgatásával végzem el, az nagyságrendekkel gyorsabban történik a merevlemezen történő tényleges adatmozgatáshoz képest. Aztán a tényleges "adatkiírás" (lehetséges, hogy még itt is csak a 4 byte méretű mutatók kiírása szükséges már), csak a mentéskor történik. (Ezt abból a feltételezésből kiindulva gondolom, hogy amikor egy-egy cella tartalma a számítások során megváltozik, annak rögtön kiírásra kell kerülnie fizikailag.) Szintén feltételezem, hogy a mutatók listájának kiírása miatt látszik időigényesebbnek a fájl beolvasása és kiírása, de mégsem annyira, mintha a teljes adatbázist kellene kiírni.
Persze mindez csak találgatás részemről. A kísérleteket azért végeztem el, hogy igazoljam az eredeti hipotézisemet, mely szerint a sorok/oszlopok beszúrása és törlése nem a leglassúbb művelete az Excelnek. Sőt! Nagyságrenddel gyorsabb, mint az adatok puszta beolvasása a merevlemezről.
Mindezek ellenére nagyon örülnék, ha sikerülne a Microsofttól, vagy más hasonló fejlesztőtől információhoz jutni arról, hogy mi a titka az Excel sokszor elképesztő sebességének.
Viszont magasabb sorszám esetén lényegesen kisebb idő a beszúrás, tehát valahogy mégiscsak függ az alatta lévő adat mennyiségétől. Abban a pointeres verzióban nem függne.
Szia Delila, még arra lennék kíváncsi, hogy lefuttattad-e ugyanezzel az adatállománnyal a másik modulban lévő - feldolgozási sebességet mérő - makrót. Amelyik nem tesz mást, mint végigmegy a 2.6 millió adaton, beolvassa őket egy változóba, aztán nem foglalkozik velük. Mert az utóbbinak nálam több mint kétszer annyi volt az időigénye, mint a táblázat elejére történő sor beszúrásnak 1000-szer lefuttatva. Pedig elvileg minden egyes beszúrásnak mind a 2.6 millió adatot arrébb kellene pakolgatnia, ami ezerszer megismételve összesen 2.6 milliárd adat átpakolását jelentené, ami szinte csillagászati szám. És mégis az utóbbi a gyorsabb nálam.
Összeállítottam a statisztikát a fájljaid alapján. Nem merek messzemenő következtetéseket levonni, csakis egyet: az én gépem egy leheletnyivel gyorsabb. :D
Egymás mellé szerettem volna tenni a táblázatokat, de akkor hiányosan jelennek meg.
Péntekre ígértem, hogy beszámolok az Excel sorok beszúrásával és törlésével kapcsolatos kísérleteimről, de a dolog egy kicsit tovább tartott. Most viszont elkészültem vele, és érdekesek az eredmények.
A program másik makrója nem tesz mást, mint végigmegy a teljes táblázaton, és a fenti táblázat 2.6 millió adatát beolvassa egy változóba. És ennek az időigényét is lemértem.
Itt csak a végső következtetéseimet írom le. Amennyiben nem hibáztam el alapvetően valamit a kísérleteimben, akkor megállapítható, hogy:
A sor beszúrás és törlés nemhogy lassú művelet az Excelben, hanem sokszorosan gyorsabb a cellák egyszerű kiolvasásánál.
Ebből számomra az is következik, hogy nem járhatok messze az igazságtól azzal a sejtésemmel, hogy a sorok beszúrásánál és törlésénél valamilyen más technikát alkalmaz az Excel az adatok fizikai átmásolgatásához képest.
Habár lehet, hogy van az MS Office-nak is valami ilyen felhőalapú verziója, csak nem terjedt nagyon el, de akkor is azzal a verzióval kell rendelkezned, nem a normál Excellel.
Én találkoztam ilyennel. Sőt! Ennél többet is is felhasznált, ráadásul több lapon csinálta ezt és minden cellába egy függvényt tett.
Eredmény: Olyan volt a táblázat mintha az elektronok mankón járnának tehát használhatatlanul lassú ami különösen régi gépeken feltűnő. Alapvetően azért van mert a memória a helyhiánya miatt állandóan a HDD-hez fordult mert a lapozófilébe kellett tárolnia a memóriában el nem férő adatokat. Persze a töménytelen számítás is leköti a gép erőforrásait.
Összességében: az ilyen típusú táblázat programozás használhatatlan munkát eredményez nem csak a túlságosan sok oszlop miatt hanem az operátori kezelhetetlenség miatt. Az ilyen típusú adathalmazt érdemes több lapra tördelni és a számítási, kezelési problémákat makróra bízni amik célzottan csak a szükséges cellákban dolgoznak ezért a táblázat kezelése nagyon felgyorsul.
Ha onnan letöltik, és a saját gépen futtatják, akkor működni fog.
Ha úgy érted, hoy a webszerveren, akkor meg makró nélkül sem fog "működni"? mert a webszervereken nincs Excel, a táblázatod csak egy fel- és letölthető file.
Van egy olyan szempont is, hogy az Office Pro 3x vagy 4x annyiba kerül, mint a normál verzió, és a cégek nem feltétlenül szeretik felvállalni a plusz költséget csak azért, hogy az Access elérhető legyen. Így aztán a felhasználók nagy része csak Excelben képes gondolkodni.
A lehetőség megvan, használni nem kell. Ahogy mondod, a 2^16 sor azért nem mindig elég, ebbe én is gyakran belefutok. Ugyanúgy lehet, hogy valakinek a 256 oszlop nem elég, csak mi még nem találkoztunk ezzel. És ha nem tud programozni, akkor lehet, hogy inkább megoldja Excelben.
ez hogy jött ki? Egyébként nem arról beszéltünk, hogy valaki a teljes táblázat összes lehetséges celláját kitölti, hanem hogy van-e, aki nagyon sok oszlopot használ. Ilyen adathalmazokat el tudok képzelni, de lehet, hogy én ezt már nem Excelben dolgoznám fel.
Ha a RAM-od engedné, tárolnál egyetlen fájlban 15.000×10^6 db adatot? Vagy inkább olyan alkalmazást keresnél, ami a wincsin tárolja az adatokat, és csak annyit jelenít meg, amennyire éppen szükséged van?
Ezeken én is gondolkoztam, nem tudom a választ. Sőt ötletem sincs, hogy én hogy csinálnám meg, ha az én feladatom lenne az adatszerkezet megtervezése. Csak egyben vagyok biztos. Ha a pointerek alkotta láncon egyenként is kell végighaladni A-tól Ad-ig, majd ezen belül 1-től a 19632. sorig, az még mindig gyorsabb, mintha egy-egy sor beszúrásakor kellene a mögötte lévő 20000, vagy 100000 sor minden egyes adatát fizikailag átmozgatnom.
Egyébként most méregetem a sor beszúrási és törlési időket egy 100 000 soros táblázatban, attól függően, hogy melyik sor elé (a táblázat elején, vagy a végén) szúrogatok be, illetve törlök sorokat. Az eredmények érdekesek. Estére beszámolok a tapasztalataimról.
van egy 800 soros oszlopom, amiben ilyen formátumban ( szöveg) szerepelnek számok: 00:02.446. szeretném ezeket átmásolni egy másik oszlopba, úgy , hogy az első két szám és kettőspont ne menjen át. ez legyen az új oszlopban: 02.446. és, hogy ne kelljen ezt egyesével 800 sorral megtenni. valójában a végső cél az lenne, hogy lehessen műveleteket végrehajtani ( összeadni, kivonni) ezekkel a számokkal, mert egyelőre - talán a kettőspont miatt - nem engedi.
A szoftver biztosítja mindenkinek a lehetőséget, hogy akár hülyeséget is csináljon. A RAM már más kérdés.
(Amikor 1985-ben bekapcsoltam a Commodore 64-et, és kiírta nekem, hogy 38911 BASIC bytes free, akkor én is úgy éreztem, hogy ezt teljes képtelenség kihasználni. :-P)
Nálam 2003-ban 1:45, 2007-ben 2:03 alatt futott le a fájlod. Nics olyan "gépparkom", mint Neked, egy szál 32 bites PC áll a rendelkezésemre, ahol 2003, 2007, és 2010 van telepítve.
Instr-rel, nem Trim-mel kerestetem meg a kért tartalmat, mert a Trim nem veszi be a ":"-ot, amit 6 oszlopban kell kerestetni.
Az Excel mindkét verziójában a saját, xlsm kiterjesztésű fájlomat futtatom. Mivel semmi cifraság nincs benne, csak adatok, a 2003 simán megeszi egy rövid konvertálással.
Szia Feri, azt írod, hogy "Az insert row, column rendkívül lassú a 2010-ben is", máshol pedig azt, hogy "egész sort/oszlopot nem túl egészséges kezelni benne".
Ismerem ezt a véleményedet, de a legnagyobb tisztelet ellenére (lévén, hogy Excel ismereteid sokszorosan meghaladják az enyémet), ebben a dologban vitába kell szállnom veled.
Próbálgattam régebben is, most is, és az a tapasztalatom, hogy az Excelnek mindegy, hogy egy sor beszúrásakor egy sort, tízet, vagy százezret kell "hátratolnia". Gyakorlatilag értékelhetetlen az idő, amire ehhez szüksége van hozzá.
Nem tudom, van-e valamilyen szakirodalom ezzel kapcsolatban, de arra tippelek, hogy azért nem tapasztalom az általad említett időigényt, mert az Excel táblát a szerzők talán nem úgy tervezték, mint egy olyan táblázatot, az egyes adatoknak fix helyük van. Mint ahogy számunkra a táblázat megjelenik. Ebbe az esetben egy új sor beírásához valóban az összes mögötte lévő adatot el kellene csúsztatni beszúráskor, és vissza kellene csúsztatni törléskor.
Ha rám bízták volna az Excel megtervezését, én biztos, hogy egymáshoz láncolnám az adatokat, tehát mondjuk a B1 cella nem egy fizikailag fix hely, hanem az A1 cella tartalmazza az ő helyét (pontosabban, hogy melyik sorban van). A B1 meg C1 celláét. És ha a B1-et törölni kell, akkor egyszerűen a B1-ből kiveszem a C1-re mutató pointert és átteszem az A1-be. És akkor mindegy, hogy hány ezer sor van mögötte.
Jó, ez kis egyszerűsítés, hiszen még az oszlopok helyét is kezelni kell hasonlóan, de azt is csak a láncolás technikájával.
Nagyon valószínűnek tartom, hogy az Excel szerzői is hasonló megoldásokat alkalmaztak hatalmas táblázatok fizikai mozgatása helyett.
Érdekelt a tegnap esti felvetésed a különböző verziók sebességének különbsége kapcsán. Gondoltam, tesztelem egy kicsit.
Létrehoztam egy teszt munkafüzetet. 5000 sorból áll, és minden sorban a G oszlop tartalmaz "—", az O oszlop pedig "-" karaktereket. Elkészítettem 2003 alatt, és konvertáltam 2007-re. És a nagyon egyszerű program végigmegy ciklusban a sorokon, és az O oszlopot eltolja 6 cellával, majd a G oszlopot 2 cellával.
Azt akartam tesztelni, hogy a cellaeltolások valóban okozhatnak-e ilyen időkülönbséget a futási időben.
Az eredmények: A legmegbízhatóbbnak azon a laptopomon való futást tartom, ahol egymás mellett van az Excel 2003 és 2007-es verziója, hiszen itt nem kavarhatnak be egyéb különbségek.
A programokat többször is lefuttattam a VBA képernyő alól, így a képernyőfrissítés nem zavart be (Lehetett volna a programban is letiltani, de csak későn jutott eszembe, és így is elfogadhatónak tartottam a tesztet). Az egyes lefutások megismétlései között legfeljebb 5-6 másodperces eltérések voltak, így egy hozzávetőleges középértékeket írok.
Az eredmények: A fent említett laptopon Excel 2003 alatt úgy az xls, mint az xlsm változat 01:20 körüli idő alatt futott le, Excel 2007 alatt 00:50 körül.
Egy asztali gépen Excel 2010-et használok, így azon csak ezzel tudtam tesztelni. Itt már megfordult a különbség. Az xls változat volt gyorsabb 00:11 körüli eredménnyel, szemben az xlsm 00:18-as értékével.
A fentiek 32 bites rendszerben működtek. Megpróbáltam tesztelni a sebességet egy 64 bites gépen Excel 2007 alatt. Ott mindkét változat 02:25 +/- 00.05 között futott, hol egyik volt gyorsabb, hol a másik. Ennél azért nem biztos, hogy a 64 bit a bűnös. A gép egyebekben jól teljesít, elképzelhető, hogy valamelyik háttérben futó program zavart be, és okozta a 2 és fél perc körüli futásidőket.
A lényeg, hogy nem tartom valószínűnek, hogy a cellák beszúrása okozott akkora különbséget a 2007-es változat hátrányára, mint amit tapasztaltál. Esetleg egy másik parancs? Vagy lehetséges, hogy az eltérő futásidők két különböző gépről származnak, esetleg ugyanarról a gépről, de egy rendszer újratelepítés után?