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.
adott pont kijelölve, jobbegérgomb - adatfelirat felvétele - adatfelirat formázása - felirat beállítása - felirat tartalma - itt adatsor neve bepipálva, az eredmény a következő:
a teljes adatsor odarakja, pedig én csak az egy ponthoz tartozót szeretném
jobb gomb a ponton, adatfelirat felvétele, majd duplaklikk az adatfeliraton és ott lehet választani, h mi jelenjen meg. (Adatsor neve, kategória, stb...)
Libreoffice-ban annyit meg lehet csinálni, hogy az értékek elé bepakolja a nevet, de az így módosított fájlt excelben megnyitva kiírja a program, hogy a tartalom elveszett.
Távolbalátással sajnos nem fog menni, csak próbálkozni tudok:
Tuti, hogy a rendezési csak a dátumot tartalmazó oszlopokra van beállítva? Mert az a gyanúm, hogy másik oszlopra is van érvényes szabály. Megnézheted az Adatok - rendezés menüpontban, ha nem az "A-Z","Z-A" lehetőségre, hanem a Rendezés-re kattintasz. Itt megláthatod, hány oszlopra van beállítva szabály.
Üdv.
Ha ez sem segít, akkor tegyél fel egy mintát valahova és megnézem(zük).
Kézzel: Kijelölöd azt a tartományt amelyet rendezni szeretnél. Utána adatok, rendezés. De ha belekattintasz a tartományba és utána az adatok- rendezés menüpontba, magától ajánlja fel a teljes tartományt.
Makróval általában a tartományban levő egyik cella CurrentRegion tulajdonsága segít: pl. B3.currentregion.sort
Egyre kell figyelni: a tartományt egybefüggően kell kijelölni - tehát ha közben lennének üres oszlopok, azokat is folytatólagosan bele kell foglalni.
Ezért a fenti makrós dolog csak akkor jó, ha nincs üres sor/oszlop az adatok között (mert a CurrentRegion az a "téglalap" alakú tartomány, amelyet minden oldalról legalább egy üres oszlop és sor határol.
Csinálj egy segédoszlopot a számok elé v. mögé. Pl. segédoszlop A, számok B, sz A1 cella képlete legyen ="A" & B1 és ezt húzd végig a segédoszlopon
Ezután jelöld ki a segédoszlopot és a rendezendő oszlopot (illetve, ha van utána még több oszlop, akkor az egész tartományt, hogy menjenek az adatok a főkönyvi számokkal). Rendezz a segédoszlop szerint.
Utána a segédoszlopot törlöd, vagy ha később is szükséged lenne rá, akkor elrejted.
Huszonéves Excel múlttal olyan problémába futottam, mint még eddig nem. Lehet az Excelben számokat szövegként sorba rendezni? Főkönyvi számlaszámokról van szó, ahol ez egy helyes sorrend:
5
55
551
56
561
Ez viszont nem:
5
55
56
551
561
Szóval... lehet? Próbáltam a számok oszlopát Format cells -> Category -> Text-ként használni, de csak érték szerint rendezne. Az Excel súgó és egy gyors Guglizás nem segített.
Értékek közötti összefüggések vizsgálatához használt értékpár pontdiagramhoz hogyan lehet olyan adatfeliratot rendelni, ahol a pontok nevei (pl megyék, városok stb) szereplnek?
Az Office 2013-ban van a "Házi leltár" sample. Ezt egészítettem ki több oszloppal, hogy tudjam használni. Az AF oszlopban dátumok vannak. A problémám az, hogy nem rendezi növekvő sorrendbe. Csökkenőbe sme. Szerintetek ez miért lehet? Semmi hibát nem dob és mikor a rendezésre megyek látszólag nem is történik semmi.
Nem akarom elkiabálni, de lehet, hogy megoldódott a probléma. Annyit változtattam a kódon, hogy minden másolásos sor elejére beírtam a második sorból átvett "If Range("h2").Value <> Range("h1").Value Then" utasítást vagy mit. Természetesen a cellákat átírtam a másolandó cellákéra. Így a makró futásának feltételét nem változtattam meg, de csak abban az esetben végzi el ténylegesen a másolást, ha a másolandó cellák értékei nem egyeznek. Olyan bonyolult makrót nem akarok használni, amit nem értek, ezért ciklusok meg hasonlók kilőve. Mindenesetre köszönöm a segítségeteket, remélem több makrós problémám nem lesz. Ha mégis, akkor jövök úgyis ahogy szoktam.
Bocsánat, ha nem volt egyértelmű, ami könnyen előfordulhat. A második sor azért került be a makróba, hogy lényegében ezzel a kapcsolóval tudjam meghatározni a makró teljes lefutását (ne fusson le minden újraszámításnál). Eleinte jó is volt, de mostanra olyan sok tényező változtatja már meg a cella értékét, hogy lényegében mindig lefut a makró. Abban sem vagyok biztos, hogy a makró másolásai nem generálnak-e újabb változásokat a kérdéses cellában, ezzel újra futtatva a makrót. mindenesetre végtelen ciklusba nem futottam bele, mert idővel megáll és minden jól történik, csak lassan. Nem biztos, hogy a sok másolás miatt lassú, lehet, hogy nagyon sokszor fut le. Ezt nem tudom hogyan tudnám kideríteni.
A segítségeteket köszönöm, holnap lesz már csak időm értelmezni és tesztelni.
Valószínűleg a 2. sorban változtatod az értéket, ez nem derült ki a leírásodból. Ha igaz, érdemesebb a Change eseményhez kötni a futást.
A sok sor összehasonlítását ciklusban is elvégezheted, nem kell 50× beírni.
A makró akkor változtat, ha a 2. sorba viszel be adatot, billentyűzetről. Ekkor megnézi, hogy a bevitt adat egyezik-e a fölötte lévő adattal. Ha nem, akkor a bevitel oszlopában a 3. sortól kezdve minden második sorba beviszi a jobbra mellette lévő értéket.
Nem biztos, hogy ez a feladat, csak próbálkozom a gondolatolvasással. :)
Private Sub Worksheet_Change(ByVal Target As Range) Dim sor As Long
If Target.Row = 2 Then If Target <> Cells(1, Target.Column) Then Application.EnableEvents = False For sor = 3 To 100 Step 2 Cells(sor, Target.Column) = Cells(sor, Target.Column + 1) Next Application.EnableEvents = True End If End If End Sub
Ez a kód azért fut le minden újraszámolásnál, mert a Worksheet_Calculate() eseményhez van kötve. Szerintem más feltétellel kellene indítani a cellák értékadását.
Application.EnableEvents = False
Ez a sor azért van benne, hogy az utána lévő kódsorok (cella értékadás) ne váltsák ki a Worksheet_Calculate() eseményt ezáltal végtelen ciklust okozva. Természetesen miután lefutott a kód vissza kel kapcsolni az események figyelését, erre való a
Private Sub Worksheet_Calculate() If Range("h2").Value <> Range("h1").Value Then Application.EnableEvents = False Range("h3").Value = Range("i3").Value Range("h5").Value = Range("i5").Value Range("h7").Value = Range("i7").Value Range("h9").Value = Range("i9").Value
itt még kb 50 ilyen sor következik, de csak a makró végét másolom ide:
Application.EnableEvents = True End If End Sub
A probléma az, hogy a lefutás feltételét (második sor) annyi mindenhez kötöttem, hogy lényegében az oldal minden számításánál lefut. Engem ez nem is zavarna, de sajnos használhatatlanul belassult tőle az érintett oldal. Nem fagy le és nem ír hibát, csak várni kell 4-10 másodpercet. Nincs ötletetek, hogy hogyan lehetne egy kicsit gyorsítani? Én arra gondoltam, hogy nem gyorsulna-e attól, ha a másolásokat minden sor elején a másolt és a másolandó cella összehasonlításával kezdeném és csak azokat a cellákat kellene átmásolni, amik nem egyeznek. Azt mondjuk nem tudom, hogy az összehasonlítás gyorsabb-e a másolásnál. De persze bármilyen más hasznos ötletre vevő vagyok.
Ebben a ciklus már működik, az első fájlt le is menti, de utána a második összeillesztése előtt megáll, hogy nem találja a munkaidő-nyilvántartás fájlt.
Kellene kreálnom vagy 30 egyedi munkaidő-nyilvántartó excel táblát, amiben szerepelnek a delikvensek nevei, a feladatuk meghatározása és a munkahelyük neve.
Ehhez van adatbázisom, az alábbi makróban adattabla_*.xlsx néven, van munkaidő nyilvántartó excelem munkaidonyilvantartas_*.xls néven. Utóbbiban van négy munkalap, havi bontásban lehet vezetni a munkaidőt.
Azt kellene megoldanom, hogy egyenként beillessze az adattáblában szereplő 29 ember nevét, munkahelyét, feladatát (adattabla_*.xlsx C,R és Q oszlop 2-30. sor) a megfelelő helyekre az nyilvántartásba (munkaidonyilvantartas_*.xls, D10, D11 és D12 cellák, 2014_09, 2014_10,2014_11 és 2014_12 munkalapok).
Ez így egy sorból kiszedi és bemásolja + lementi az adatokat úgy, ahogy szeretném, de nem tudom, hogy a ciklusnak hogyan álljak neki, hogy a többi sort is ugyanígy megcsinálja.
Egy kicsit pofásítottam rajta, az eredeti soraid megjegyzésként benne maradtak (' aposztróffal kezdődik a VBA-ban)
A félkövérrel szedett sorok a működőek.
Első kérdésedre a választ a kékkel jelölt sorok adják - e két sort egy and operátorral össze is lehet fűzni egy sorba, de úgy gondoltam, így világosabb.
Második kérdésedre a pirossal jelölt sor ad választ. Az adott oszlopban jó mélyről indulva (általában a sorok számától), visszafelé lépünk - end(xlup) ez megfelel annak, amikor az end billentyű után a felfelé nyilat nyomod meg. Ez az első nem üres sorra fog állni (kivéve, ha az egész oszlop üres, mert akkor az első sorra), tehát az utána következő lesz az, amibe írhatunk. A makró így a 2. sorba kezdi az eredmény kiírását.
Sub for_loop() For i = 1 To 5 Sheets("Sheet1").Cells(1, "E").Value = Sheets("Sheet1").Cells(i, "A").Value 'Sheets("Sheet1").Select 'Range("A1").Select 'ActiveCell.Offset(-1 + i, 0).Select 'Selection.Copy 'Range("E1").Select 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ ':=False, Transpose:=False For j = 1 To 5 Sheets("Sheet1").Cells(1, "F").Value = Sheets("Sheet1").Cells(j, "B").Value 'Sheets("Sheet1").Select 'Range("B1").Select 'ActiveCell.Offset(-1 + j, 0).Select 'Selection.Copy 'Range("F1").Select 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False For k = 1 To 3 Sheets("Sheet1").Cells(1, "G").Value = Sheets("Sheet1").Cells(k, "C").Value 'Sheets("Sheet1").Select 'Range("C1").Select 'ActiveCell.Offset(-1 + k, 0).Select 'Selection.Copy 'Range("G1").Select 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False macro1 'Application.Run ("Macro1") With Sheets("Sheet1") If .Cells(1, "L").Value <= .Cells(1, "I").Value And .Cells(1, "I").Value <= .Cells(2, "L").Value Then If .Cells(1, "M").Value <= .Cells(1, "J").Value And .Cells(1, "J").Value <= .Cells(2, "M").Value Then .Range("E1:G1,I1:J1").Copy Sheets("Sheet2").Cells(5000, "E").End(xlUp).Offset(1, 0) End If End If End With 'If "L1" <= "I1" <= "L2" And "M1" <= "J1" <= "M2" Then 'Range("E1:G1", "I1:J1").Select 'Selection.Copy 'Sheets("Sheet2").Select 'Range("E1").Select 'ActiveCell.Offset(-1 + i * j * k, 0).Select 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'End If Next k Next j Next i End Sub
A következő feladatot Ti milyen makróval oldanátok meg, a lehető legrövidebb kóddal:
- a mellékelt kép “szamitas” sheet-jén látható A, B és C oszlopok változókat jelentenek, melyek lehetséges értékei a sorokban vannak
- ezeket szeretném bemásolni E1:G1 tartományba, az összes lehetséges kombináció szerint (5 X 5 X 3 = 75)
- minden másolás után nyomja meg “szamol” gombot, ami lefuttat egy másik makrót (itt most nem látszik, de tegyük fel, hogy ott van “szamitas” sheet-en)
- ha egy adott gombnyomás után x és y a min-max határok közé esik, E1:G1 és I1:J1 tartományt másolja “eredmenyek” sheet Ei+1:Gi+1 és Ii+1:Ji+1 cellákba, ahol i a legutóbb betöltött sor száma
Nincs erről részletesebben valahol a neten leírás, példákkal tarkítva, hogy jobban megértsem? Mert így még nem egészen értem. Nem is volt kapcsos zárójel sem az általad leírt képletben.
tömbképlet: Olyan képlet, amely több műveletet hajt végre egy vagy több értékkészleten, majd egy vagy több eredményt ad vissza. A tömbképletek kapcsos zárójelek ( { } ) között találhatók, bevitelükhöz a CTRL+SHIFT+ENTER billentyűkombinációt kell használni.
Lényegében egy mátrixon/vektoron végzi a műveleteket, vagyis teljesen másként számol, mint egy normál képlet.
Amit írtam, az például minden egyes elemnél megnézi az előfordulás számát és megnézi, hogy a mellette levő cella üres-e, és az így keletkezett értékeket összegzi. Ha csak sima képletként írnád be, akkor hibát jelezne.
Van egy jópofa 2 oldalas táblázatunk, ami sablonként van elmentve, majd azt nyitja meg mindenki. Kitöltik a megfelelő részeket, elmentik (makróval by Delila), aztán manuálisan kinyomtatjuk. A nyomtatónk tud kétoldalast, de ezt is be kell állítani külön még nyomtatás előtt, de van, hogy valaki elfelejti, és akkor két lapra nyomtatja.
Lehetne egy nyomtatás gombot készíteni, ami az alapértelmezett nyomtatóra küldi a cuccot, de úgy, hogy már be van állítva, hogy az bizony kétoldalasban menjen?
B oszlopban az áruház jelölése, ahol az a bizonyos tétel hírdetve van. Tehát egy bizonyos termék másik több áruházban is hírdetve van.
C oszlopban a termék ára
D oszlopban, hogy el van-e adva (igen, nem, máshol vagy üres üres a cella). Ahol igen, ott a többi áruhazra vonatkozóan máshol van beírva. Ha 1 áruházban van hírdetve és igen, akkor erre a tételszámúra nincs máshol, mivel több áruházban nem is volt hírdetve csak egyben. Ahol nem van, ott arra a tételszámú termékre az összes áruházban nem van írva.
Ami a kérdés:
Összeadni azoknak a termékeknek az árait, amelyek még nincsenek eladva. Tehát amelyik D oszlop cellája üres. De egy tételt csak egyszer szabad számolni akárhány áruházban is van hírdetve.
A fenti példa esetén 2001+4000, azaz 6001-et kell kapnunk.
A tételszámok szerinti sorok nincsenek sorbarendezve az oszlopban, hanem összevissza lehetnek. Azaz a fenti 1,1,1,2,2,3,3,3,3,4,4,4,5,5 helyett lehet pl: 1,1,2,3,3,1,4,5,5,4,2,3,4,5,3 is.
És többszáz tételszámú termék van.
Külön oszlop igénybevétele nélkül meg lehet ezt csinánálni? Egyetlen egy függvénnyel? Ha igen, mi az? :))
Köszi, akkor már csak az a kérdésem, hogy mivel az oszlopban egymás alatt nevek, ezeket kell folyamatosan átjavítanom, így a "Itt egy ékezetet is tartalmazó szöveg1." helyett simán betehetem mondjuk, hogy "a1", az az:
Végül is most sikerült megoldani úgy, hogy a "mire cserél" mezőbe aposztrófot írtam, mert véletlenül pont a cella elején volt a cserélendő szöveg, de mindenképpen abszurd.
LibreOffice Calc programban hogy tudom azt megcsinálni, hogy ha rákattintok egy cellára akkor annak sorát és oszlopát is valamilyen színnel kiemeli, vagy csak kijelöli?
2.
Hogyan lehet azt megoldani LibreOffice Calc programban, hogy két egymás mellett lévő oszlopban ha az egyik oszlop celláját kitöltöm akkor a mellette lévő oszlop ugyan azon sorában lévő cellába már ne lehessen beírni semmit?
Az arany kiszamolasat kozvetlenul beirva nem fogadja el, allandoan keplethibat jelez, a fuggveny ablakot elohivva kategoriankent megadva az adatokat mar elfogadja, de a helyezesnel az se mukodik, az F2-ot semmikepp se fogadja el valamiert.
Ezert utalom az excelt, rossz a dokumentacioja, nincsenek peldak, igy amikor hibat jelez, nem lehet rajonni, mi a baja, mert trivialis dolgokra mondja, hogy nem jo, de azt nem, hogy miert. Hiaba nezem a helpet, nincs indoklas, nincs reszletes pelda, csak feluletes valami, es en meg nem jovok ra, mi lehet a hasfajasa.:-(
Kicsit tovabbgondoltam a feladatot. Az arany kiszamolasa ezzel a modszerrel csak akkor hasznalhato, ha a B oszlop adatai egyertelmuen valtoznak. A gyakorlatban A es B oszlopok valtozasara kell szurni, es erre vegkepp nem lattam peldat a sugoban.
A pivotra se talalok megoldast, valoban csak egy adatot enged beirni, itt pedig tobb kell. Arra gondoltam ,talan szinezessel megoldhato lenne egy trukk, helyezes szerinti sorrendben szinek jelzik, melyik fajtahoz tartozik az adat.
De akkor is ket pivot tabla kell, egyiken a szamadatok, a masikon a reszaranyok.
Talan valoban adatbazissal jobban lenne kezelheto, de ahhoz meg ennyire se ertek. ;)
Ha a .Fill.ForeColor.Brightness-t nullától eltérő értékre is állítanád valahol, ott is hibára futna. Ebből következik, hogy mindkét helyen törölheted a sort.
Amennyiben nem sikerül az objektumok együttes kijelölése, külön-külön add meg a paramétereiket.
Pár hónapja voltam itt egy problémával, most újra előveszem. Sajnos a fájlt továbbra sem tudom elküldeni, mert bizalmas dokumentum, de a problémás kódokat kigyűjtöttem.
Előzmény:
Egy olyan eszközön dolgozom, ami egy részletes adatbázis továbbá grafikus felület, melyen összekötő vonalak és egyéb alakzatok vannak. Az alakzatok színe, formája aszerint változik, hogy az adatbázis, mely elemeire szűrünk. Például: azok az összekötők, ahol az adatbázis X értékei 1 és 10 között vannak, pirosak, 10 és 20 között kék, stb. A makró továbbá minden egyes "színezőgombhoz" generált egy jelmagyarázat dobozt is, a magyarázatban lévő adatok szintén aszerint változnak, hogy mely színezőmakrót futtatom. Ezt úgy oldottam meg, hogy minden új színező parancs törli az előző magyarázat box elemeit, majd egy rejtett munkalapból kimásolja az alap boxot, és a makró alapján generál egy új magyarázatot. Továbbá van még egy extra funkció a grafikus felületen: részletes és sima nézet, ami a főbb összekötőket és alakzatokat kiemeli, míg a mellék összekötőket és alakzatokat "hátra küldi", majd ugyanez visszafelé - itt úgy rögzítettem a makrót, hogy elemek kijelölése majd formázása (vastagítás, hátraküldés stb.)
A problémám a következő: ez az alkalmazás tökéletesen működik a gépen, ahol megírtam - Office 2013 alatt. Miután megnyitottam otthoni illetve egyéb gépeken, a makrók nem futnak le, helyette egy sor hiba jön fel. Szerintem ez a probléma a különféle Office verziók miatt van. Otthon 2003, másik munkahelyi gépen pedig 2007 van, ezeken nem futnak le a makrók.
Íme a kód egy részlete, a pirossal kiemelt résznél jelez a debugger:
ActiveSheet.Shapes.Range(Array("Color8")).Select With Selection.ShapeRange.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorText1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 - object does not support this property or method .Transparency = 0 End With ActiveSheet.Shapes.Range(Array("Text8")).Select Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Main line" With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 9). _ ParagraphFormat .FirstLineIndent = 0 .Alignment = msoAlignLeft End With With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 9).Font .Bold = msoTrue .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.ObjectThemeColor = msoThemeColorText1 .Fill.ForeColor.TintAndShade = 0 .Fill.ForeColor.Brightness = 0 .Fill.Transparency = 0 .Fill.Solid .Size = 9 .Name = "+mn-lt" End With
A másik hiba a kijelöléseknél jött ki 2007-es Office-ban:
With Sheets("Izé").Shapes.Range(Array("egyes", "kettes", "hármas")) - object not found .Line.Visible = msoTrue .Line.Weight = 1.5 End With
Ha ezeknek a kódoknak kompatibilitási problémája van, akkor mivel lehetne helyettersíteni, hogy működjön visszamenőleg is?
Előre is köszönöm a válaszokat, remélem most pontosabban tudtam fogalmazni, mint legutóbb.
A jegyzettömbbe kopizós kézi megoldásod nem probléma, 2-3 perc az egész. Azzal van a baj, hogy a sorok elcsúsznak, üres sorok keletkeznek és lehet, hogy nincs benne rendszer. Persze ezt egy formázós rutinnal talán meg lehet oldani (ahogyan a letöltött adatokkal teszem most is), dolgozni fogok rajta. Kösz.
Igazad van, nem tudom megoldani a dolgot. Azt hittem, hogy van egy CSV fájl, amit valahol elérsz, és megnyitsz. Viszont itt egy honlapról kellene letölteni az adatokat TEXT formában, amit nem tudok megoldani.
Kézi parancsokkal meg tudtam oldani. Megnyitottam a honlapot. A teljes oldalt kijelöltem, és kimásoltam (Copy). Ezután megnyitottam a Jegyzettömb programot. Ebbe bemásoltam (Paste), majd ezt az oldalt elmentettem.
Az így mentett fájlt már be tudta olvasni a korábban beírt kódom.
Innen két lehetőség van.
1. Ha nem kell túl sűrűn elvégezned a műveletet, akkor esetenként magad is elvégzed kézzel. Majd ráereszted a kódot, ami megfelelő formában átteszi az adatokat Excelbe.
2. Bízzunk benne, hogy a megnyitás utáni kijelölést, másolást, és a jegyzettömbbe történő beolvasást, majd a mentést valaki meg tudja oldani Excel programmal, és az így készült fájlra már a program ráeresztheti a kódot.
Adok egy linket egy holnapi versenyprogramról. A 3:20-as futamban pl. vannak a B oszlopban 0-val kezdődő karakterek. Tehát csak a B oszloppal van probléma, minden más jó az eredeti kóddal.
Egy apró pontosítás: "Igen, ha már beolvasta a forrásformátumot, akkor valószínűleg hiába minden". Éppenhogy nem erről van szó. Beolvasta az adatot, mégpedig nem a forrásformátumban, hanem átállítva a saját - megadott feltételek melletti - formátumára. És valószínűleg ezt kell megakadályoznunk a TEXT formátumban történő beolvasással. A dolog mélyebb szakmai hátterét sajnos nem tudom.
Azért még teszek egy utolsó kísérletet. Igaz, hogy egy .CSV fájllal kísérletezgettem, és nem internetről származó fájllal, de meglepne, ha elvi különbség lenne a kettő között.
Az általad írt sorok felhasználásával törölte a program a vezető nullákat. Amikor vak tyúkként megpróbáltam az alábbi programsorokkal lefuttatni, akkor megtartotta a vezető nullákat, és ha egy sorban több vesszővel elválasztott adat volt, akkor azokat és szépen külön oszlopokba tette. Szerintem tégy egy próbát ezzel! Veszteni nem veszthetsz:
Option Explicit
Sub Beolvas()
Dim a, b
b = Range("A2")
' Set a = ActiveSheet.QueryTables.Add(Connection:="URL;" & b, Destination:=ActiveSheet.Cells(6, 1))
' helyette:
Set a = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & b, Destination:=ActiveSheet.Cells(6, 1))
Igen, ha már beolvasta a forrásformátumot, akkor valószínűleg hiába minden. A beszélgetésben ahogy látom, fájlból olvas be, nem a webről, ezért az ottani kódsorokkal nem tudok mit kezdeni, hiába variálok, mindig hibaüzenet kapok. Ráadásul egyáltalán nem értek hozzá, a vaktyúk-effektus pedig itt biztos, hogy nem jön be. Mindenesetre kösz neked is.
Ebben a kérdező (#3 hozzászólás) azt panaszolja, hogy ha egy rekord formátuma 04.000, azt az Excel 4-nek olvassa be. A #4 hozzászóló azt javasolja, hogy nem számként, hanem TEXT-ként olvassa be, mire a kérdező azt mondja, hogy működik a dolog. A beszélgetés további része már nem biztos, hogy érdekes a probléma szempontjából.
Hátha errefelé lesz a probléma gyökere. Van egy olyan gyanúm, hogy ha már beolvasta az Excel szubrutin az adatot, akkor már késő lesz formázni, ezért a beolvasás pillanatában kellene megcsípni a forrásformátumot.
Ezeket a képleteket végighúzhatod az oszlopon. Az összeg sorokba eső képleteket a részletek összecsukása után egy mozdulattal törölheted.
A pivotokkal kapcsolatban egyenlőre egy megjegyzés:
Ilyen különböző mértékegységeket egy diagramon ábrázolni képtelenség, maximum két tengely van, ahova kétféle léptéket lehet felvenni (pl. abszolut szám és százalék). Marad még a sorbarendezés a szemléltetésre 3. "dimenziónak". Pár lehetőséget megpróbálok majd összerakni, de ehhez kell egy kis idő még.
A pivotnal az a legnagyobb gond, hogy egyesevel kell lapozni, ha grafikont akark megjeleniteni, es ugy tudom kinyomtatni. Vagy mindegyiket kulon munkalapra teszi, es akkor vegig kell lepkedni rajtuk es egyesevel kinyomtatni.
A legelso munkalapon egy "favagashoz" kernek segitseget.
Hogyan lehet megoldani, hogy valtozo teruletnel az adott teruleti szam oszesenjehez kepesti aranyt kiszamolja, majd ezek alapjan az elert helyezest is?
Kezzel megoldhato, hogy beirom az aranyokat, majd rendezen csokkeno sorrendben a teruletet, de nagyon sokaig tart.
Sajnos ugyanaz a hiba, mint alant. Jól látod, valószínűleg a beolvasásánál kellene megvariálni valamilyen tulajdonságot, de ehhez én kevés vagyok. Persze az is lehet, hogy nincs rá megoldás. Kösz mindkettőtök segítségét.
A formátum elején egy db nulla, utána legalább annyi # ahány értékes számjegyed lehet. Az sem baj ha több van, mert mindig csak az értékes számjegyek fognak megjelenni, nulla vezetővel.
DE: Ez MINDEN számot így formáz, akkor is, ha egyébként nem kellene elé a nulla!!!
Szerintem a beolvasásnál kellene valamilyen módon megadni azt, hogy a vezető nullákat ne egye meg (kvázi, kezelje szövegként ami bejön). Még nem találtam meg ennek a lehetőségét.
Beírod valahová a tételeket, mondjuk másik munkalapra, kijelölöd és adsz neki egy nevet, utána a kívánt cellában adatok/érvényesítés/lista, forrás a megadott név.
Ezzel a megoldással csak akkor kerülsz bajba, ha az adott betűcsoportok (né,éné,áné,stb.) nem csak a név végén, hanem valahol a névben is előfordulnak.
Ilyenkor kicsit bonyolultabb a dolog, mert HA függvényekbe kell szöveglevágó és cserélő függvényeket beágyazni:
Pl. =HA(JOBB(A1;3)="áné";BAL(A1;HOSSZ(A1)-3)&"a";HA(JOBB(A1;3)="éné";BAL(A1;HOSSZ(A1)-3)&"e";HA(JOBB(A1;2)="né";BAL(A1;HOSSZ(A1)-2))))
Excel verziódra nem emlékszem, de már a korábbiakban is lehetett előre definiált "stílusokat" beállítani a pivot tábláknak, már a létrehozáskor is amit később lehet módosítani.
Úgy emlékszem, lehet alapértelmezést is beállítani, akkor minden pivot egyformán formázódik.
Egyébként minden pivotot egyedileg kell létrehoznod...
Ha mindet ki akarod "egyszuszra" nyomtatni, ahhoz makró kell, for each ciklussal nem kell tudnod, hogy hány pivottáblád van. A makróba akár egyedi formázást is tehetsz (pagesetup tulajdonságai).
A pivothoz tartozik többféle tartomány tulajdonság, azzal beállíthatod a nyomtatási területet.
De mégegyszer, ezek eléggé verziófüggő eszközök és lehetőségek.
Valaki legyen szíves módosítani annyit, hogy ne a teljes sort színezze, hanem csak az "A:X" tartományt?
Ha kiveszem az "entirerow"-t akkor csak az "E" oszlopban lévő azokat az elemeket színezi, amik több mint egyszer szerepelnek az oszlopban
"entirerow"-val viszont az egész sort telibe színezi (a többszörös elemeknél), ami hülyén néz ki, ezt szeretném orvosolni, de nem tudtam rájönni a mikéntjére.
köszi
P.
Sub Highlight_Duplicate_Entry() Dim ws As Worksheet Dim cell As range Dim myrng As range Dim clr As Long Dim lastCell As range
Set ws = ThisWorkbook.Sheets("Listázás") Set myrng = ws.range("E7:e" & range("E" & ws.Rows.Count).End(xlUp).Row) With myrng Set lastCell = .Cells(.Cells.Count) End With myrng.Interior.ColorIndex = xlNone clr = 15
For Each cell In myrng If Application.WorksheetFunction.CountIf(myrng, cell) > 1 Then ' addresses will match for first instance of value in range If myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastCell).Address = cell.Address Then ' set the color for this value (will be used throughout the range) cell.EntireRow.Interior.ColorIndex = clr clr = clr + 1 Else ' if not the first instance, set color to match the first instance cell.EntireRow.Interior.ColorIndex = myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastCell).Interior.ColorIndex End If End If Next End Sub
Számított mezőt vagy számított értéket is tehetsz a pivot táblába, ahol nem csak számítási műveleteket, hanem még függvényeket, képleteket is használhatsz. Verziótól függ, hogy melyik menürészben találod a pivottáblás menük között.
Az első, illetve második HA rendben van de a harmadiknál az E7-ben és G7-ben lévő összeg összeszorzása helyett az előző fv-ben lévő 0,5-el szorozza meg a szorzatot, nem tudom mi lehet a probléma, kérlek segítsetek.
=IF(AND($A2<=E$1,$B2>E$1),1,""), ez az a képlet, mely beosztja az 1-eseket az időpontokhoz.
Ha A2-ben van az első érkezési időpont, B2-ben a távozás, és ha felveszed az órákat 1-24-ig E1-F1-G1 stb oszlopokba, akkor E2 cellába kell kerülnie ennek a képletnek.
Ez aztán lemásolható az alatta lévő sorokba is.
Célszerű egy napra összegezni a munkaidőket, illetve hogy hány ember van bent.
Ha túl nyúlik 1 napon, akkor az éjfél utáni órákat a 24-re ráépítve kezelheted, tehát hajnali 1 óra 25, hajnali 2 óra 26 stb. A képlet ilyen módon jól működik. Nyilván A és B oszlopba is ilyen, 24 óra feletti értékeknek kell kerülni.
Én inkább napi szinten nézném, pl. szept. 1. 1-24 óra az 1. munkalapon, majd másik munkalapon szept. 2. 1-24 óra, mivel utána egy egyszerű Összesítéssel (Consolidation) az azonos struktúrájú adatok egy pillanat alatt összegezhetők havi szinten az utolsó munkalapon.
A 0-24 óra valójában tehát 1-24 óraként működik, hiszen az 1. megkezdett órára értelmezhető az 1.
Segítségre lenne szükségem. Egy teljesen "egyszerű" beosztásfigyelő táblázatot szeretnék összehozni és egy pontján elakadtam.
Példa:
A1 cella egy legördülő menü, ebből kell kiválasztani a kezdés időpontját. (csak egész órák vannak - ..., 6, 7, 8, 9, ...) (1-24-ig)
B1 cella szintén legördülő menü, ebből kell kiválasztani a munkavégzés időpontját. (szintén csak egész számok vannak - ..., 14, 15, 16, 17, ...) (1-24-ig)
A2 és B2 ugyan így van, mert több dolgozó van.
A3 és B3 -"-
.
.
.
A gondom az, hogy egy olyan táblázatra van szükségem vagy függvényre, mely megmondja, hogy az adott órában hány dolgozó volt jelen.
Vagyis a táblázat oszlopai a dolgozók (1. oszlop AB1 pár, 2. oszlop AB2 pár,...) sorai az órák.
Tehát ha van egy dolgozó, aki 6-ra jött és 12-ig volt, akkor az ő oszlopába 6-12 minden sorba írjon egy 1-t a függvény.
Ha a másik dolgozó 8-16 van, akkor az ő oszlopába meg 8-tól 16-ig írjon 1-t a függvény.
Remélem értelmezhető, amit írtam.
(van egy mellék oszlopom, ami kiszámolja, hogy a kezdés és a vég között hány óra telik el (a számítás kiküszöböli a 24 órán túli munkavégzést is pl.: 22-06), gondoltam arra is, hogy ha a függvény megkeresi a munkakezdés időpontjának megfelelő helyet a táblázatban és meg van, hogy hány órát dolgozott az adott ember, akkor annyi cellába ír 1-t. Fontos, hogy nincs munka megszakítás, aki dolgozik, az ledolgozza a beírt mennyiséget)
Hali, én is kérnék egy kis segítséget makróírásban.
Szét kellene bontanom egy terméklistát + a hozzá tartozó, változó számú, egybe ömlesztve felsorolt regisztrációs számokat egy külön munkalapra, az alábbiak szerint.
Az új munkalapon az első (A) oszlopban legyenek egyesével a regisztrációs számok, és kerüljön minden egyes reg.szám mellé, a B oszlopba a saját termék név. A gond az, hogy van, ahol csak egy reg.szám van, máshol rengeteg reg.szám van egy cellába téve, adott termékhez rendelve.
Az irányított szűréshez rögzíts egy makrót a következőképpen:
-1 lépés: Nevezd el oszlopokat kijelölve a teljes adattartományodat, ahol változik a sorok száma (később jönnek még adatok).
Pl. A-D oszlopok kijelölve, majd Névmező fehér ablakba kattintasz felül, bal oldalt és begépeled: Adatok és Enter. Ezáltal definiáltál egy tartományt, melyben az összes oszlopod benne van.
Az irányított szűrésnél innen kezdve erre a névre, Adatokra kell hivatkoznod.
0. lépés: A Fejlesztőeszközök szalagot előcsalod az Excel Office gombjára (Fájl menü) kattintva, kiválasztva az Excel beállításai pontot, és azon belül legfelül balra, Népszerű elemek pontjára lépsz. Ott jobb oldalt, a harmadik kockát bejelölve kiválasztod a Fejlesztőeszközöket.
1. Indítod a makrórögzítőt (kis piros pötty van a gombon), hagyd meg a felajánlott beállítást, hogy Ebben a munkafüzetben hozza létre a makrót.
2. Törlöd a tartalmát annak a területnek (jobb egérgomb, Tartalom törlése), ahol a korábbi szűréseredményed megjelent, de annál inkább nagyobb területet, hiszen az új futtatás több sort eredményezhet.
3. Bárhol állva indítsd el az Adatok szalagon a Speciális szűrést.
4. A megjelenő ablakban a Listatartományhoz, az első fehér sorra írd be a tartományod nevét: Adatok
5. A Szűrőtartományodat téglalap alakban kijelölöd bekattintva a második fehér soron állva.
6. Kattintsd át a felső szövegnél, hogy Más helyre másolja, majd a harmadik fehér soron állva kattints bele abba a cellába, ahonnan kezdődően kéred az eredmény közlését (Hová másolja).
7. Kattints az Ok gombra.
8. Állítsd le a makrórögzítést (kék négyzetre kattintva).
+ 1 lépés: Menj fel a Fejlesztőeszközök szalaghoz, válaszd ki a franciakulcsos, egyéb szerelőkulcsos ikonú Beszúrás menüpontot, és a legördülő vezérlők közül válaszd ki a legelsőt, egy kis szürke dobozt. Ahogy rákattintasz, azonnal felugrik a makrólistád, amiben elvileg ez az új, egy darab makró lesz benne, kivéve, ha vannak korábban létrehozott personal makróid, vagy nyitva vannak még más, makrót tartalmazó Excel fájlok is.
Elvileg automatikusan a legutóbb létrehozott makrót jelöli ki az Excel, ehhez akarja hozzárendelni a vezérlő gombot.
Okézd le, majd a vezérlődoboz szövegét egy kattintással átírhatod Futtatás szövegre, vagy amire akarod.
Innen kezdve ha új adatsor érkezik, nincs gond, bemásolod az előző tartomány végére, vagy ha komplett új listát kapsz, mindent bemásolsz A-D oszlopokba. Ilyenkor automatikusan beleveszi az Adatok tartományba az Excel az új tartalmat és akár a kritériumokat is módosíthatod, megtartván a jelenlegi struktúrát és máris futtathatod a makrót a gombra kattintva.
Az egyik lehetőség, hogy az irányított szűrőt egyszer felveszed makróba, kicsit kipofozod, utána ráteszed egy billentyűkombinációra. Amikor kész vagy a sorok hozzáadásával, akkor a billentyűkombinációval frissíted. Ha egy példát felteszel valahova - már a makró felvétel utáni állapotban, akkor segítünk benne.
Másik lehetőség a kimutatás készítése. A mintafüzetedben ezt is meg tudjuk mutatni.
Lehet vele szórakozni, de tipikus példája annak, amikor a leggyorsabb Accessbe importálni az egész hóbelevancot, normális dátumot csinálni a hónap-napból, és lekérdezést csinálni a szűrő helyett. Amikor bonyolult szűrőket kezdesz alkalmazni, az az egyik csalhatatlan jele, hogy adatbázis-kezelési problémát akarsz táblázatkezelőben megoldani.
Sziasztok! Segítséget szeretnék kérni tőletek, mert elakadtam egy összetett munkafüzet készítése közben. 2007-es, angol nyelvű Excel használok, és egy havi kimutatást szeretnék készíteni. Egészen pontosan előadó, és az előadóhoz kötött hallgatók száma alapján szeretnék egy automatikusan frissülő munkafüzetet.
A munkafüzetemben négy oszlop van. Az első (A) oszlop a hónap, a második (B) oszlop a nap. A harmadik oszlop (C) az előadó neve, a legutolsó (D) oszlop pedig a hallgatók száma. Például egy átlagos sorom így néz ki:
Augusztus; 1; Kovács Béla; 15
És így tovább, végig az év napjai. Nekem azonban azt kell tudnom kigyűjteni, hogy mennyi hallgató volt. Tehát például azt, hogy kinél, és milyen napokon volt 15 hallgató, és mindezt havi lebontásban.
Irányított szűréssel le is tudom kérdezni, több munkalappal akár minden egyes hónapot is. Azonban az irányított szűrő nem frissül automatikusan, ha egy új sors adok a munkafüzetemhez (mivel sokszor késnek az előadók a számokkal, szabadságok miatt akár több héttel később is, egy másik hónapba csúszva). Hogyan tudom az irányított szűrőt automatikussá tenni?
Ha eredmény megállapításra szeretnéd használni, akkor az A oszlopba ugye a csapatok/egyének nevei kerülnek és az A oszlop is része a rendezési területnek!!!
ha az üres sor alatti területet jelölöd ki és rendezed úgy, hogy C oszlopnak nevezed a rendezési szempontot, valamint nincs fejléc, akkor szintén rendesen működik.
ha az üres sort is beveszed a rendezendő területbe, akkor is a C oszlop szerint kell rendezni (mivel az üres sorban nincs név), viszont ebben az esetben be kell jelölni, hogy van fejléc.
Az eredmény mindkét esetben ugyanaz, és ugyanaz mintha kitörölted volna az üres sort.
Köszi! :) Most már nekem is működik, töröltem az üres sort és jó lett. Azt viszont nem értem, hogy eddig miért működhetett, ugyanis ez egy korábbi táblázat átdolgozott verziója és ott az üres sorral együtt sem volt gond. De az már nem lényeges! Köszönöm a segítséget mindenkinek!
Ha úgy próbálom rendezni ahogy írtad, akkor teljesen összekuszálódik minden és az értékek is irreálisak. Egyébként igen egy sima képlettel kerülnek be a C oszlopba az adatok.
ND7000: Úgy is kipróbáltam ahogy leírtad, de még furább eredmények jöttek ki, meg egyébként is a 0 érték is egy érték és ahol 0 van ott annak is kell maradni.
Mindenesetre mellékelem a szóban forgó táblázatot, esetleg ha ránézne valaki. Köszi!
Én arra gyanakszom, így látatlanban, hogy, ahol nincs adat abban a sorban amibe a szűrőt berakod, azt nem veszi figyelembe. Tehát a 3 sor minden cellájában (ahol alatta adat van) irj be valami értéket.
Sziasztok, szeretnék segítséget kérni. Akadt egy kis gonodom az adatok rendezésével. 2007-es Excelt használok és főként nagyon egyszerű táblázatokat szoktam készíteni. A C oszlopban levő értékek (pontszámok) alapján szeretném rendezni az egész táblázatot, viszont ahogy kijelölöm az adott tartományt és rányomok a Rendezés méret szerint (csökkenő) Z>A parancsra a B oszlopban található neveket tökéletesen a C oszlopban levő értékek szerint rendezi legnagyobbtól a legkisebbig, viszont a C oszlopban az értékek (számok) sorrendje nem változik.
Ez a táblázat egy rangsor szeretne lenni, amilyet korábban már sikerült is elkészítenem, nem egyszer és nem kétszer. Most azonban valami nem klappol. Lehet, hogy valami beállítást nem vettem figyelembe vagy szimplán valami elemi hibát nem vettem észre a sorok és oszlopok között. Mindenesetre, ha valaki tudna segíteni nagyon hálás lennék érte! Előre is köszi! Mellékelek egy képet a problémámról:
Az alábbi táblázatot szeretném képlettel előállítani:
Az ÁTLAG($A$1;A1) képlet lehúzásával hibás értékeket kapok. Az angol nyelvű verzióban az AVERAGE($A$1;A1) képlet lehúzásával ugyanazokat a hibás értékeket kapom. Sőt még a Libbre Office is ugyanazokat a hibás értékeket állítja elő. A hibás értékek felülről lefelé: 1,00; 1,50; 1,50; 2,00; 2,00; 2,00; 2,50; 2,50; 2,50; 2,50; 3,00; 3,00; 3,00; 3,00; 3,00.
A státuszsorban viszont helyesen jelenik meg az átlagérték. Arra gondoltam, hogy valami rosszul van beállítva az Excel-ben, és ezért értelmezi tévesen az átlagszámítást. Mi a megoldás? Köszönöm a segítségeteket.
Delila10 , köszi szépen ez már majdnem tökéletes, fferi50 hez sajnos én hülye vagyok.
nem szőszálhasogatásként de ha e1:1 e2:12 és ha e1: 11 és e2: 2 akkor a D4 értéke ugyanannyi, ezt akármilyen A oszlopi változtatással tudnék pontosítani?
Ezt a kis felhasználói függvényt írd be egy modullapra:
Function hanyszorvan(ByRef holkeres As Range, mitkeres As Range) As Long hanyszorvan = (Len(Join(Application.Transpose(holkeres.Value), ",")) - Len(Replace(Join(Application.Transpose(holkeres.Value), ","), Join(Application.Transpose(mitkeres.Value), ","), ""))) / Len(Join(Application.Transpose(mitkeres.Value), ",")) End Function
Ezután a meghívása:
=hanyszorvan(amiben keresel , amit keresel)
Feltétel: mind a két területnek oszlopnak kell lennie.
A keresendő értéknek kettőnél több cellát is megadhatsz. De csak az egymásutániakat fogja figyelembe venni.
Én ezt egyszer feldolgoztam valakinek a kérésére, nagyon rendezett, gépbarát alakban vannak, le lehet szedni őket egy scripttel, és kitenni csv-be egy kis programozással.
Mondhatom, oltári nagy káosz van a füzetben. Azonos adatok tömkelege különböző tartományokban. Vesződtem vele jó ideig, de még a harmadáig sem jutottam a rendrakásnak, csak gondoltam, ha átnézed, segít a továbbiakban.
Kék karaktereket adtam a címsorban, mikor az oszlop érvényesítést tartalmaz, és pirosat, ha képlet van benne.
A politikában való járatlanságomat mutatja, hogy nem értem, hogy lehet 1-1 körzetben több nyertes.
Előbb gatyába kell rázni a tartományokat, utána lehet csak elgondolkozni azon, milyen grafikonokat, kimutatásokat érdemes az ésszerűen bevitt adatokból kicsikarni.
Kicsit off-ban kicsit félve, de megkérdezem a következőt:
A Nemzeti Választási Iroda honlapján szavazókörönként megtalálhatóak az adatok, a választás után nem sokkal. Szerintem bizonyára el lehet kérni/megvenni tőlük az információkat elektronikus úton.
Azt tutira sokkal könnyebb kezelni, mint adatokat bepüfölni - ellenőrizni több soron stb.
Esetleg arra egy képlet, hha van ami milliós, de van, ami 10milliós, 100milliós egyszerre de nem szeretném külön átirogatni minden sorban? vagy rendezzem növekvő sorban és minden új nagyságrendnél újra beírom?
Az lenne a kérédsem, hogyha excelben a például 1 987 654-et 2 millióra szeretném kerekíteni, az 1 574 321-et is és így tovább, akkor hogyan kéne beírnom?
Egy kérdés: megoldható-e az, hogy kizárólag a módosításokat mutassa a valtozaskovetes.xls fájl? Jelenleg a nem változott sorokat is mutatja megjegyzés nélkül - pl. az üres megjegyzéses sorokat törölhetné a program automatikusan a végén?
Még egy dolog: talán jobb lenne, ha a valtozaskovetes fájlban lenne maga a makró, hiszen ez állandó, csak az alap két fájl tartalma változik (regi - uj).
Amikor következő nap lefuttatom a makrót, akkor a korábban már meglévő valtozaskovetes.xlsm végére kellene hogy illessze be az új változásokat. Ez egy historikus fájl elvileg, ami mutatja, hogy az idők során milyen változások voltak a vásárlói adatbázisban.
Csak tipp volt reszemreol, mert tapasztalat alapjan nalam bevalt ez a fajta egyszeruseg.
Termeszetesen csak peldanak szantam a kepet. Egyszeru osszehasonlito tombkeplet voltanal fogva nem okoz lassusagot terjedelmes tablaknal. (En ezzel szoktam vizsgalni tobb ezer soros tablakat) Illetve feleslegesse teszi az fkereses osszehasonlitast, amit valoban sokaig szamolna...
Delila pedig biztosan segit a makros megoldasaban.
Kedves Vektor, köszi a tippet, de azt hiszem, a javaslatod nem oldja meg a problémát.
A feltöltött példa csak sematikus, a valóságban több ezer soros táblázatról van szó, több tíz változóval, ahol a közös ID alapján minden egyes Vásárló minden egyes adatát meg kell vizsgálni és összevetni a korábbi verzióval (rengeteg oszlopról van szó), majd a változásokat egy külön fájlba kell kilistázni. Az egyes rekordok nem ugyanazon a sorpozíción maradnak, hanem a teljes táblában változtathatják pozíciójukat, hiszen jönnek új sorok és törlődnek is.
Ha csak az lenne a feladat, hogy egy pár tíz soros kis táblázatban nézzük meg, mi változott, akkor egy fkeres + hol.van dinamikus oszlopvizsgáló függvény kombináció rögtön mutatná, hol van változás. Ezt követően viszont manuálisan kellene levadászni és kigyűjteni külön fájlba a változásokat, vagy egy irányított szűrővel lehetne megcsinálni, de ez megint csak manuális.
Ráadásul a táblázaton belüli képlettömeg kezelhetetlenné tenné szerintem a fájlt, ami ráadásul napi szinten változik valamelyest (vásárlók adatai, új vásárlók lépnek be stb.), így ez ilyen formában nem tűnik a legjobb megoldásnak.
Delila megoldását még nem láttam, mert sajnos nem tudom erről a gépről letölteni a fájlt, de ő szerintem makróval oldotta meg.
Az ID nem változhat! Ez az a mező, ami szerint keresni lehet a másik fájlban. Ha ezt módosítod, akkor honnan lehet tudni, hogy a régiben melyik sor adataihoz tartozik?
Kell egy fix érték az összehasonlításhoz, és ez az ID.
Egy kicsit módosítottam önhatalmúlag az elrendezésben.
A valtozaskovetes.xls-ben a Megjegyzés oszlopot áttettem az N oszlopba, így egyszerűbb a teljes sor másolása. Ebbe a megjegyzésbe azt a címet írtam be, ami az újban változott a régihez képest, pl. a T32-es ID-t tartalmazó sorban a Cím, a Felmondott szerződés, és a Szerződés megszűnésének időpontja.
A Tabla_uj.xlsx-ben a makró működésének könnyebb ellenőrzése érdekében festettem sárgára a változott cellákat. Természetesen erre nem lesz szükség élesben.
Adott két táblázat, azonos struktúrával, de időnként változó értékekkel. A nevük ezt tükrözi: Tabla_regi.xls, Tabla_uj.xls
Feladat: összehasonlítani az új táblát a régivel, és a változásokat egy harmadik táblában listázni: Valtozaskovetes.xls
A Valtozaskovetes.xls fájl struktúrája megegyezik az alap két tábláéval, de pluszban kell két oszlop. Az első plusz oszlop az első helyen lévő ID után kerül be, Megjegyzés néven. A második plusz oszlop a legvégére kerül Változás időpontja néven, és a változás aktuális dátumát jelzi, azaz a rendszeridőt (ma()).
Ha több változás is volt egy vásárlónál, akkor annyiszor kell másolni a teljes sort az új táblából, ahány darab változás előfordult a különböző mezőkben (cím, azonosító stb.).
Ha teljesen új a vásárló, akkor egyszer hozzuk át a teljes sor tartalmát át, ilyenkor a Megjegyzés: Új vásárló
A Megjegyzés kategóriák: Új vásárló - az ID alapján döntjük el (korábban nem létezett ID) Itt a teljes sort hozzuk át az új táblából Módosított ID A módosítás kategóriáknál annyiszor szerepeltetjük a vásárló összes adatát, ahány mező módosult, ha pl. 3 mező tartalma módosult, akkor 3 megjegyzés lesz és háromszor ugyanaz a sor Módosított Vásárló név Módosított Kapcsolat típus Módosított Raktári azonosító Módosított Város Módosított Cím Módosított Vásárolt termék Módosított Kapcsolattartó Módosított Más terméketet is kér Módosított Mióta ügyfél Módosított Felmondott szerződés? Módosított Szer.megszűn.időpont? Plusz oszlopba, Változás időpontja alá tegye be a rendszeridőt minden soron
Remélem, a fájlokat sikerült csatolni.
Mivel a valóságban több ezer soros táblákról van szó, az Exceles két ablak összehasonlítása verzió nem lenne túl jó megoldás, fkeres függvényezni meg ismét nem célszerű ennyi soron és ennyi változónál (még több van valójában).
Hogy indulnátok el? Logikailag az új tábla mezőértékeit változókba olvasnám be, és ezzel hasonlítanám össze a régi tábla értékeit, a kérdés már csak az, hogy hogyan?
A Jelöltek lapon csak az egyik körzetet hagyd meg, töröld a D oszlopot.
Ha valaki több körzetben is jelölteti magát – vagyis hétszentség, hogy saját magát akarja képviselni, nem a körzetet –, akkor egy másik sorba vidd be az adatokat.
Az egyes lapokon a bevitt adatokat táblázattá alakítottam, ami azt jelenti, hogy új adat bevitelekor a teljes új sor örökli a fölötte lévő cellák képleteit, érvényesítéseit, és a formátumot.
Mikor a Jelölő pártok lapon bővíted a sorokat, a Jelöltek lap E oszlopában lévő érvényesítések ennek megfelelően változnak.
Jo reggelt, vegre sikerult befejezni a kulso takaritast, most johet a belso, ha benne vagytok.;)
Mivel az irasom stilusat kifogasoltatok, ismet megjegyzem, hogy probalok hangosan gondolkodni, de mivel nem vagyok szakerto, vannak dolgok, amiket tenykent kezelek, de nem ugy van. Ugyhogy keretik ilyenkor erre felhivni a figyelmemet, nem erossegem a kommunikacio.
Ugy tunik, a feladat adatrogziteses resze nagyon egyszeru, de a kesobbi elemzesek eleg bonyolultak lesznek, ezert szukseg lesz adatrendezesre es segedadatokra is.
Amitol nagyon felek, azok a grafikonok, jo lenne valami automatizmust talalni ra, mert egyesevel ezernyit csinalni nagyon idegolo lesz.:-((
Tehat, az adatbevitel az elejen egyszeru, mindossze ennyit kell rogziteni, de ket lepesben:
1. szavazas datuma, szavazokorzet, reszveteli arany, szavazasra jogosultak szama (ez nem mindenhol ismert)
2. jelolt neve, jelolo szervezet neve, kapott szavazat. (esetleg elert helyezes, vagy mas jelzes a kesobbi elemzesekhez)
Ha tablazatba viszem be, akkor - ahogy javasoltatok is - mindent egy sorba kell rogziteni, az 1-eseket igy egymas utan ismetelni kell a 2-esek szamatol fuggoen.
Azert kerdeztem az adatbazist, mert akkor az 1-eseket kulon kell bevinni, es a 2-eseket kell hozza csatolva rogziteni.
Illetve ugye rogton adodik a ketfele adatismetleses problema. Tablazatnal ha azonos, vagy hasonlo adatot irunk be, a program felajanl egy mintat, ami mar elofordult. Adatbazisnal viszont csak egyszer szerepelhet az adat, ami szervezeteknel nagyszeru, de ha 23 kulonbozo Kis Pista szerepel kulonbozo helyeken, akkor ezeket meg kell kulonboztetni, ami kulon nyomozast kivan, hiszen ugyan az a szemely maskor vagy esetleg azonos idoben mas korzetben is jeloltethette magat.
Ugy tunik, az adatokat evente kell rogziteni, mert ugy lehet majd kovetni a szavazokorzetek valtozasait, az meg kulon adatokat igenyel majd.
Az elso kerdesem akkor az, hogy szerintetek hogyan celszeru az adatbevitelt megvalositani, tablazatba vagy adatbazisba, es a fentiek elegendoek, vagy modositasra szorulnak.
Köszi, hogy foglalkozol a problémámmal:)) értem, és csinálom.
De valami hiba még mindig van...bár egy kicsit kezdő vagyok...
Hiába a hét.napja() függvény, erre nekem #name hibát ír ki. Mi lehet a baj? A dátumos cella dátumként van formázva. Próbáltam dátumfüggvénnyel is beírni a dátumot ( bár rettentő macerás lenne így beírni 156 dátumot), de ugyanezt a hibát írta ki..
A1- maga a dátum ( 1 adott nap)
B1- túlórák száma
C1 - idejönne a kiszámolt összeg.( hétköznap 1000ft/óra, hétvégén 1500/óra)
Sziasztok! Segítsetek! AZ excellben van olyan függvény, ami egy dátumról ( pl 2014.08.22) el tudná dönteni, hogy az munkanap vagy hétvége? Túlórákat kellene kiszámolni, és más óradíj tartozik a hétköznaphoz, mint a hétvégéhez. Ha még az ünnepnapokat is "érzékelné" a függvény, még jobb lenne...
Nincs ilyen automatizmus az excelben. Makróval a munkalapváltás eseményébe be lehet írni, hogy minden egyes beírás után rendezzen újra.
Szerintem a beírást követően a rendezés gombra kattintani sem túl nagy kényelmetlenség. Főleg, hogy az eszköztárra ki lehet tenni a gombot, vagy billentyű kombinációhoz lehet rendelni... Beviszem a változásokat, megnyomom a rendező billentyűkombinációt, és kész is.
Lehet kimutatástáblát készíteni az adataidból, ez rendelkezik sorbarendező paraméterekkel is, ami a kimutatás(pivot) tábla frissítéssel automatikussá válik.
Nagyon köszönöm így majdnem tökéletes. minden müködik csak amikor bezárom a munkafüzetet hiba keletkezik mert a munkafüzet lapvédelemmel védett. A2 cellát feloldottam, fehérre festettem a kiszámított dátumot, így aki használja talán nem töröl bele. Azért kellett elrejtenem mert ezt a kiszámított dátumot az A10 es cellába szöveggel összefűzve használom ami már látható védett de így nem szól a makróhiba miatt.
Üdvözlök mindenkit! Lenne egy kérdésem: Van egy táblázatom, benne emberek (A oszlop), akik az idő során különböző pontszámokat kapnak (B-X oszlop) AZ Y oszlopban összesítve vannak az egyének által kapott pontok, a BL oszlopban pedig a sorszám található, amelyik megadja, hogy hanyadik az illető a csoport sorrendjében. Kérdés: Mivel a B-X oszlopokban gyakran változik az eredmény, megvalósítható-e az, hogy az érték beírása után az automatikusan kiszámított sorrend alapján automatikusan rendeződjön az állomány, vagy csak a Kijelölés - Adatok - Sorba rendezés... módszerrel kézzel lehet megcsinálni? (Jó lenne a pillanatnyi sorrendet mindig látni.) ____________ Excel2002
Az egyéni kategóriában ki tudod választani, majd a RÉSZÖSSZEG függvénnyel összegezheted az oszlopot. Ez a függvény mindig az aktuális szűrésben látszó értékeket szummázza.
köszönöm szépen mindkettőtöknek a segítséget. Fferi utolsó makrója megoldotta a problémát hálás vagyok.
De még van egy kis bibi :) Fferitől kapott makró és minden függvény csak számokkal tud dolgozni ezért át kellett alakítanom a makrót így:
If Not Intersect(Target, Range("A9")) Is Nothing Then If Not Range("A2").HasFormula Then Range("A2").Formula = "=MA()+H2"
Az A9 es cella lenyíló számokat és betűket tartalmaz. Ha itt változtatom az értéket egy másik munkalapon csak számként jelenik meg. Ezt a számot a =szum(másikmunkalap!B2) függvénnyel visszahozom a Munka1 be a H2 cellába. tehát a makró ezzel dolgozik. Még is hiba van az A2 be mégpedig "a képlet azonosítatlan szöveget tartalmaz" A szerkesztő lécbe folyamatosan ott van =MA()+H2 de az eredmény #név. Ha a szrkesztő lécbe kattintok majd entert ütök a képlet változatlan marad de hozza a dátumszámítást helyesen.
Pontos címeket írj, ne "pl:A9 ben változik az érték" módon.
Nagy nehezen előbányásztam a füzetet, amiben 1 éve megírtam a makrókat.
Abban az egyes lapokon az általad meghatározott sorokban összevont cellák vannak az A:D, és F:I oszlopokban. Egy-egy lapon Ter_1, Ter_2, és Ter_3 nevet adtam ezeknek a tartományoknak, amikben érvényesítések voltak. Ott az volt a feladat, hogy ha bármelyik lapon választasz egy értéket bármelyik érvényesítésben, akkor a másik két lapon az ezzel azonos érték helyett üres string legyen.
Most mit is akarsz elérni? Melyik lapon hova viszel be dátumot, és mi változzon meg ennek a hatására? Konkrét helyeket írj, melyik cellákba írhatsz, melyek mire módosuljanak.
Munka1(Also) Private Sub Worksheet_Change(ByVal Target As Range) Dim nev, lapnev$ Application.EnableEvents = False Application.ScreenUpdating = False lapnev$ = ActiveSheet.Name nev = Target.Value If Not Intersect(Target, Range("Ter_1")) Is Nothing Then Torles nev, lapnev$ Range(Target.Address) = nev If not Intersect(Target, Range("A1")) Is Nothing Then If Not Range("B1").HasFormula Then Range("B1").Formula = "=today()-A1" ' ide természetesen a Te képleted kell írni.
endif Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Van egy közös lista amit 3 munkalapon különbözö cellákban lenyílóként lehet elérni.
A cél hogy bármely munkalapon a listából egy elem csak egy cellában szerepelhet, ha tehát a Munka1 valamely cellájába a listából értéket adok és a Munka2 valamely cellájába ugyan azt az értéket kiválasztom akkor a Munka2 cellájába jelenjen meg és a Munka1 cellájából törlődjön. Ez volt eddig Delila makrója ami csodásan működöt.
ehhez szeretném a te makródat párosítani
A Munka1 pl A10 cellája úgy viselkedjen ahogy előzőekben megcsináltad Tehát ha pl:A9 ben változik az érték akkor A10 = Ma()-A9
Tehát a két makró külön kölön elvégzi a feladatát csak amikor Delila összetette már nem.
Az ö makrója megállt: a Munka2-ben kiválsztott cella értéket kapott és ua érték szerepelt Munka1-ben akkor Munka2-ben megjelent és Munka1-ben is holott a Munka1-ből törlődnie kellett volna.
Mára az is kiderűlt hogy a te makród sem müködik Delila makrójával, ugyanis nem fixálta a tegnapi értéket. Mikor ma megnyitottam a mai dátummal dolgozott.
Remélem most érthetően írtam le és bocs ha ködösen érthetetlenül fogalmazok.
Szia köszönöm, de most sem tökéletes. Sajnos egy munkalap megnyitásával csak egyszer tudok változtatni. Ahhoz hogy még egyszer változtassak be kell zárnom majd újra megnyitnom a munkafüzetet.
Bemásoltam a kibővítette makrót és Fferi makróját a
Thisworkbookhoz: Private Sub Workbook_BeforeClose(Cancel As Boolean) Munka1.Range("B1").Value = Munka1.Range("B1").Value End Sub
sajnos a Module1 hibát jelez Run-time error'9': Subscript out of range
itt : Sheets(lapnev$).Select.
és nem is törli az azonos adatot.
Válasz a kérdésre: A makrók így voltak formázva a munkafüzetbe csak kimásoltam a totalcommander jegyzettömbjébe ahol a formátum menün belül a hosszú sorok tördelése be van állítva. Így megmarad a szöveg formázása.
Munka1(Also) Private Sub Worksheet_Change(ByVal Target As Range)
Dim nev, lapnev$
Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Intersect(Target, Range("Ter_1")) Is Nothing Then
Torles nev, lapnev$
lapnev$ = ActiveSheet.Name
nev = Target.Value
Range(Target.Address) = nev
Exit Sub
End If
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
If Not Range("B1").HasFormula Then Range("B1").Formula = "=today()-A1" ' ide természetesen a Te képleted kell írni.
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
A Thisworkbookhoz is vidd be Fferi makróját.
Kérdés: a makrót ömlesztve mutatta a fórum, egyenként kellett szétszabdalnom a sorokat, és szóközökkel pótolnom a tabulátorokat. Két böngészővel (Google Chome, és FireFox) is ilyen gyalázatos külsővel hozta. Te hogy vitted be tagoltan? Ugyanígy?
ActiveWorkbook.Names.Add Name:="Ter_3", RefersToR1C1:= _ "=Felso!R8C1,Felso!R10C1,Felso!R15C1,Felso!R17C1,Felso!R19C1,Felso!R24C1,Felso!R29C1,Felso!R31C1,Felso!R36C1,Felso!R41C1,Felso!R8C6,Felso!R10C6,Felso!R15C6,Felso!R17C6,Felso!R19C6,Felso!R24C6,Felso!R29C6,Felso!R36C6,Felso!R41C6" End Sub
A Munka1(Also)-be szeretném Fferi50--töl kapott kódot
Konkrétabban: Ha A1 a lenyíló cellád és B1 a számított a Munka1 munkalapon akkor a munkalap kódlapjára ezt írd be:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Application.EnableEvents = False If Not Range("B1").HasFormula Then Range("B1").Formula = "=today()-A1" ' ide természetesen a Te képleted kell írni. Application.EnableEvents = True End Sub
A Thisworkbook kódjába pedig ezt írd be:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Munka1.Range("B1").Value = Munka1.Range("B1").Value End Sub
Így a munkafüzet minden becsukásakor fixálódik a B1 cella értéke, de amikor megváltoztatod a lenyílódat, akkor ismét visszakerül bele a képlet.
Hasznos ez a cucc, de nem ilyenre gondoltam. Hanem egy olyanra, hogy ha pl egy henger térfogatát, felszínét, akarom kiszámolni, akkor elég legyen csak bepötyögni az átmérőjét és a magasságát. Azaz ne kelljen a függvényt nekem megírni hozzá.
Sajnos csak most tudok válaszolni. Köszi jól működött a makrós-tömbképletes megoldásod. Esetleg van arra lehetőség, hogy vagy csak makróval vagy csak képletekkel van megírva a szövegkeresés?
Makró esetében pl.: két változóban (sor és oszlop) tárolná az eredményeket, ez azért lenne jó mert egy másik makróba lennének beillesztve vagy annak lenne ez a szövegkeresés a része.
Egyébként értékre kellene keresni, nincs képlet a cellában és nem szövegrészre, hanem a teljes szövegre. Nem tudom, hogy szükséges-e bármilyen egyéb info
"Összetett vizsgálatok esetén legfeljebb 64 HA függvényt ágyazhat egymásba érték_ha_igaz és érték_ha_hamis argumentum formájában."
Viszont a te esetedben én megfontolnám az index - hol.van függvények párosítását, ami sokkal egyszerűbb módon ad megoldást, erre találták ki. A hol.van függvénnyel megkeresed a sort és az oszlopot az INDEX pedig visszaadja az eredményt:
MIlyen hosszúságú lehet egy függvény maximálisan, mennyi "ha" és egyéb kitételek szerepelhetnek egy cellának az érték meghatározásánál?
kb miről is van szó? :
az egyik munkalapon van egy véletlen számsorom: pl A1:2, A2:6, A3:4, A4:7, A5:9, A6:9, A7:10, A8:12
a másik munkalapon egy táblázat van. a táblázat fejlécén rendre 1-12 ig vannak a számok, ugyanígy a sorok elején szintén 1-12 ig a számok.
a kereszteződési pontokban szintén értékek vannak.
az összes lehetőségre tehát ha Ha az 1. munalapon 2 után 6 jön akkor a 2. munkalap táblázatából a 2.sor 6. oszlop metszéspontjában található értéket írja ki, ha viszont a 2 után 12 jön akkor az ammak megfelelő értéket.
Egyáltalán sima függvény-kombóval ezt megtudom egyáltalán oldani?
Elfelejtettem valamit. Ahol szeretném futtatni az általad készített makrót ott már fut egy a Delia10 által készített makró. Egyszerűen csak írjam tovább az End rész után vagy új makróként rögzítsem. Most nem tudom kipróbálni mer nincs nálam az a munkafüzet.
AAJJAJ. Balfék vagyok. A probléma azt hiszem hogy nem makróbarát fájlként mentettem el. Most működik. Meglátom holnapra hogy reagál de már most tudom ha te segítesz biztos jó lesz.
Ha megváltoztatod a lenyílót, akkor sem lesz belőle képlet? A Worksheet_change makrót a munkalap kódlapjára kell bemásolni, ott ahol a bal oldalon meglátod lenyílót a General és a Worksheet értékkel, válaszd a Worksheetet. A jobb oldali lenyílóból válaszd ki a Change-et. A megjelenő Private Sub - end sub közé másold be abból amit írtam a közte levőket.
Ha nem megy, tegyél fel lsz. egy mintát valahova és megnézem.
De annyira amatőr vagyok:) Nálam nem működik. Azaz bemásoltam a kódokat kiválasztottam A1 ből egy értéket eddig minden jó bármely értékre hozza az eredményt. A probléma a munkfüzet bezárása és újranyitása után van: az előző számítás ott van de már nem tudom megváltoztatni másra.
Ezt elég bonyolultan lehet megoldani. Ha csak egy ilyened van, akkor a bezárás előtt a számított cellát alakítst át értékké és úgy mentsd el a munkafüzetet. Ezt a thisworkbook beforeclose eseménykezelésben tudod megtenni: második_cella.value=második_cella.value
Majd amikor megnyitod és átállítod a lenyílóban az értéket, akkor írd át képletre.
Ez utóbbit a worksheet_change eseményben tudod megtenni, kb. így. if not második_cella.hasformula then második_cella.formula="=ma()-lenyilócella"
Konkrétabban: Ha A1 a lenyíló cellád és B1 a számított a Munka1 munkalapon akkor a munkalap kódlapjára ezt írd be:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Application.EnableEvents = False If Not Range("B1").HasFormula Then Range("B1").Formula = "=today()-A1" ' ide természetesen a Te képleted kell írni. Application.EnableEvents = True End Sub
A Thisworkbook kódjába pedig ezt írd be:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Munka1.Range("B1").Value = Munka1.Range("B1").Value End Sub
Így a munkafüzet minden becsukásakor fixálódik a B1 cella értéke, de amikor megváltoztatod a lenyílódat, akkor ismét visszakerül bele a képlet.
Egy cella legördülö választó lista aminek a tartalma szám+betű (1 nap).
Egy másik cella tartama a ma fügvény - az előző cella tartalma.
A lényeg hogy a ma függvényből vonjon ki annyi napot amennyit az első cellában kijelölsz. Ez meg is valósul. De én azt szeretném hogy a következő nap a tegnapi érték maradjon. Tehát már ne a ma függvényből számoljon de ha változás történik az első cellában akkor újra a ma függvényből számoljon.
Nem mindegy, hogy a keresés a cella értékére, vagy a cellában szereplő képletre irányul. Nézd meg lsz. Ctrl+F után előjövő párbeszédpanel egyebek gomb megnyomása után láthatókat.
Gondoltam, ezekre akkor térünk rá, ha nem tetszik az első megoldás. Meguntam folyton visszakérdezni a hiányzó információkra. (Már jó rég meguntam, ami azt illeti.)
Én beállítanám, hogy értékben keressen - vagy csinálnék egy paramétert rá, hogy képletben vagy értékben keressen, ami esetleg elhagyható, de akkor az érték legyen az alapértelmezett. Vagyis hozzátenném a lookin paramétert.
A szövegről sem tudjuk, hogy az a teljes cella tartalma-e, vagy annak csak egy része. Ezért vagy "*" & Keresett_szöveg & "*" -ot keresnék és akkor jó a lookat:=xlwhole, vagy lookat:=xlpart és akkor megtalálja akkor is, ha nem a teljes cella tartalom egyezik.
Ez azért is fontos szerintem, mert a find megtartja azokat a korábbi keresési beállításokat, amin nem változtatunk
Igaz, a kérdező mindkét fenti kérdésről bölcsen hallgatott.
egyelőre a képletet próbáltam csak, olyan képletet viszont nem találtam hogy szövegkeresés csak olyat, hogy szöveg.keres, ami viszont nem ugyanaz szerintem.
Function Szövegkeresés(Vizsgált_tartomány As Range, Keresett_szöveg As String) Dim Arr(1 To 2) As Long, Hit As Range
Set Hit = Vizsgált_tartomány.Find(what:=Keresett_szöveg, lookat:=xlWhole) If Hit Is Nothing Then Arr(1) = -1 Arr(2) = -1 Else Arr(1) = Hit.Row Arr(2) = Hit.Column End If Szövegkeresés = Arr End Function
Ha pl. a vizsgálat tartomány A1:H12, a keresett szöveg pedig L2-ben van, akkor
Olyan problémám van, hogy szeretnék függvényekkel, jobb esetben makroval meghatározni egy táblában egy cella helyét, amiben szöveg van. Az oszlop és a sor számára lenne szükségem.
pl.: az excel szót írtuk a L23-as cellába, akkor nekem arra lenne szükségem, hogy a 12. oszlopban és a 23. sorban van, úgy hogy csak az excel szóra kereshetek rá, az alapján kellene meghatározni a helyét.
a hol.van függvényt sajnos csak egy oszlopra lehet használni tudtommal, táblázatban nem használható.
az oszlop és sor függvényekkel az a baj, hogy a cellára csak a sorral és osszloppal lehet hivatkozni pont amire szükségem van.
egyéb mátrix függvények sem jók.
Makrót sajnos annyira nem vágom, hogy ilyet írjak.
Van valakinek ötlete, hogyan lehet megoldani, a makro talán még jobb lenne, de a függvényes megoldás is érdekelne ha van.
A sorok között viszont némi pökhendiség jön át, amit én viszonylag nehezen viselek el
Bocsanat, nem volt szandekomban.
En amolyan mogorva tipus vagyok, aki nem sokat beszel, csak a vegeredmenyt mondja, mert ha megprobalom elmagyarazni a reszleteket, tul dagalyos leszek es felreertenek.
Most sajnos par napig van mit takaritani a haz korul, igy azzal leszek elfoglalva, utana irok egy tomor osszefoglalot.
"Raadasul ugy kell megtenni, hogy majd adatbazisba lehessen attenni, amirol meg senki se tudja, hogyan fog kinezni, mert eloszor az adatokat kell rogziteni."
Szóval téglákat gyűjtesz egy épülethez, amiről azt se tudod, hogy fog kinézni. Felhúzol 1-2 falat, aztán jöhet a tervező?
"Azzal kezdtem, hogy nem ertek hozza, ezert kerek segitseget."
A sorok között viszont némi pökhendiség jön át, amit én viszonylag nehezen viselek el olyantól, aki szívességet két tőlem. Meglehet, nem volt ilyen szándékod, de a hatás ott van, és ez esetben kérdés, hogy mitől gyakorolsz ilyen hatást másokra.
"A masik a penz volt, eleve azt felteteleztetek, hogy ez egy nagy penzt hozo buli."
Tévedés. Más kérdés, ha valami gigaprojektről van szó, amibe 80+ munkaórát bele kell tenni, ilyesmit nem szoktunk grátisz felajánlani, Feri is erre célozhatott. De alapvetően ezen a fórumon nem pénzért mérik a segítséget. Ami viszont nem jelenti azt, hogy ingyen van. A jó válasznak jó kérdés az ára. Értelmes, átgondolt, konkrét kérdés kell. Esetedben még 4 hozzászólás után sem derült ki, hogy milyen segítséget is vársz valójában.
Már "csak" azt kellene tudnunk, hogy milyen jellegű adatokat kell rögzítened. Mert ettől nagyban függ az adatbevitel hibamentesítésének lehetősége.
Legalább azt mond már el, hogy milyen papír alapon létező adathalmazról beszélsz (mert a választás az egy dolog, de ahhoz kapcsolódva sok-sok féle adat keletkezik): kérdőív, jegyzőkönyv,jegyzetek,feljegyzések stb, és mi azok tartalma szöveg, szám, papírdarabonként hány 10-100-1000 adat lesz.
Továbbá: Ha csak egy iskolai dolgozat lesz, akkor miért is izgat ennyire az adatbevitel pontossága? Nem lebecsülve a feladat fontosságát, de nem mindegy, hogy éppen 10 vagy 100 került be oda arra az adott helyre. Nyulat fognak vele lőni?
Nem érted. Az ellenséges hozzáállás kizárólag a stílusodnak szól, amivel menőnek próbálod meg eladni magad, holott minden második mondatodból kiderül, hogy nem értesz a témához, és nem tudsz jól kérdezni sem.
Ez mar onmagaban ellentmondas.
Azzal kezdtem, hogy nem ertek hozza, ezert kerek segitseget.
Erre nekem estek, hogy "tanar vagy, megse tudsz semmit."
(Mert, ugye, egyedul a tanar az, aki azert kerdez, hogy a masik tudja-e a valaszt. Mindenki mas azert kerdez, mert valaszt szeretne kapni.)
A masik a penz volt, eleve azt felteteleztetek, hogy ez egy nagy penzt hozo buli.
Egyikrol sincs szo.
Latom, hogy az adatrogzites nagyon egyszeruen megoldhato, de sok hibalehetoseget tartalmaz a kesobbi elemzeshez. Ezert kertem segitseget.
Az kevés, részmegoldásnak itt nincs értelme. Ez mindent vagy mindent játék.
"En legszivesebben rogton adatbazisba rogzitenem az adatokat, igy kikuszobolhetoek az elgepelesekbol adodo hibak."
Független, egyedi adatok begépelésekor elkövetett hibákat semmilyen adatbázis adatbeviteli felülete nem szűri ki. Annyit tudhat esetleg, hogy egyes beírandó adatok listából választhatóak, és akkor nem áll fenn az elgépelés veszélye. Ezt viszont Excellel is meg lehet oldani.
"Na igen, mar ertem az ellenseges hozzaallasotokat."
Nem érted. Az ellenséges hozzáállás kizárólag a stílusodnak szól, amivel menőnek próbálod meg eladni magad, holott minden második mondatodból kiderül, hogy nem értesz a témához, és nem tudsz jól kérdezni sem.
De ajánlok egy alkut. Menj be egy autógumi szaküzletbe, és kérj 4 db gumit a nem létező autódhoz, aminek még a típusát, márkáját, meg semmijét nem tudod, csak azt, hogy a Dunán szeretnél vele eljutni Moszkvába. Majd valamikor. Aztán amikor az eladók értetlenül néznek, világosítsd fel őket, hogy ne bénázzanak itt, te olyan embert keresel, akinek van autógumiban tapasztalata. Ha sikerül ott ezek után autógumit venned, gyere vissza ide, és megígérem, hogy segítek megoldani a feladatodat, és nagyon-nagyon türelmes leszek.
"Ez egy diakdolgozat lesz es ev vegere vagy januar kozepere kell leadni"
Újabb érdekes csavar.
Iskolai feladatoknak az szokott lenni a lényege, hogy a nebuló megértse a dolgok működését. Ezek általában kamu adatokkal mennek, és a program vagy adatbázis vagy beképletezett táblázat logikai felépítésére kíváncsiak, nem a hatszázezer adat hibátlan begépelésére. Sőt, inkább rendelkezésre szoktak állni az adatok elektronikus formában. Kíváncsi lennék, melyik iskola az, ahol ilyen feladatokat adnak ki.
"Szenvedes annal tobb, mert be kell gepelni az adatokat, az lesz az en reszem.;)"
Ha csak az adatbeviteli hibák kiküszöbölése a célod, akkor olvasd el, amit az Excel súgó az adatérvényesítésről ír. (Vagy keress rá a gugliban.)
Egy korábbi hsz-odból:
"Annyi biztos, hogy minden idoponthoz es helyhez tartozo adatot kulon tablazatba kell rogziteni, ugyhogy tobb szaz tablat kell majd kezelni."
Az egyetlen biztos dolog is már egy rossz kiindulás. Mindent egy lapra kellene, ahol a hely is egy oszlop meg az idő is. Ezt nyugodtan továbbadhatod a barátaidnak, akik piszkos munkát lepasszolták neked.
Nos akkor a diák gondolom már kellőképpen felkészült informatikából és minden kérdésedre fog tudni válaszolni.
Egyébként ha papíralapról viszel be adatokat, ott is lehet ellenőrzést csinálni már a bevitelnél: Pl. kötegekbe fogod össze és a számokból csinálsz egy ellenőrző számot és a köteg végén begépeled. Ha egyezik, akkor nagyjából biztos lehetsz benne, hogy helyesen vitted be az adatot. Ellenőrző számot is többféleképpen lehet képezni, hogy minél inkább elkerülhető legyen az azonos jellegű hiba (pl. két számcsere, aminek következtében az összeg nem változik meg). A kötegek is lehetnek "elviselhető" nagyságúak, hogy ne többszáz adatban kelljen hibát keresni, hanem mondjuk 10-20-50 adat egyeztetésére legyen szükség.
Szerintem erre (mármint az adatbevitel ellenőrzési lehetőségeire) biztosan találsz több módszert is a neten.
Továbbá, ahogy írtam korábban, ha még nem lehet tudni, hogyan fog kinézni az adatbázis, az a kisebbik baj, mert a bevitt adatokat lehet kezelni excelben és adatbázis által "megehetővé tenni", ez "csupán" makrók kérdése - ahogyan Jimmy is írta korábban. De az adatoknak felismerhető formában kell az excelbe bekerülni - tehát minden adatról tudni kell és be kell vinni azokat a jellemzőket, ami alapján később csoportosítani, feldolgozni szeretnék majd.
Tehát a viszontkérdés: A munka melyik részében szeretnél segítséget??
Ahogy ismerem Jimmyt, mosakodásnak venné, ha a 4. pontjához fűzött mondatodra válaszolna.
Méltatlannak találom a "mar ertem az ellenseges hozzaallasotokat" gondolatodat. Ha figyelmesebben olvasnál, a lényeget láttad volna meg: "ha van egy felhasználó, aki tökéletesen átlátja a feladatot és a célt, illetve van egy informatikus, aki ért az adatbázisokhoz, és ezek ketten jó alaposan átbeszélik az egészet, elejétől a végéig" . Ez a feltétele egy jó program megírásának.
Ilyeneket írtál a feladat meghatározásához:
"majd adatbazisba lehessen attenni, amirol meg senki se tudja, hogyan fog kinezni, mert eloszor az adatokat kell rogziteni."
2) Ha a majdan keletkezett adathalmazt relációs adatbázisként akarod használni, erősen ellenjavallt a különböző időpontok adatait külön munkalapokra rögzíteni. Mindent ugyanarra a munkalapra kell, és legyen egy külön oszlop az időpont.
Ez reszben megoldhato.
En legszivesebben rogton adatbazisba rogzitenem az adatokat, igy kikuszobolhetoek az elgepelesekbol adodo hibak.
irtad:
4) A speciális/egyedi célra épült adatbázisok akkor működnek jól, ha ..
Na igen, mar ertem az ellenseges hozzaallasotokat.
Ez egy diakdolgozat lesz es ev vegere vagy januar kozepere kell leadni, ugyhogy megnyugtathatok mindenkit, hogy nincs penz benne. Szenvedes annal tobb, mert be kell gepelni az adatokat, az lesz az en reszem.;)
Úgy értettem, ha egyszerre több cella eredményét is szeretné helyben módosítani, akkor az csak makróval megy. (Hiszen a képletet csak másik cellába lehet "normálisan" beírni, különben körkörös hivatkozás lenne.)
Hát ez már csak ízlés dolga....Mármint, hogy akarok-e előbb kijelölni és utána makrót indítani, vagy egyből mehet mindenre. A lényeg, hogy van többféle függvény is rá és csak makróval működik.
Sub cserel() Dim cl As Range For Each cl In ActiveSheet.UsedRange.Cells If Not cl.HasFormula Then cl.Value = StrConv(cl.Value, vbLowerCase) End If Next End Sub
Minden olyan cellában, ahol nincs képlet, a cella tartalmát kisbetűsre cseréli.
A Fejlesztőeszközök | Vezérlők | Beszúrás-nál az Űrlap-vezérlőelemek közül tedd ki a Beviteli listát. Cellacsatolás nálam az X1. Ha ez nem jó, akkor a makróban írd át. A címsor miatt szerepel a makróban a sor meghatározásánál +1. Ha nincs címsorod, radírozd ki a +1-et.
A makró:
Sub Masol() Dim sor As Long sor = Range("X1") + 1
Range("A" & sor & ":F" & sor).Copy Workbooks("Megérkezett.xlsx") _ .Sheets("Megjött Mf").Range("A105") End Sub
Nálam az A:F tartományban vannak az adatok, írd át a makróban ezt a két betűt a saját tartományodra. A legördülőhöz rendeld hozzá a Masol makrót.
A tétel kiválasztásakor automatikusan átmásolja a kiválasztott sor adatait a másik füzet A105 cellájától kezdve.
Segítséget kérnék az ügyben, hogy egyáltalán meg lehet valósítani a következőt és ha igen akkor milyen irányba keresgéljek(pl kulcsszavak).
Van egy excel amivel menedzselem a megrendeléstől a megérkezésig az árút. Azt szeretném megvalósítani, hogy ha az adott sornál pl Rendelés.xslx Folyamatban mf BJ117-nél egy drop down listből kiválasztom, hogy megjött mozgassa át egy másik excel-be(ami a kollégámé) pl Megérkezett.xlsx Megjött Mf A105. De akár lehet tükörképe is egymásnak a munkafüzet. Azaz első xslx-ben BJ117 akkor a második xlsx-ben is a 117 sorba írja be a szükséges oszlopokat ami a név mennyiség érkezés dátuma.
Amik eszembe jutottak:
Segítséget kérek tőletek :D
Ami nagyon valószínű hogy szerintem ezt makro-val lehet. Sajnos nem értek hozzá és nem is tudom hogy mint kezeli az adatátviteleket.
Másik ötletem az a csv-s export/import. Mert könnyű hálózaton kezelni.
Megosztott munkafüzet
Kimutatás készítés
Ha meg lehet ezt excellel valósítani ti melyik irányba indulnátok?
Mihez képest? Mert a 2007-es szalagja "felcsukható", és akkor máris több a megjeleníthető sor, de a sormagasság is állítható. Arról nem is beszélve, hogy kicsinyíthetsz is.... (jó ez úgy emlékszem a 2002-ben is müxik).
Nem tudom miért. Ez van a gépen, meg a 2007-es, de annak már a szalgos menürendszere van. Egyszerűbb dolgokhoz a 2002-est használom. Meg a 2002-esnél több sor fér el a képernyőn.
Egyelőre nincsenek makrók. De akkro maradok ennél az egyveleg megoldásnál.
Még jó, hogy azért figyelmeztet a csonkolásra az excel.
Viszont egy nagy táblázat esetén - ahol nem egyértelmű, hogy hol lehet csonkolás, vagy mert nem akarok keresgélni - mi lehet a megoldás? Jelöljem ki az egész tartományt az eredetinél és írjam felül a az új lapon a csonkoltat is tartalmazó tartományt?
A munkalaphoz tartozó kódok(makrók, eseménykezelés) biztosan nem mennek át ezzel a másolással.
Mi van akkor, ha előbb munkalapot másolsz - persze a csonkolással -, aztán a kritikus cellát szépen odamásolod az új munkalapra - feltéve, hogy akkor nem kiabál már.
A munkalapot másoltam volna munkafüzeten belül a "végére". Eközben azt az üzenetet írta az excel, hogy 255 karakternél több van egy cellában, ezért azt ő megcsonkolja. Excel 2002 a szoftver.
Nem lehet ezt valahogy kicselezni?
Ha ezt a cellát másolom egy új munkalapra, akkor átmásolja csonkolás nélkül. Sőt rábökve a bal felső "cellára", azaz kijelölve a munkalap tartalmát és másolva egy új munkalapra, akkor sem csonkolja meg.
Ilyen másolás esetén elveszhet valami adat vagy formázás, a fülön végzett másolással összevetve; persze nem számítva bele a csonkolást?
Ugy tunik, csak nekem volt egyertelmuek a kerdeseim.;)
Akkor menjunk sorban.
1. Volt "szerencsem" ugy tiz evvel ezelott hasonlo munkahoz. Excel 95-be kellett adatokat begepelni, majd parszor modosittattak, kinyomtattak, ket emberke keresztbe-hosszaba osszepipalta az adatokat. Azutan azt mondtak, minden rendben, mehet Acces 97-be.
Nem ment, csak a szoveges adatok voltak hibatlanok, a datumokkal allando, a szamokkal veletlenszeru gondok voltak. A datumokat ujra be kellett gepelni, majd jottek a hibakeresesek, ezuttal access es excel rekordok kozott, melyik szam nem stimmel.
Most meg mysql vagy hasonlo lesz a cel, amit meg nem is lattam.
2. Azert nem tudjak meg a vegleges strukturat, mert minden valtozott. Hosszu idosort kell rogziteni. Az eleje egyszeru, adott telepulesnek van x valasztokorzete, adottak a partok es a jeloltek.
Azutan a jeloltek elkezdenek partokat valtogatni, tehat a part/szemely szimpatia elemzes problemas, plane, ha oda-vissza tortenik bizonyos szemelyek reszerol a mozgas.
Azutan jonnek a partokhoz kozel allo szervezetek, valamint a "fuggetlen, de bizonyos part tamogatja" tipusu nevezesek. ezeket kulon kodolni, de kozben osszekapcsolni mas parttal vagy jelolttel megint erdekes lesz.
Majd megvaltoznak a szavazokorzetek, annyira, hogy tobb telepulest is osszevonnak.
Nem lehet tobbe egy korabbi telepulesre vonatkoztatni az adatokat. Valtoznak jarasi, megyei keretek, korzetek. Falvakbol varosok lesznek, es viszont.
Jon az ujabb valtozas, nemcsak a jeloltek szama, hanem a helyek szama is valtozik.
Amennyit hallottam, jelenleg azon megy a vita, hogy szakaszonkent legyenek kulonbozo adatbazisok, es a szakaszhatarokat akarjak megtalalni.
Annyi biztos, hogy minden idoponthoz es helyhez tartozo adatot kulon tablazatba kell rogziteni, ugyhogy tobb szaz tablat kell majd kezelni.
3. Az elobbiek alapjan megint attol tartok, hogy nagyon szep, hogy ha van egy adat, akkor azt elektronikusan lehet kezelni, meg atadni, de biztos vagyok abban, hogy elotte jo parszor ki lesz nyomtatva es osszepipalva.
4. Szoval es tettel, ne vegye senki magara, nem vitatkozni jottem, csak tanacsot kerni, hogyan lehetne minel kevesebb idegeskedessel meguszni, mert azt lattam, hogy meg azonos ceg programjai kozott se volt jo az adatatvitel, pedig ugye ...
"Ezert kerdeztem, van-e valakinek gyakorlata ilyen teren."
Hát, ha ez a kérdés, akkor igen egyszerű a válasz: van.
Ennyivel akár el is intézhetnénk, hiszen megválaszoltam a kérdésedet, de lásd kivel van dolgod, mondok még egy-két dolgot.
1) Értelmetlen kérdésre ne várj értelmes választ. (Bővebb információért olvasd el a topik fejlécében belinkelt ajánlott irodalmat.)
2) Ha a majdan keletkezett adathalmazt relációs adatbázisként akarod használni, erősen ellenjavallt a különböző időpontok adatait külön munkalapokra rögzíteni. Mindent ugyanarra a munkalapra kell, és legyen egy külön oszlop az időpont.
3) Ha már egyszer rögzítve vannak az adatok, azokat a később kitalálandó adatbázis adatszerkezetének megfelelően átcsoportosítani valószínűleg ujjgyakorlat lesz csupán. (Pár soros makró.)
4) A speciális/egyedi célra épült adatbázisok akkor működnek jól, ha van egy felhasználó, aki tökéletesen átlátja a feladatot és a célt, illetve van egy informatikus, aki ért az adatbázisokhoz, és ezek ketten jó alaposan átbeszélik az egészet, elejétől a végéig. Amennyiben a kérdésed az őszi önkormányzati választásokhoz kapcsolódik, még bőven van idő egy informatikus keresni. Szerintem ezzel kellene kezdeni, nem az adatrögzítéssel.
Már ne haragudj, de szerintem azzal, hogy nem tudom milyen adatok lesznek - csak azt, hogy sok és változó (sajnos az adatok természete egyébként már csak ilyen) - nem sok mindent lehet kezdeni.
Talán próbáld meg magad megtervezni az adatokat - esetleg mégis rábírni a későbbi adatbázist tervezőket, hogy méltóztassanak megmondani, milyen adatokra lesz szükségük, mert amit egyszeri és megismételhetetlen adatfelvételkor nem veszel fel, azt hiába is akarják később adatbázisba betenni....
Erre van egy legenda -nagyon rég történt, amikor bevezették az MNB-be a számítógépes rendszert - megkérdezték az MNB akkori elnökét, hogy milyen adatokat kér, akkor azt válaszolta "mindent". Az amerikai tanácsadók - mert Honeywell számítógépeket vettek, elég nagyokat - azt modták erre: mindent azt nem lehet, csak konkrét adatokat lehet kérni a géptől.
Nehogy Te is így járj. Felveszel egy jó csomó információt Excelbe, aztán kiderül, hogy fele nem kell, de legalább ugyanannyit hiányolnak majd - ja, mert közben eszünkbe jutott, hogy ez is jó lenne még, meg az is jó lenne még....
Egyébként az a véleményem, ha az excellel "megetted" az adatokat egyszer, akkor onnan már be lehet vinni adatbázisba (is akár), legfeljebb némi munkába (sokba-kevésbe) kerül az adatbázis rekordok összeállítása a kívánt szerkezet szerint.
De ami ott van az Excelben, az kivehető belőle, ami meg nincs benne - nos azt sajnos nem tudod kivenni belőle.
Nyilván nagyon jó lenne, ha az adatok felvételekor tudni lehetne az adatbázis szerkezetét, mert akkor már most "rekordként" vehetnéd fel az egyes sorokat, de mint korábban írtam, ez nem szükségszerű, csak munkát lehet vele megtakarítani.
Egy kis off: megvan az egyéni véleményem arról, aki úgy gondolja, hogy az adatbázisát majd az adatok rögzítése után "találja ki"!
Ha valami közelebbi információd keletkezik, valamennyien szívesen segítünk, de amíg "négereket látunk egy sötét alagútban a kivilágítatlan vonat előtt vagy után???" , addig elméletieskedésnél sokkal többen ne nagyon várj.
Igen, mint ahogy minden gyerek hordozhato, mert van fule. :-)
Tablazatba olyan adatokat jo bevinni, amelyek ismetlodnek.
Ennel azonban minden valtozik.
Idopontonkent uj munkalapra kell rogziteni az adatokat, ami mar maceras.
Raadasul ugy kell megtenni, hogy majd adatbazisba lehessen attenni, amirol meg senki se tudja, hogyan fog kinezni, mert eloszor az adatokat kell rogziteni.
Nem akarok feleslegesen napokat tolteni adatrogzitessel, hogy kesobb az egeszet ujra kelljen kezdeni.
Ezert kerdeztem, van-e valakinek gyakorlata ilyen teren.
A Most() azok közé a függvények közé tartozik, amelyek folyamatosan frissülnek. Ha napon belül állandónak szeretnéd látni az értéket, akkor használd a Ma() függvényt - természetesen ez is változik, mindig az aktuális napi dátumot mutatja.
Ha rögzítani akarod az adott értéket, akkor másolás - irányított beillesztés - értéket ugyanazon a cellán végrehajtva.
Segitsegre lenne szuksegem, gondolom nem meglepö :)
A gondom a következo. Egy olyan függveny vagy keplet kellene amibe ha beirok egy elöre megadott nevet , a mellette levö cella kiirja az aktualis idot. Kiserleteztem es jol haladtam amig ra nem jottem hogy a ha függvenybe nem birom beepiteni az aktualis ido parancsot:
=HA(K12="Hedvig";"ide kellene az aktualis idö";"szabadnapos")
Ez azt jelenti hogy ha a K12 be Hedvig van akkor itt az L12 a MOST parancs alapjan kiirja ugye az idöt,, de nem ez törtenik ,hanem akkor annyit ir ki hogy MOST... A szabadnapost meg ugye akkor irja ki ha a cella üres. Tuti van valami trükkje de nem jövök ra... (Win 8.1/Office 365)
Most akkor vagy én értettem rosszul a feladatot, vagy ez már egy másik feladat.
Az első kérdésed az volt, ha beírsz egy értéket a Ketteske adott cellájába, azt írja be az Egyeske egy meghatározott tartományába.
Erre adtam egy javaslatot.
De amit most írsz azt nem egészen értem.
Ha a G1 cellában levő értéket tartomány címként akarod használni, akkor az indirekt függvényt kell alkalmazni: indirekt(G1) azt a tartományt jelenti, amelyiknek a címét a G1 cellába írtad.
Uj tagkent nemreg regisztraltam csak azert, hogy most mar kerdezzek is.
Egy specialis feladatot kaptam, helyi valasztasi adatokat kell rogziteni es kesobb elemezni. Az adatokat excellbe kell begepelni, de adatbaziskent kell majd kezelni.
Van valakinek gyakorlata, tapasztalata ilyen feladatban?
Próbáltam úgy megadni ezt, hogy egyik D1 cellába beírtam az 1-est, E1 cellába a 31-et. D2 cellába 32, E2 cellába 62. Így végig húztam és tök jól kihozta a sorozatot. F1 cellába beírtam egy A betűt és az összefűz függvénnyel összehoztam az A1:A31-et, ezután végig húztam A5891:A5921 -ig, majd másolás majd ugyanott irányított beillesztés értéket. Na és itt vagyok gondban, hogy ebben a G1 cellában meg az A1:A31 és ezt beleapplikálni úgy egy függvénybe, hogy ne G1-ként ismerje fel hanem A1:A31-ként.
Köszönöm a segítséget, ha van erre valami függvény
Köszönöm szépen. Erre esetleg nincs valami automatizmus? pl bemásolok Ketteskébe 15 autót típust és akkor az Egyeskében folytatólagosan azonnal meg is jelenne.
Időközben felvetődött még egy dolog: Ha ezekkel az A1:A31 illetve A32:A62 cellákat végig húzom, akkor ne az jelenjen meg az A63-as cellában, hogy A33:A63 a A63:A93 helyett.
Adott egy tábla két munkalappal (Egyeske, Ketteske). Egyeskében vannak az autók típusai illetve mellette, egy oszlop amiben fel vannak sorolva a hónap napjai és emellett van még, hogy ki vitte ki az autót, mi volt a célja, mikor stb... Ketteskében pedig vannak az autók egyéb adatai. Azt szeretném megcsinálni, hogy Ketteskében elég legyen egyszer felvinni az autók típusát mondjuk a B2 cellában és ez az autó típus jelenjen meg Egyeskében az A1:A31 cellákban. Majd a következő autó típus a Ketteske B3 cellában írva, jelenjen meg Egyeske A32:A62 celláiban és így tovább.
Segitsegre lenne szuksegem, gondolom nem meglepö :)
A gondom a következo. Egy olyan függveny vagy keplet kellene amibe ha beirok egy elöre megadott nevet , a mellette levö cella kiirja az aktualis idot. Kiserleteztem es jol haladtam amig ra nem jottem hogy a ha függvenybe nem birom beepiteni az aktualis ido parancsot:
=HA(K12="Hedvig";"ide kellene az aktualis idö";"szabadnapos")
Ez azt jelenti hogy ha a K12 be Hedvig van akkor itt az L12 a MOST parancs alapjan kiirja ugye az idöt,, de nem ez törtenik ,hanem akkor annyit ir ki hogy MOST... A szabadnapost meg ugye akkor irja ki ha a cella üres. Tuti van valami trükkje de nem jövök ra... (Win 8.1/Office 365)
Excelben behívod pl. Alt+F11-gyel a VB szerkesztőt. Bal oldalon kiválasztod a füzetedet, Insert menü, Module. Jobb oldalon kapsz egy nagy üres felületet, oda kell bemásolni a makrót, amit a 25592-es hsz-ben Neked írtam.
Ott az alkalmazását is leírtam. A sok # akkor jelenne meg a HA függvénybe ágyazás nélkül, mikor üres cellára hivatkozol az Idok függvénnyel.
A munkalapnak van egy xlveryhidden tulajdonsága, amit ha bekapcsolsz, akkor "mezei" felhasználó nem láthatja és a listákban sem szerepel (pl. a jobb egérgomb a munkalap nevére listában sem).
Tehát, ha tudod, hogy ki lépett be, akkor a hozzá tartozó munkalapot láthatóvá teszed, a többit pedig xlveryhidden-né, ezt nyilván a munkafüzet open eseményéhez kell rendelni.
Olyat lehet csinálni excelben, hogy közös használatú a file, sok-sok füllel, de adott ember csak a saját fülében tud szerkeszteni, a másikét nem láthatja? Lehet hogy hülyeség az egész, de azért csak megkérdezem.
Sztem a kolléga TNorbinak válaszolt nem nekem ezért nem is néztem azt a választ...
Hát az van hogy ha üres cella van az oszlopban akkor az ugye nullának számít és így rossz időkülönbséget számolna. Azaz addig kellene ciklus szerűen visszalépni még nem talál nem üres cellát így valószínűbb az említett makros megoldás de azt se tudom olyan hol van az excelben, ill igazából OO Calcban, sose használtam.
2007-es Ecxelt használok. Törlésnél arra gondoltam, hogy amikor megnyomom akkor az utolsó bemásolt sortól kezdve minden megnyomásra töröljön vissza egy sort.
A törlés nem tiszta nekem. A gomb megnyomására törölje az alsó sort, bármi legyen benne, vagy ha többször másoltál 1-1 sort, akkor azok közül az utolsót törölje?
Segítséget szeretnék kérni, egy userform-ban van egy combobox, megadtam a tartományt ami 8 oszlopot foglal magába. Azt szeretném megoldani, hogy ha kijelölök egy sort és mondjuk lenyomok egy parancsgombot akkor mind a 8 oszlop celláiban található értéket beszúrja egy másik munkalapon lévő sorba. Így egymás után max 20 sor feltöltését szeretném. Valamint egy másik parancsgombbal (Törlés) törölni lehessen visszafelé a sorokat.
Function Idok(cella As Range) Dim sor As Long, oszlop As Integer sor = cella.Row: oszlop = cella.Column
If Cells(sor - 1, oszlop) > "" Then Idok = cella - cella.Offset(-1) Else Do While Cells(sor - 1, oszlop) = "" sor = sor - 1 Loop Idok = cella - Cells(sor - 1, oszlop) End If End Function
Érdemes majd egy HA függvénybe beágyazni. Pl. az idők az E oszlopban vannak, akkor
=HA(E2="";"";idok(E2))
hogy a függvény másolásakor ne adjon egy halom #-ot.
Remélhetőleg a név, cím, kódszám különböző oszlopokban szerepel. Mármint egy oszlop a név, egy oszlop a cím és így tovább.
Ebben az esetben kellene egy fejléc, azaz az oszlop első cellája legyen a meghatározás, mondjuk a név.
Ezután adatok - speciális - listatartomány a név oszlop, szűrőtartomány a név oszlop első cellája, más helyre másolja, az új helynek válassz ki egy cellát, csak az egyedi rekordok bepipálod, majd ok. Az új helyen láthatod, hány sor lett.
Ha egy oszlopban ömlesztve vannak, akkor szét kell őket választani. Remélhetőleg van valamilyen elválasztójel. Akkor adatok - szövegből oszlopok és beírod az elválasztójelet (ha nincs spéci elválasztójel, akkor próbáld a szóközt - igaz ekkor a név két -vagy több - oszlopba fog kerülni, de azokat utána könnyebb összerakni.). Ezután folytatod az előzőekben leírtakkal.
Vagy a név oszlopot átmásolod egy új helyre - ezután adatok - ismétlődések eltávolítása.
Közepesen laikus excel-felhasználó vagyok, abban kérném a segítségeteket, hogy van egy 25e< soros ömlesztett táblázatom ami neveket, címeket, kódszámokat tartalmaz. Egy név többször is szerepel, és ebből szeretném leszűrni azt, hogy hány különböző ember szerepel benne (ergo minden név csak egyszer szerepeljen). Milyen beállítással és hogyan tudom ezt az adatot egyszerűen kinyerni? 2007-es excelem van.
Arra kéne valamit kitalálni, hogy ha egy oszlopban függvénnyel vizsgáltatom a szomszédos oszlop celláit, nevezetesen abba idő értékek szerepelnek Ó:PP:MM formában és egymást követően a különbségi időket szeretném számoltatni belőlük, viszont vannak üres cellák is közben, akkor azt mivel lehet megoldani, hogy vegye az azelőtti olyan cellából az értéket, ami nem már üres? Tudom hogy van vmi TELI vagy hasonló függvény, csak nekem lépésben kéne egyesével visszafelé haladjon a vizsgálat, amég nem talál nem üres cellát.
Arról már nem is beszélve, hogy nem is csak egyetlen celláról lehet szó. Pl. Activesheet.usedrange.cells. Nos ez biztosan nem egy cellát jelent, hanem egy kicsivel többet....
Egy elrettentő példát már feltettem ide egy tankönyvből. Most egy haver küldött egy idézetet egy kezdőknek szólóból:
A Cella (Cells) a Munkalap (WorkSheet) és a Tartomány (Range) objektumnak egy olyan tulajdonsága, mely paramétereiben hivatkozott cellához a megfelelő - egyetlen cellát tartalmazó - Range típusú objektumot rendeli.
Ebből biztos könnyen megtanul programozni a delikvens. :)
Excel 2007-től működik az Adatok - ismétlődések eltávolítása.
Előtte pedig:
Adatok - szűrők - speciális - szűrendő terület az oszlopod, kritérium az oszlop feje - helyben szűrés és utána átmásolás, vagy új helyre másolja és megadod neki az új helyet. Ennél a szűrésnél kell fejléc az oszlopra.
Ha van egy listám, amiben nagyon sok minden többször (mindig más mennyiségben) szerepel, de nekem minden csak egyszer kell rajta, akkor arra van gyorsabb módszer, mint sorba tenni, és manuálisan törölgetni a felesleges sorokat?
A beállítások - képletek - menüpontban lehet átállítani, S1O1 hivatkozási stílusnak nevezik.
Ilyenkor az oszlopok is számmal vannak jelölve. A hivatkozás pedig a minta szerinti, tehát az A1 cella S1O1 a képletekben.
A relatív hivatkozások is érdekesek , pl. lehet ilyen képlet, hogy =S[-3]O1, ami 3 sorral előbb és 1 oszloppal arrébb hivatkozik.
A VBA-ban van ilyen lehetőség, hogy a képletet S1O1 formában is ki tudod íratni, csak miután a VBA nyelve angol, ott az R1C1 a "divat".
Activecell.FormulaR1C1, sőt van FormulaR1C1local is, ami nálunk S1O1-et mutat az R1C1 elnevezés helyett.
De átállítás nélkül is megkaphatod a cellák S1O1 formátumú címét az address ReferenceStyle:=xlR1C1 paraméterével.
Bizonyára vannak helyzetek, amikor jobban "festenek", könnyebben megírhatók ebben a formában a képletet, de nekem elég zavaróak voltak, amikor megpróbáltam egy kicsit közelebbről megismerkedni velük, úgyhogy maradtam a A1 formula mellett.
Ha már itt tartunk, hallottam egy tanártól egy éve hogy excelben vagy O.O. Calcban átállíthatóak a táblafejlecek jelzései, hogy ne betűzöttek hanem ugyanúgy sorszámozottak legyenek. Erről mit tudunk bővebben, hogy lehet átállítani és ami lényegesebb, hogy a hívatkozások ezután hogy változnak?
Igen, az oszlop() az egy függvény, amelyik ebben a formában az adott cella oszlopának számát adja vissza. Tehát a B oszlopban az oszlop() függvény a 2 -es számot adja vissza, a C oszlopban levő celláknál 3 az eredmény, és így tovább.
Viszont, ha beírod a konkrét tartományt a zárójelek közé, akkor az ahhoz tartozó oszlop számát adja vissza:
Pl. ha oszlop(C3) a képlet, akkor pedig az eredmény 3, mivel a C oszlop a harmadik oszlop - és ebben a formában bármelyik cellába is írod a képletet, mindig 3 lesz az eredmény.
Rendben van ez így (bár én szeretem az Fkeres utolsó paraméterét is megadni, akkor is, ha az alapértelmezést használom).
A példámban az Fkeres harmadik paramétere - az oszlop szám - azért szerepelt képlettel, mert a kérdésedben az egész sort említetted, hogy szeretnéd átvenni.
Feltételezve, hogy a táblázatod A1-nél kezdődik, és a kereső munkalapon is A oszlopban van a keresési érték, akkor azzal a képlettel a táblázat minden celláját át tudod másolni könnyedén és nem kell átírni az oszlopszámokat.
Természetesen, ha a keresést mondjuk a C oszlopban levő érték alapján a D oszlopban kezded, a táblázat pedig a másik lapon A oszloptól kezdődik, az oszlop()-2 adja meg a jó oszlopszámot az Fkereshez.
Valóban nagyon sok esetben jó az Fkeres /vkeres, de ennél azért az Index - hol.van páros egy kicsit még többet tud, mivel így nem csak az első oszlop/sor alapján lehet keresni, illetve a keresés tárgya lehet hátrább, mint a megkapni kívánt eredmény.
Ebben az esetben az fkeres függvényt kellene használnod, végig az adott soron:
A oszlopba beütöd a sorszámot
B oszloptól a képlet:
=fkeres($A$1;adatok!$A$1:$D$200;oszlop();0)
Vagy:
Az A oszlopra teszel egy érvényesítést, ami a sorszámokat tartalmazza és abból választasz, a képlet ugyanaz mint fent.
Viszont ebben az esetben nem kell feltétlenül sorszámnak lennie az azonosítónak, lehet betű és szám is, nem kell rá emlékezned, hiszen a listából kiválaszthatod.
Adatok - érvényesítés - list és a lista forrásának az adatok munkalap első oszlopának értékes részét kijelölöd (ezt akár el is nevezheted és akkor névvel lehet megadni az érvényesítés listáját).
Van egy excel táblám árutétel nevekkel és tételszámokkal. Lehetséges-e, hogy egy másik táblában vagy épp egy másik munkalapon én csak sorszámokat gépeljek a cellákba (ne hívatkozási képleteket hogy ehhez mindig ide oda kattingatni kelljen a táblák közt) és lehozza a másik listából a sorszámnak megfelelő tételek nevét, amit ki szeretnék gyűjteni ill. akár az adott sort? Esetleg ez a fajta adatfeldolgozás már adatbázis kezelés témaköre?
Pl. ilyesmire gondolok:
árutétel listája ---------------- 1 | cipő | női | 35 méret | piros 2 | cipő | női | 37 méret | fekete 3 | kalap | női | fehér 4 | cipő | ffi | 40 mért | kék 5 | ing | ffi | 38 méret | fehér
Nekem pl. a kalap és az ing kell egy másik táblában majd szerepeljen, tehát csak beütném a tételszámát hogy 3, a másiknál hogy 5 és a teljes sort átemelné a listából.
Igen, a 75 a "data" munkalapon lévő oszlopok száma ebben a verzióban.
A bent használt éles táblázatban az évek alatt és az igények bővülésével már azt hiszem, 130 fölé hízott az oszlopszám, és dokumentumtípusonként kb. 20 értéket kell cserélnie, szóval jól megdolgoztatjuk a makrót, rá is férne egy kis gyorsítás. (az élesben szerepel a képernyőfrissítés ki-be kapcsolása is, az talán gyorsít rajta egy kicsit)
Én valamikor találkoztam az Application.Version property tesztelésével. És a kapott érték alapján tudtam meghatározni az objektumkönyvtár helyét. Itt találtam egy jó leírást erről: http://www.rondebruin.nl/mac/mac002.htm.
"Tools/References részben be kellett állítani pl. Word objektumkönyvtárat."
A Word objektumkönyvtárnak verziónként eltérő neve van. A 2010-es Officeban 14-es objektumkönyvtár van. Ilyen a 2007-es Officeban nincs, hanem ott 12-es van. Ezért annyi bizonyos, hogy a 2010-ben működő fájl egy az egyben biztosan nem fog működni 2007 alatt, csak ha módosítod a Word referenciát. Vagy egy 2007-es, egyébként működő programban átírod a VBA kódot.
"Köszönöm a "kifogásolható" részekkel kapcsolatos jelzést is, ez már az én feladatom lesz, hátha sikerül egyszerűsítenem."
Az is felmerült, hogy egy cellatartományban miért ciklussal keresi az értéket, amikor a Find metódus pont erre való, és ezerszer gyorsabb?
Illetve, az általad kimásolt kódrész miért éppen 75-ig fut? Fixen ennyi oszlop van a Data munkalapon?
"de nem fogom feladni, mert még sokmindent szeretnék automatizálni :)."
2010-es Excellel tudtam most csak kipróbálni, azon remekül működik. Holnap kiderül, hogy a benti gépeken hogyan viselkedik, de mivel ott az eredeti is ment, így azért bízom benne, hogy nem lesz gond.
Most végiggondolva úgy rémlik, hogy annakidején bent sem indult el zökkenőmentesen a dolog, a Tools/References részben be kellett állítani pl. Word objektumkönyvtárat. A hibaüzenetre így évek távlatából már nem emlékszem.
Így utólag azt hiszem, értem a módosított kódod logikáját. Kár, hogy nem őriztem meg a korábbi próbálkozásaimat, most összevethetném vele, hogy hol tévedtem el. Valószínűleg több sebből is vérezhetett.
Köszönöm a "kifogásolható" részekkel kapcsolatos jelzést is, ez már az én feladatom lesz, hátha sikerül egyszerűsítenem. Csak néhány hete kezdtem érdemben foglalkozni a makrókkal a Kovalcsik-féle könyv illetve egy YT-os csatorna alapján, és sajnos még nagyon az elején járok, de nem fogom feladni, mert még sokmindent szeretnék automatizálni :).
For i = 1 To 75 If ThisWorkbook.Sheets("data").Cells(1, i).Value <> "" Then SearchString = "$" + FormatCellValue(ThisWorkbook.Sheets("data").Cells(1, i).Value) + "(" + ConvertToLetter(i) + ")$" For Each STR In wdDoc.StoryRanges With STR.Find .Format = True .Text = SearchString .Replacement.Text = ThisWorkbook.Sheets("data").Cells(CaseFileRow, i).Text .Replacement.Font.Color = RGB(0, 0, 0) .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue End With Next End If Next i
Ez Office 2010-es (30 napos próba)verzión működött. Nekem itthon 2007-es van, az állt fejre az eredeti kódodtól. Nincs rá garancia, hogy nálatok a 2007-es gépeken menni fog.
Egyébként van a kódban néhány "érdekes" (értsd: szakmailag kifogásolható) megoldás.
Például, minek kell a Trim függvényt 27 soros kóddal (Function FormatCellValue(Value As String) As String) helyettesíteni?
A következő kóddal szeretnék kiválasztani egy textboxban lévő szöveget:
Ezzel működnie kéne, ha jól csinálnám, de valamit nem :(
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("A1")) Is Nothing Then With Me.TextBox1 .SetFocus .SelStart = 0 .SelLength = Len(.Text) End With End If End Sub
Ezt úgy találtam, de a 2010-es excel pl nem ismeri a textbox setfocus tulajdonságát... (Nálam:)
Valóban, a teljes környezet ismerete nélkül lehetetlen küldetés ezt megoldani, erre gondolhattam volna.
Megfogadva a tanácsot, készítettem a táblázatból és a dokumentumokból egy nagyon lebutított, publikus változatot és feltöltöttem egy tömörített fájlban ide:
A táblázat "macro" munkalapjára történő kattintás aktiválja a Userformot. A dummy verzióban csak 2 választható dokumentumtípust hagytam meg az egyszerűség kedvéért. ("level1", "level2")
Az "empty" névvel megjelölt fájlok a template-ek. Ezekből most a "level2" nevű az érdekes, mert itt példaként az élőlábban is szerepel egy "$..$" jelöléssel ellátott szöveg, amelynek a cseréjét szeretném megoldani a makróval.
Meggeneráltam a 0002. sz esetre egy "level2" típusú dokumentumot. ("eredmény" néven elmentve). Ebben látszik, hogy a makró valamennyi megjelölt szöveget kicserélte, kivéve az előlábban szereplőt. (elvárt_eredmény néven elmentettem egy olyan verziót is, ahol kézzel kitöltöttem a szükséges adatot az előlábban)
A lépésenkénti ugrálással már próbálkoztam korábban, de sajnos nem jutottam vele közelebb a megoldáshoz. Ha jól sejtem, ez a kódrészlet végzi el a cseréket, de úgy tűnik, ez csak a szövegtörzsre terjed ki.
For i = 1 To 75 If ThisWorkbook.Sheets("data").Cells(1, i).Value <> "" Then SearchString = "$" + FormatCellValue(ThisWorkbook.Sheets("data").Cells(1, i).Value) + "(" + ConvertToLetter(i) + ")$" With wdDoc.Range.Find .Format = True .Text = SearchString .Replacement.Text = ThisWorkbook.Sheets("data").Cells(CaseFileRow, i).Text .Replacement.Font.Color = RGB(0, 0, 0) .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue End With End If Next i
A megoldás keresése során korábban találtam egy olyan információt, hogy ahhoz, hogy a teljes Word-dokumentumban keressen a makró, a "storyRange" gyűjtemény valamennyi elemét is vizsgálnia kell. Ezen elindulva találtam is példákat erre, pl. előző hozzászólásban linkelt kódrészletet, azonban ezeket már nem tudtam sehogyan sem összehozni a saját makrónkkal.
Csatlakozom. Továbbá a kód szeretne egy Userform-ot megjeleníteni, amely nyilván további kódokat futtat, ám ez utóbbiakat sehol sem találom.
Szerintem célszerűbb lenne feltölteni a munkafüzetet és a template dokumentumot, meg esetleg egy jól kitöltött "eredmény"-dokumentumot is, hogy lássuk, minek kellene képződnie.
Kollégáimmal egy Excel-makrót használunk (2007-es illetve 2010-es Excel) egyes Word dokumentumok elkészítéséhez. A makró a felhasználó által megadott információk alapján megnyitja a mintadokumentumot, és abban a"$..$" jelöléssel ellátott "mezőket" feltölti a táblázatban megfeleltetett adatokkal, majd a megfelelő módon elmenti.
Az eredeti kód nem a saját alkotásom, egy volt kolléga hagyta ránk, és egyelőre csak kisebb változtatásokat tudtam rajta végrehajtani, mert még nagyon-nagyon alapszintűek a makrós ismereteim.
A jelenlegi változatban rendben lefut a makró, a szövegtörzsben minden adatot feltölt, nem ad hibaüzenetet, de az a probléma vele, hogy a Word mintadokumentum előlábában/élőfejében stb. található adatokat valamiért nem helyettesíti be.
Keresgéltem a neten, és annyira jöttem rá, hogy a StoryRanges gyűjtemény lehet a megoldás kulcsa, amivel az előlábban stb. is keresné a makró a "$..$" szöveget.
Ha minden igaz, egy mező lehet több dimenzóban is. Pl az összeget tartalmazó oszlopot behúzhatod értéknek is, meg oszlopnak is. Így már lesz automatikusan képzett végösszeged az értékeknél, ha az oszlopban szűrsz az 1mFt felettiekre
Jó a kimutatás tábla is a célra, de szerintem az összeget tartalmazó mezőt ne az értékek hez húzd, hanem az oszlopokhoz. Így már tudod szűrni a 1mFt felettieket. Persze így nem lesz (automatikus) végösszeged, mert azt csak az "Értékek" dimenzóra állítja elő
Táblázatom jópár szöveges celláját üres cellaként értelmezi az Excel. Mindegy, hogy szövegre vagy általánosra van-e állítva. Szűrést kellene végeznem, de ezeket a cellákat csak üresként értelmezi... Szerintetek mi lehet a probléma??
Csak hogy érthető legyen, ez egy szükséges anyagok listája mennyiségekkel 15 termékhez. Van, amelyik mindegyikben szerepel, van amelyik csak némelyikben. És ebből kellene összeraknom, hogy akkor az adott anyagból összesen mennyi kell. Egymás alá másoltam a 15 listát, sorba rendeztem, hogy az azonos anyagok egymás alá kerüljenek, és az azokból szükséges mennyiséget akarom összeadni. Most megoldottam úgy, hogy beszúrogattam plusz sorokat ehhez a szigmás összegezéshez, de gondoltam, hátha itt tanulok valami gyorsabb módszert legközelebbre.
Ja, és ezzel kapcsolatban lenne még egy kérdésem. Ugye így plusz sorokba lettek beszúrva az összegek. Na már most nekem kizárólag ezek a sorok kellenének, amikből össze lett adva, az nem. Kitörölni viszont nem tudom, mert akkor nem érvényes a képlet. Próbáltam az egészet átmásolni irányított beillesztéssel, hogy akkor már csak az értéket vegye alapul, de úgy meg minden egyéb formázás eltűnik, többek között az összegeket tartalmazó sorok kiemelése is, úgy meg megint macerás megtalálni és törölni közötte a többi sort. Lehet egy képletet automatikusan az eredményt tartalmazó sima számformátummá alakítani dokumentumon belül?
De ott meg valami csoportosítási alapot kér. Nekem hol három számot kell összeadom, hol nyolcat, hol tizenötöt. Lényegében több lista lett összegezve, és az azonos termékek számát kellene összeadni. Ezért tűnt leggyorsabbnak, ha kijelölés után a szigmára kattintok, de az meg következetesen alá akarja tenni az eredményt. A képletet ismerem, csak ugye azt sem tudom másolgatni, mert egymás alatt különböző hosszúságú oszlopokat kell összeadnom, egyenként beírni meg macerás.
Az megoldható valahogyan, hogy ha a SZUM ne a kijelölt cellák alá írja be az eredményt, hanem mellé? Egy táblázatban kellene különböző számú sorokat összeadnom, és ez lenne a legegyszerűbb. Hosszadalmas lenne sorokat beszúrogatni a célra.
megpróbáltam abbyy-val, de a pdf kibontása le van tiltva, így az abbyy nem tud belőle adatot átalakítani. Próbáltam pdf nyomtatóval új pdfet létrehozni, de azt sem engedi.
Ebből a pdf-ből szeretnék a kerület oszlopra rendezni. gondoltam excelbe bemásolva. Sajnos beilleszteni sem sikeredik. Van erre lehetőség, vagy csak a keresővel soronkénti másolgatás marad megoldásnak???
Azt hol tudom beállítani, hogy ha lefelé húzom a cellákat, akkor az alapértelmezett funkció a cellák másolása legyen, és ne a kitöltés sorozattal? Kaptam már táblázatokat, amikben úgy volt, szóval elvileg megoldható. Eléggé lelassítja a munkát, hogy mindig rá kell kattintgatni és átállítani.
Set Conn = New ADODB.Connection 'strConnection = "Driver={Oracle in OraDB11g_home1};Dbq=XXXXX;Uid=myUser;" & "Pwd=myPassword;" Conn.Open strConnection HandleThings Conn.Close End Sub
Private Sub HandleThings() Call QueryTestList End Sub
Private Function QueryTestList() As Boolean
Dim ws As Worksheet, mySQL As String, c As Range
mySQL = "SELECT *.... (szokványos Oracle SQL lekérdezés)" Set ws = ThisWorkbook.Worksheets("Main") Set c = ws.Range("B2") Range(c, c.End(xlDown)).EntireRow.ClearContents Call Retrieve(Conn, mySQL, c) End Function
Function Retrieve(Conn As ADODB.Connection, mySQL As String, Dst As Range) As Boolean Dim Rst As ADODB.Recordset
Retrieve = True On Error GoTo Err Set Rst = New ADODB.Recordset Rst.Open mySQL, Conn, adOpenDynamic, adLockReadOnly Dst.CopyFromRecordset Rst Exit Function Err: Debug.Print Err.Number & " - " & Err.Description Debug.Print mySQL Retrieve = False If Rst.State = adStateOpen Then Rst.Close End Function
Kékkel színeztem azt a sort, ami a fejfájást okozta. Az elmúlt hónapokban végigpróbáltam egy csomó variációt, többek között ezt is, és csak ma jöttem rá, hogy a hiba végig a készülékben volt...
A HandleThings és egyéb szubrutinokban vannak azok az utasítások, amelyek a lekérdezést végzik, és a visszaadott rekordokat a munkalapra másolják.
Az előbb kicsit hamar járt a szám, mert ez bizony használja a tnsnames.ora fájlban konfigurált Local Net Service Name-et (azt kell az XXXXX helyére írni). De jó lesz így is. Tulajdonképpen azért akartam tnsnames.ora megkerülésével, hogy ha a kolléga gépén van Oracle kliens telepítve, akkor ne kelljen rendszergazdát hívni a tnsnames.ora beállításához, hanem anélkül is fusson a program. De mivel amúgy is kell rendszergazda a Group Policy módosításához, egy füst alatt a Net Service-t is konfigurálhatja.
Az ADODB használatához be kell állítani referenciát a Microsoft AcitveX Data Objects 2.8 Library-hoz.
Még egy dologba belefutottam amire még rákeresni sem tudok :D
Van egy dátum mf-em amibe fel van sorolva a 365 nap az A oszlopba. B oszlopban pedig, hogy "aktív" vagy "inaktív". Ez fkeres() és index() hol van() fgv-hez használom.
Hogyan tudnám meghatározni az intervallumot, hogy mi között aktív és melyik az a dátum mikor már inaktív értéke van a B oszlopnak?
Nem próbáltam.... Nem is tudom, miért. Szeretem általában magam megoldani a problémáimat, csak ezzel már legalább egy éve nem boldogulok, tegnap 3-4 órát csesztem el vele, és a végén stresszoldásként írtam egy "hátha bejön" hozzászólást.
Igazából nem hiszem el, hogy az Oracle ennyire béna legyen, hogy olyan rendszert dobnak piacra, amit nem lehet VBA-ból lekérdezni. A neten talált 1000 megoldás küzül legalább egynek működnie kellene. Az a sanda gyanúm, hogy a szeretett céges IT-nk kavar be valami ostoba biztonsági beállítással... A lehetőségeimet meg hihetetlen mértékben lekorlátozzák, egyszerű júzerként egy ODBC DSN-t sem tudok létrehozni, mer' még ahhoz is rendszergazda kell, nemhogy drivert telepíteni, vagy ilyesmi.
De tegnap kiötlöttem a megoldást: létrehoztam egy virtuális tesztrendszert, ahol rendszergazda vagyok, és végre nagy ívben tojhatok az IT-s korlátokra. Aztán ha majd látom, hogy működik, tudni fogom, hogy mit kell beállíttatni velük a fizikai gépeken.
Egyébként a rendszer nem SAP, de bizonyos kényes adatok védelme miatt ennél többet nem mondhatok (és a probléma szempontjából amúgy sincs jelentősége).
Van valakinek tapasztalata arról, hogy hogyan lehet EXCEL VBA környezetben, tnsnames.ora kikerülésével Oracle adatbázishoz kapcsolódni? Olyan módszer kellene, ami 10g és 11g verziójú Oracle klienssel is működik (Win7 alatt, rendszergazda jogok nélkül). A net tele van mindenféle példákkal meg connection stringekkel, de nálam valahogy mind hibára fut, szóval olyan kódot szeretnék látni, ami bizonyítottan működik. Már nagyon régóta küzdök ezzel...
Például a módosítható celláknál a Cellaformázás védelem fülén kiveszed a pipát a Zárolt négyzet elől, majd levéded a lapot (ekkor lép érvénybe a többi cella zárolása).
Vagy: lapfülön jobb klikk, Kód megjelenítése. Bal oldalon lent a Properties ablakban kikeresed a Scroll Area-t, és beírod mellé a területet, amiben engedni akarod a mozgást, pl. A1:B20.
Kaptam egy olyan excelt amiben adatok A1:B20-ig voltak. Tulajdonképpen adatközlés volt. A oszlop szöveg B oszlopba értékeket kellet írjak. A definiált területen kívülre nem is engedett kattintani. Pl B21-re hiába kattintottam még a cellát sem jelölte ki. Ez nagyon bolondbiztosnak tűnik. Hogyan tudom én is megvalósítani? Tudom, hogy van jelszóval védhető, nem szerkeszthető stb de ott a cellát ki tudom jelölni.
De azért nincs kizárva, hogy csak szerencsém volt (mert a végén voltak megfelelő hosszúságú adatok), mindenesetre így talán könnyebb 2-3 "igazítással" megtalálni azt a szélességet, amibe minden rekord belefér.
A jelenséget sikerült reprodukálnom, a magyarázatát nem tudom. Próbáltam utánanézni, de konkrétan erre a kérdésre nem találtam választ. Annyit találtam, hogy tábla oszlopszélességét programból nem lehet állítani, és feltehetőleg azért, mert a júzer, akinek a programot írod, sosem találkozik magukkal az adatbázistáblákkal, hanem csak formokkal.
Form-ra rakott táblanézetben lehet "best fit" szélességet állítani, de az a "visible text"-re vonatkozik.
Szóval ez a probléma szerintem az "ez van, azt kell szeretni" kategóriába tartozik.
próbáltam a bemásolt fájlt is másolni illetve megtaláltam a forrásadat mentése menüpontot is de az ki volt pipálva szóval nem tudom előző kiadású officcal ment ez simán vissza kell raknom mert ez így nem jó...
Vannak-e makrók a kimutatásodhoz kapcsolódóan? Mert az xls -be belemásolja, de az xlsx-be nem. Próbáld xlsm - (makróbarát excel) kiterjesztéssel másolni.
Ötlet: Előbb zárd be a másolt fájlt és csak utána az eredetit.
Ha nincs benne makró, akkor nézd meg az adatok - hivatkozások vagy kapcsolatok (leginkább mindkettő) menüpontban, mit mutat és módosíthatod, ha szükséges.
Még egy ötlet: másold át a bezárt fájlt és úgy nézd meg, mi az eredmény.
tovább pontosítom a leírást : nem csak a kimutatást másolom hanem az egész excel fájlt, ha elmentem xls-nek xlsx helyett akkor jó, tudom másolni pendriveon/emailben akár hogy és a hivatkozás is jó
Viszont így pár funkció ami szükséges nem működik ezért akarom xlsx-nek hagyni
Ha csak a kimutatást másolod, akkor a hivatkozásokat "magával viszi", ezért kiabál. Az elküldés előtt - ha a forrást nem küldöd vele - akkor meg kell szüntetni a forráshivatkozást, a másik verzió, hogy a forrást is küldöd vele.
Egy tipp a hivatkozás megszüntetésére:
A kimutatást tartalmazó munkalapot átmásolod egy új munkafüzetbe. Ebben a munkafüzetben megkeresed a hivatkozások, külső hivatkozásokat és rákattintasz a megszüntetésre.
Ekkor az összes adat fix számmá alakul át, a kimutatás éppen akkori állapota szerint.
(Persze ezt lehet, hogy nem akarod, akkor marad a forrással küldés verzió.)
Mintha lenne olyan opció is valahol a kimutatás tulajdonságainál, hogy forrással együtt mentés - próbáld ezt megtalálni és az átmásolt munkafüzetben beállítani. Elvileg akkor is "elmúlnak" a külső hivatkozások.
a következő problémával kapcsolatban kérnék segítséget:
van egy adathalmazom amiből csináltam egy kimutatást (2013-as excel) , a gond pedig az, hogy ha másolom vagy emailben küldöm akkor kiabál az excel , hogy nem találja a külső adatforrást, mert az elérési útvonal nem a kijelölt adathalmazra hivatkozik hanem az eredetileg létrehozott excelre. Lehet nem túl érthető leírom egy példával:
eredeti excelben így néz ki a kimutatás forrása:munka!$AE$3:$AI$24
a másoltban pedig így : Users**** laptopDesktop[proba.xlsx]munka1'!$AE$3:$AI$24
azt szeretném elérni hogy a másolással ne hivatkozza meg nekem az eredeti fájl helyét hanem maradjon meg úgy mint az eredetiben volt
keresgéltem a súgóban meg a neten pár helyen de nem igazán találtam rá a megoldásra
Szerintem nyugodtan feltehetsz itt Access kérdéseket is. Word-öt és Powerpointot is programoztunk már, mi gond lehetne belőle? Cooper kartács biztos nem fog kitiltatni érte. Ha pedig megy az angol, akkor meg határtalanok a lehetőségeid, mert rengeteg angol nyelvű fórum van, jobbnál jobb szakértőkkel.
Nyilván nem ugyanaz egy táblázatkezelő és egy adatbázis kezelő működési alapelve.
Az excelben sok-sok képletezési lehetőség van, ami egy adatbázis kezelőben "természetesen" hiányzik.
Cserébe az access rengeteg adatot tud kezelni gyorsan, jelentések, kimutatások lényegesen gyorsabban jönnek belőle, mint excelből és a korlátozás is kevesebb. Viszont nem árt érteni az adatbázis logikához (kapcsolatok, kulcsok, stb.).
Tehát feladata válogatja, hogy melyiket célszerűbb használni. Nekem volt szerencsém mindkettővel dolgozni, mindkettő elég barátian viselkedett. (Volt olyan, amit excelben kezdtem el, de "kinőtte magát", ezért access lett belőle.)
Off: "Lehet, egy adatbázis kezelő (akár acces) sokkal jobb lenne."
Ez nagyon sok feladatra igaz lenne, de....
Amikor intenzíven dolgoztam egy személyi nyilvántartó programon, többen felvetették, hogy miért nem access-ben írom. Akkor azt feleltem, hogy azért, mert az Excelt ismerem, az Accesst nem, így nem tudom, mekkora munka lenne áttérni, és abban oldani meg a feladatot.
Ma már áldom a szerencsémet, hogy az Excelnél maradtam.
1. Az Accesshez nem találtam tisztességes szakirodalmat.
2. Van ugyan néhány Access fórum itt az indexen: "MS Access - Segíccség kéne, de gyorsa" és az "Access programozas" című és talán egy harmadik is, amelyekben havonta, néha félévente ír valaki. Ezek többsége is kérdés, vagy - mint az én esetemben - egy egészen oda nem illő válasz.
Szóval megfelelő háttér nélkül egy kezdőnek, illetve autodidaktának sajnos nem nagyon lehet komolyabb feladatokat Access-ben felvállalnia.
Azt nem tudom, hogy létezik-e más adatbáziskezelő, ahol az ember megfelelő háttérrel tud programot írni.
Excel2010-ben már működik a Hahiba(hosszúképlet,"") függvény is.
Elsőre nekem is ez jutott eszembe, ha már megvan az új fájl, akkor frissíti, de azt még nem néztem meg, mi van akkor, ha a frissítéskor sincs meg.
Amúgy szerintem rá kellene bízni a makróra az összesítések bekérését, én nem feltétlenül képletben képzeltem ezt el, lehet, hogy elég értékben betenni.
De még gondolkodom rajta és valószínűleg levelezni is fogok papamacival - téged is beteszlek cc-be.
Megjött, megnéztem. Első pillantásra elég komplikáltnak tűnik, hogy honnan hová kerülnek az adatok. Van erre valami szabályszerűség? Ma biztos, hogy nem fogok elmerülni benne, talán hétvégén. (Ha közben Fferi küld egy megoldást, szólj légyszi, hogy már nem aktuális). Két kérdés/gondolat:
1) Mennyire fix ezeknek a fájloknak a szerkezete? Lehet módosítani rajta, ha úgy gondolom, hogy más szerkezettel könnyebb lenne a feladatot leprogramozni?
2) Alternatívaként próbáld ki azt, hogy =HA(HIBÁS(hosszúképlet);"";hosszúképlet) Ez megszünteti a #HIV! hibaüzeneteket, és a helyükön üres sztringeket hoz létre. Az üres sztring nem okoz problémát az összegzéseknél, szóval a táblád használható lesz annak ellenére, hogy pl. a forrásfájlok többsége nem létezik. Azt gondolom (mármint nem vagyok biztos benne, ki kell próbálni), hogy ha a hiányzó fájlok elkészülnek, akkor a külső hivatkozások frissítésével az új adatok át fognak jönni. Pl. az összegző táblázat következő megnyitásakor.
Tehát kb. 70 dolgozó, kéthetente 1 file, 36 héten keresztül, azaz idestova 1260 file. Egy file-ba csak egy dolgozó adatai kerülnek, amit ő készít el.
Közös használatú lesz az a munkafüzet, amit a dolgozók töltögetnek, mert egy közös meghajtóról érhető el, és így egyszerre többen is tudnak benne dolgozni. A mentés és a file nevének generálása automatikus.
Hiába teszem be az összesítőt, akkor is olyanra hivatkoznék, ami még nem létezik és ugyanaz lenne a hibajelenség, mintha külön összesítőt készítenék.
Elküldöm e-mailben (ha nem gond) és akkor egyértelműbb lehet az egész.
Tutibiztos, hogy ezt csak excelben kell megoldani. Arról nem tudunk semmit, hogy hány dolgozóról van szó, milyen időtávokra vonatkoznak az egyes fájlok és hány dolgozó ír egy-egy fájlba. Lehet, egy adatbázis kezelő (akár acces) sokkal jobb lenne.
Ha már excel, miért nem gondolkodsz közös használatú fájlban. Abba egyből beleteheted az összesítő munkalapot is akár.
Csatlakozva az előttem szólókhoz, szerintem érdemes lenne egy kicsit pontosabban leírni a feladatot (nem a "hadititkokra" gondolok, csak az alap körülményekre).
"Hát, ez az a kérdés, amire ennyi információból senki nem fog tudni jól válaszolni. Az ilyen rendszereket alaposan át kell gondolni és megtervezni. Mi az egésznek a célja? Milyen legyen a forrásfájlok és az összesítő táblázat szerkezete, hogy a legjobban segítse a programlogikát? Milyen rendszerben kell a lekérdezés? Kell-e felhasználói felület, ahol válogatni/szűrni lehet az adatok, fájlok, stb. között? Ha kell, milyen funkciókat tudjon? Mik a hibalehetőségek, és ezeket milyen mélységben, hogyan vizsgálja/kezelje a program?"
A cél: a dolgozók által elkészített (jellemzően szám)adatokat tartalmazó táblázatból egy összesítő táblázatba beültetni az adatokat. A forrásfileban 87 adat van oszlopokba rendezve, és azt kellene a gyűjtőbe sorokba rendezni. Semmilyen szűrésre nincs szükség, csak egyszerű adatátültetésre. De amíg nincs meg a forrásfile, addig a tábla elkészítésénél folyamatosan hibát kapok, ha képlettel hivatkozok. Első körben igen, úgy gondoltad, hogy képletekkel működne a gyűjtő munkalap, azonban ezeket a képleteket makró írja be, de csak akkor, ha elkészült a forrásfájl.
"Ezért gondoltam a makrós megoldásra, amiben olyan feltételt kell szabni, hogy csak akkor töltődjenek ki az összegyűjtő táblázat cellái, ha a dolgozó létrehozta azt a file-t, amire hivatkozik az összegyűjtő file bizonyos cellája."
Itt egy kis zavart érzek az Erőben.
Ami "hivatkozik", az képlet. Úgy gondoltad, hogy mégiscsak képletekkel működne a gyűjtő munkalap, azonban ezeket a képleteket makró írja be, de csak akkor, ha elkészült a forrásfájl? Tulajdonképpen megvalósítható...
"A kérdés, hogy milyet és hogyan?"
Hát, ez az a kérdés, amire ennyi információból senki nem fog tudni jól válaszolni. Az ilyen rendszereket alaposan át kell gondolni és megtervezni. Mi az egésznek a célja? Milyen legyen a forrásfájlok és az összesítő táblázat szerkezete, hogy a legjobban segítse a programlogikát? Milyen rendszerben kell a lekérdezés? Kell-e felhasználói felület, ahol válogatni/szűrni lehet az adatok, fájlok, stb. között? Ha kell, milyen funkciókat tudjon? Mik a hibalehetőségek, és ezeket milyen mélységben, hogyan vizsgálja/kezelje a program?
Ha ezek mind ki vannak találva, és fejben megvan, hogy mit, honnan, hová kellene pakolni, akkor lehet konkrét makrókód megírásába kezdeni.
"...azért nem működik a tökéletes képlet, mert a dolgozó véletlenül beletett egy plusz szóközt a fájlnévbe, kötőjel helyett alulvonást írt, nem a Munka1-ra, hanem a Munka2-re dolgozott, stb..." - A dolgozók által elkészített file-ok neveivel nem lesz gond, mert az automatikusan képződik a beforesaveas és a beforeclose segítségével.
"Egy makróval meg bármikor le lehet kérdezni a dolgozói fájlokat, ki lehet benne térni hibalehetőségekre, többször is megismételhető a lekérdezés, ha valami miatt elsőre nem sikerül. Szóval én ezt biztosan makróval oldanám meg." - Hát erre gondolok én is, de nem tudom hogy milyen makrót és hogyan használjam.
"Talán létre kell hozni előre kamu dolgozói fájlokat, hogy a külső képlethivatkozások rendben legyenek, megcsinálni a képleteket úgy, hogy ha nincs érték a forrásfájlokban, akkor a képletek üres sztringet eredményezzenek..." - na de 70 dolgozó 10-10 fileját hozzam előre létre?, az akárhogyan is számolom 700 file; na ezen tépném a nem létező hajamat.
Ezért gondoltam a makrós megoldásra, amiben olyan feltételt kell szabni, hogy csak akkor töltődjenek ki az összegyűjtő táblázat cellái, ha a dolgozó létrehozta azt a file-t, amire hivatkozik az összegyűjtő file bizonyos cellája. A kérdés, hogy milyet és hogyan?
Képletezéssel nem nagyon lehet megoldani, hogy ne legyen a cellában semmi, csak ha már a dolgozó létrehozta az xy forrásfájlt. Max azt lehetne megoldani, hogy a beképletezett cellák tartalma semminek látszódjék. De szerintem a 3500 képlet nagy szívás lenne hosszú távon. Lelki szemeim előtt megjelenik egy haját tépő papamaci, aki három órás kutatás után jön rá, hogy azért nem működik a tökéletes képlet, mert a dolgozó véletlenül beletett egy plusz szóközt a fájlnévbe, kötőjel helyett alulvonást írt, nem a Munka1-ra, hanem a Munka2-re dolgozott, stb...
Ráadásul ha valamit véletlenül elrontasz és elmented, az úgy marad.
Egy makróval meg bármikor le lehet kérdezni a dolgozói fájlokat, ki lehet benne térni hibalehetőségekre, többször is megismételhető a lekérdezés, ha valami miatt elsőre nem sikerül. Szóval én ezt biztosan makróval oldanám meg.
Ezzel együtt nem kizárt, hogy képlettel is lehet... Talán létre kell hozni előre kamu dolgozói fájlokat, hogy a külső képlethivatkozások rendben legyenek, megcsinálni a képleteket úgy, hogy ha nincs érték a forrásfájlokban, akkor a képletek üres sztringet eredményezzenek, aztán törölni a kamu fájlokat, és imára kulcsolt kézzel remélni, hogy a dolgozók hibátlanul végezzék el az adatfeltöltést minden hónapban.
Hogyan tudom megoldani excel 2010-ben az alábbi problémát?
Az alaphelyzet a következő: A dolgozók minden hónapban készítenek egy adattáblát. Az elkészült táblákból én össze kívánom gyűjteni az adatokat egy közös táblába. Azonban a közös összegyűjtő táblát már most meg szeretném csinálni előre 10 hónapra, hogy később ne kelljen vele havonta szórakoznom.
Most ha behivatkozom az összegyűjtő tábla celláiba a forrásfile celláit, akkor rögtön kéri a forrásfile elérési útját, ami azonban még nincs, hiszen ezután fogják csinálni a dolgozók. Ha nyomok egy „Mégse” gombot, akkor egy cellában átíródik a nem létező forrásfile neve (és lesz benne egy „#HIV” felirat, de ezt kb. 3500-szor kellene megcsinálnom, ami kicsit unalmas. Ezt szeretném kiküszöbölni.
Olyan feltételt szeretnék szabni az összegyűjtő táblázat összes hivatkozással ellátott cellájának kitöltéséhez, hogy csak azután írjon bele bármit is (na jó, a kért és hivatkozott adatot), miután a dolgozó létrehozta a hivatkozott forrásfilet.
A másik megoldandó probléma szintén ehhez kapcsolódik. Azt is meg kell valahogyan oldani, hogy ne egyesével kérdezgesse a frissítéseket, hanem egyszerre és automatikusan végezze azokat el, amikor megnyitom az összegyűjtő táblázatot.
Segítségeteket előre is köszönöm.
Ui.: az előző problémát sikerült megoldanom, köszönet érte a hozzászólóknak.
Private Sub CommandButton1_Click() Dim mesternev As String, masolatnev As String, sor As Integer mesternev = Cells(1, 1).Value sor = 2 Do While Not IsEmpty(Cells(sor, 1))
if range("T1").value<> range("S1").value then
if dir(cells(sor,2).value & cells(sor,3).value,vbdirectory)="" then
mkdir cells(sor,2).value & cells(sor,3).value
endif
endif FileCopy Source:=mesternev, Destination:=Cells(sor, 1).Value sor = sor + 1 Loop range("S1").value=range("T1").value End Sub
Próbálkoztam de nem jött össze, valszeg az általam elgondolt metódushoz nem passzol a folyamat.
Belenyúlni pedig nem tudok/merek :)
Mellékelek egy képet.
Az A1 cellában a mesterfájl útja. A C2 cellában írom át a kívánt mappanevet,(lefele beírja mindenkiét mert ez azonos) . B oszlopban a szerver(ek) neve, (ami mindenhol különbőző :) ) E ben pedig a nevek, (azért így csináltam mert időnként változik). Ezeket összefűzi az A oszlopba, és a gombra kattintva megy a másolás.
Bemásoltam a T, és S cellákba amit írtál , és minden sorba a kódokat :), de nem műxik.
Most visszaállítottam mindent az eredetire, így működik, de csak akkor, ha előzőleg létrehozom a mappát.
Megkérlek szépen, ránéznél erre is, hátha van megoldás ? Köszönöm !!
Private Sub CommandButton1_Click() Dim mesternev As String, masolatnev As String, sor As Integer mesternev = Cells(1, 1).Value sor = 2 Do While Not IsEmpty(Cells(sor, 1)) FileCopy Source:=mesternev, Destination:=Cells(sor, 1).Value sor = sor + 1 Loop
A hónap neve legyen mondjuk a T1 cellában (innen fűzi be a névhez). Ugyanezt a hónap nevet írd be az S1 cellába is konkrét név legyen mindkét helyen, nem képlet.
Mielőtt a másolás (for ciklus) elindulna, azaz a for utasítás elé tedd be ezt a sort:
if range("S1").value<>range("T1").value then mkdir range(utvonal cella).value & range("T1").value:range("S1").value=range("T1").value
Az új hónapot pedig mindig a T1 cellába írd be, az S1 cellába ne. Ebből fogja tudni a makró, hogy új könytárat kell létrehoznia.
Természetesen a T1 és S1 cella csak egy javaslat, oda írd be, ahol neked megfelelő.
Köszönöm a segítséget. Így már mindjárt teszi a dolgát... A gombot úgy képzeltem, mintha lebegne a munkalap felett, és mindig ott marad aképernyőhöz viszonyítva, de így is tökéletes. Nem tudtam mik a lehetőségek ezzel kapcsolatban... Mégegyszer köszi a megoldást, nagyon tetszik!
Annyit csináltam, hogy a másoló fájlban beírtam az alap útvonalat egy oszlopba majd a hónap nevét egy oszlopba, és a neveket is, melyek összefűzve jelennek meg a A oszlopban, ami alapján megcsinálja a makró a másolást.
Tuti, hogy nem tudom beilleszteni az MkDir utasítást a makróba helyesen, marad a manuális mappalétrehozás :) (ami már tényleg nem nagy munka)
Nem akarlak tovább fárasztani, így is nagyon sokat segítettél nekem !, Igazán hálás vagyok érte !!
Van egy olyan utasítás, hogy MkDir "könyvtárnév". Ez létrehozza az adott könyvtárat. Itt is megadhatod a teljes elérési útvonalat. Ha nem adod meg, akkor az aktuális könyvtárban hozza létre az alkönyvtárat.
A gomb "helyben marasztása" érdekében a munka1 munkalap eseménykezelő kódjába írd be ezt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ActiveSheet.Shapes("Button 2") .Top = ActiveWindow.VisibleRange.Cells(3, 5).Top + 3.75 .Left = ActiveWindow.VisibleRange.Cells(3, 5).Left + 9 End With End Sub
Jobb egérgomb a munkalap fülén - kód megjelenítése.
A bal oldali lenyílóban kiválasztod a worksheet -et.
Alatt megjelenik a fenti kód címsora és zárósora.
A kettő közé másold be a makrót (az első és utolsó sor nélkül).
Ha elgörgeted a képernyőt valamerre, akkor utána kattints rá egy cellára. A gomb "követni fog". Mindig az ablak eredeti helyének megfelelően jelenik meg.
Még lehet egy olyan kérdésem/kérésem, hogy azt meg lehet -e oldani, hogy ha van olyan mappa ami az elérési útban nem szerepel azt hozza létre, és oda másolja a fájlt.
Ez jellemzően az útvonal utolsó mappája, ami a hónap nevére utal.
Kellene egy kis segítség. Egy olyan makrót írtam, ami egyszerűnek indult, de kicsit belebonyolódtam. Arról van szó, hogy egy excel táblában vannak adatok, melyekből egy-egy sort be kell másolni a többi után utolsónak. Ez sikerült is, mégpedig úgy,hogy amelyik cella ki van jelölve, azt a sort másolja. Azt viszont nem tudtam megoldani, hogy a másolt sor D oszlop cellája megegyezzen az új sor D cella tartalmával. Pontosabban ez egy hívatkozás legyen, ha az utóbbi változik akkor változzon a többi is, amelyikből van másolat. Lehet kicsit bonyolultan írtam, de belinkeltem a próbálkozást. És még azt is szerettem volna, ha az indító gomb mindig ugyanott marad a képernyőn, és nem gördül el a munkalappal. Ezt sem tudtam beállítani. Ha valaki tud valami ötletet, akkor megköszönném...
A stati.xls melyik könyvtárban van? Azt javaslom, hogy az A1 cellába is a teljes elérési utvonalat írd be, mert ha nem abban a könyvtárban van, amelyik most az aktív könyvtárad (ezt a curdir() függvény mutatja meg neked), akkor nem fogja megtalálni.
Ha viszont a teljes elérési út van beírva, akkor mindegy, hogy a makrót honnan indítod el.
Sub masolo() Dim mesternev As String, masolatnev As String, sor As Integer mesternev = Cells(1, 1).Value sor = 2 Do While Not IsEmpty(Cells(sor, 1)) FileCopy Source:=mesternev, Destination:=Cells(sor, 1).Value sor = sor + 1 Loop End Sub
Azt nem írtam, hogy nem működik, csak azt, hogy problémát okozhat. És ahogyan később írta, nem lehet a mesterfájlban a makró (bár ezt a felvetéskor nem tette közzé).
De ezt nyilván megoldja, ha egy külön fájlba tesszük a saveas makrót, csak akkor egyrészt meg kell nyitni a mesterfájlt is, utána a saveas- a mesterfájlra kell, hogy hivatkozzon.
Igen észrevettem, ki is javítottam de így sem jó :)
A hibaüzi, nem találja a fájlt (file not found), pedig ott van, a név is egyezik (tutira).
Ezt a sort írja hibának továbbra is: FileCopy "Source:=mesternev, Destination:=Cells(sor, 1).Value"
Így néz ki most
Sub masolo() Dim mesternev As String, masolatnev As String, sor As Integer mesternev = Cells(1, 1).Value sor = 2 Do While Not IsEmpty(Cells(sor, 1)) FileCopy Source:=mesternev, Destination:=Cells(sor, 1).Value sor = sor + 1 Loop End Sub
A 25442-ben írtam, hogy a másoló makrót nem a mesterfájlban kell elhelyezni, hanem egy másik munkafüzetben.
Ebben a másik munkafüzetben egy munkalapra beírod a mesterfájl teljes nevét (útvonallal) és a másolat fájlok nevét egy oszlopba (ezt is írhatod útvonallal, kiterjesztéssel és akkor nem kell ezekkel bajlódni a makróban).
(A példában az A1-ben van a mesterfájl neve, az A oszlopban pedig a másolat fájlok nevei - mind útvonallal és kiterjesztéssel.)
Ezután már lefuttathatod a makrót. Így nem lesz makró a mesterfájlban.
Sub masolo()
dim mesternev as string, masolatnev as string,sor as integer
WOW, nem számítottam, ilyen "megoldás áradatra" :) Nagyon köszönöm !!
Ha jól értem akkor, egy makrót kell beletennem a mesterfájlba, (nem nagyon értek a makróhoz) ezzel az a baj, hogy akkor mindegyikben lesz makró,hiszen önmagát másolja le. Azzal az a baj, hogy alapból le van tiltva minden gépen, tehát ha meg akarja nyitni, már rögtön kapja is a figyelmezetést. Tudom, hogy nem kell használnia, de ha hibaüzenetet látnak, jön a világvége :)
Ha a fájlt csak olvasásra nyitod meg, akkor nem tud rámenteni, hanem automatikusan a mentés másként párbeszéd ablak jön fel.
Ezt elérheted pl. úgy, hogy a módosítást jelszóhoz kötöd, így aki nem tudja a jelszót, csak olvasásra tudja megnyitni. A jelszóhoz kötést a következőképpen tudod megoldani:
Fájl - mentés másként - eszközök - beállítások - jelszó a módosításhoz - a jelszó beírása és megerősítése után OK. Ekkor meg fogja kérdezni, hogy kicserélje-e a meglevő fájlt, erre igent kell mondani.
Ne feledd, ezután Te is csak a jelszó megadása után tudod úgy megnyitni a fájlt, hogy a módosításokat elmentsd.
A mentés helyét is többféleképpen tudod megadni, egyik lehetőség a chdir utasítással beállítani a kívánt könyvtárat aktuális könyvtárrá, a mentés (másként) először ezt a könyvtárat fogja felajánlani.
Megadhatsz egy útvonalat, amelyet a munkafüzet beforesave/beforeclose eseményében hozzácsatolsz a névhez és így oda fogja elmenteni.
A valamelyik munkalap neve legyen a fájl neve: A workbook.saveas utasításban a filename legyen a kívánt név. Ugyanitt paraméterezheted, hogy milyen fájltipust mentsen el.
Az egész mentési procedúrát kötheted pl. a thisworkbook.beforeclose eseményéhez, ekkor bezárás előtt fogja végrehajtani, amit szeretnél (mentés vagy mentés másként, vagy kilépés mentés nélkül).
Kérlek segítsetek az alábbi problémák megoldásában, mert megakadtam bennük.
Hogyan lehet azt lekódolni VBA-ban, hogy egy bármilyen néven megnyitott excel fájlnak a mentésekor valamelyik munkalapjának a nevét adja automatikusan és .xlsm kiterjesztést (vagy legalábbis azt ajánlja fel) az excel?
(Munka1-ről bizonyos feltételek teljesülése után sikerül átíratni a nevet, de én ezt az új nevet akarom a mentés másként esetén az egész file nevének adatni.)
Emellett még azt is meg kellene oldani, hogy automatikusan adja a mentés helyét, illetve a "sima" mentést nem lenne szabad engedni a felhasználó számára.