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.
Furcsa, nekem műxik xl2007 alatt. Próbáld meg activeworkbook-kal...
Megpróbálhatod még azt, hogy True-ra állítod és megadsz paramétereket és akkor kiderül, hogy a savechanges részt ignorálja-e vagy csak a false részt... (nem mintha bármelyikre is lenne magyarázat)
Talán az még érdekes lehet, hogy a cella tartalmának kijelölésekor minden adat előtt megjelenik egy aposztrof (' - erre gondolok, remélem jól írtam). Máskor pedig akármilyen szövegszerkesztőbe be akarok szúrni a szövegbe valamit, a beszúrás után nem tolja a szöveget maga előtt, hanem törli. Ezt nem részletezem, elég érdekes jelenség, szerintem aki segíteni tud úgyis vágja miről van szó, mert borzasztóan idegesítő.
Hát, a lenti kódnál nyilván vannak erőforrás-hatékonyabbak is (fel is soroltunk néhány ötletet), szóval csak amolyan brute force megoldás. Viszont a 85 millió cella az bezony 85 millió cella...
Nincs minden rendben az alapképleteddel: Az első képlet hamis ága m8 értéket ad. ezzel szember a második képleted igaz ága L8 és a hamis ága m8. Ez így nem kerek... Ha a második feltételt megváltoztatjuk és az igaz ága lesz m8 a hamis ága meg l8 akkor már van értelme, akkor ugyanis a következő történik: l8>h8 --> h8 l8<h8 --> m8 l8=h8 --> l8.
És innen már megírni is egyszerű: =ha(l8>h8;h8;ha(l8<h8;m8;l8))
Ez valszeg nem fog körkörös referenciát adni (kivéve ha az L8, H8 vagy M8 cellák egyikébe rakod a képletet).
Úgy tapasztalom, hogy jól számol. Szúrópróbaszerűen egy-egy értéket kézzel beírva is megnézem az eredményt.
Amit viszont furcsállok, kb minden 5-ik újraszámolásnál előjön, hogy hamarabb fejezi be a számolást. Rendesen kb 3 percig tart egy ilyen adattáblás végigszámolás (aztán jön a következő). De amikor hamarabb befejezi, akkor kb 20 mp körül "végez". Pedig mindig F9-cel indítom az újraszámolást. Ha ilyen rövid idő alatt végez, megint F9-t nyomok, ilyenkor már végigszámolja ahogy kell.
Ennek a rövidebb időnek mi lehet az oka? A kapott eredményen is látszik, hogy az előző számításból hagyja meg az eredmény egy részét. Maradva az 1-100-ig példánál, kb 30-tól az előző eredményt hagyja meg és nem számol tovább.
Ezt a csonkaszámítást még nem ellenőriztem le, hogy konkrétan meddig számol és mennyi időbe telik.
Ez az adattáblás megoldás nagyon baba!!!! Köszi, hogy szóltál!
Az viszont felmerült bennem, hogy biztos hogy csak akkor írja be az eredményt a program, amikor a számítás a végére ért egy ciklusnál?
Utána jön a következő ciklus ugyanazokon a sok-sok függvényen végigmenve, de más bemeneti cella alapján. Nem lehet hogy nem várja ki?
Honnan tudja, hogy már lefutott az adott bemeneti értékkel az összes függvény? És nem a korábbi számítások végeredményét, vagy akár részeredményét veszi alapul?
Ha Excel 2007 használsz, akkor nem kell a DARABTELI-s bűvészkedés, ugyanis az Adatok fülön van egy Ismétlődések eltávolítása funkció, amit több oszlopra vonatkoztatva is eltávolítja a teljesen azonos többszörözött sorokat.
Köszönöm a válaszodat Neked is. Még nem kezdtem hozzá a megoldáshoz, közben jött más hirtelen megcsinálandó dolog. Marad ma délutánra az ügy. Ha gondom lenne, még jelentkezem. üdvözlettel telescoper
A válaszként megadott FKERES fügvénynek egy hibája van. Ha több azonos nevű, de különböző című sorod van, akkor mindig csak az elsőt adja vissza. Ennek kiküszöbölésére lehetne használni a tömbképleteket. De valószínűleg neked egyszerűbb az FKERES használat. Viszont egy úgy végezd el, hogy készítesz egy segédoszlopot mind a két táblázatban, amibe összefűzöd (ÖSSZEFŰZ) a nevet és a címet. Majd ezt az oszlopot használd a fügvényben. Valószínűleg így már nem lesznek azonos adatok.
Az azonos sorok ellenőrzésére erre a segédoszlop fügvényre ráeresztheted a DARABTELI fügvényt, ami megmondja hogy az adott érték hányszor fordul elő a táblában.
Viszont a fentiek elvégzése sem garancia a tökéletes megoldásra, mert mi van akkor ha a két táblázatban mondjuk a címben az egyik helyen egy szóközzel, vagy egy ponttal több van, vagy az egyik helyen út-nak írnak valamit ami a másik helyen meg u.-nak szerepel. Ekkor nem lesz találatod.
1. Előtte a 3-oszlopos tömböt (legyen E1:G5000) rendezd be név szerint. 2. =HA(HIBÁS(FKERES(A1;$E$1:$G$5000;1;0));"nem találom";FKERES(A1;$E$1:$G$5000;3;0)) E oszlopban van a név G oszlopban a 3. adat...
Az eszköztárból kiválasztod a nyomógombot (CommandButton) majd vagy hozzárendelsz egy makrót(Űrlap) vagy megírod a Click eseménykezelőt (Vezérlőelemek) Visual Basic Editor-ban.
FKERES Excel függvény a barátod, lásd Súgó. Az utolsó paraméter legyen 0 (pontos keresés). P.S. Gondolom az Excel adottság számodra, de ekkora adatmennyiségnél inkább valamilyen adatbázis-kezelő programot célszerű használni.
Az lenne a kérdésem, hogy hogyan tudok olyan alkalmazást írni (makrót), ami egy gomb (nem billentyűre gondolok, hanem képernyőn megjelenő gombra, mint amilyen itt is van a hozzászólások sorrendjénél) lenyomására működik? Hogyan tudok gombot definiálni az excelben?
Sziasztok Szakértők! Engedelmetekkel segítségért fodulok hozzátok. Sajnos excel-ben nem vagyok nagy mágus, pedig most az nem ártana.
A feladat, amit szeretnék megoldani (illetve, dehogy szeretném, de kell :) )
Adva egy táblázat mondjuk 10 000 sorral, és soronként 2 oszloppal (legyenek nevek, és címek az oszlopok). Adva egy másik táblázat 5 000 sorral 3 oszloppal (itt is nevek, címek, illetve egy harmadik oszlop plusz infóval az előző táblázathoz képest). Az 5 000 névben van olyan, amelyik nem szrerepel a 10 000 között, de negyjából azonosak. A plusz infó minden sorban azonos. A megoldandó feladat az az, hogy az 5 000 névhez tartozó plusz infót át kell tenni az azonos nevek mellé a nagyobbik táblázatba.
Gondolom van annál jobb módszer is, hogy az ember egyenként bepötyögi a plusz infót. De mi az?
Private Sub Worksheet_Change(ByVal Target As Range) Dim KezdőOszlop, oszlop, Hossz KezdőOszlop = Target.Column
If Target.Address = "$A$1" Then Range("I30:DE30").Select 'Előző adatok törlése Selection.ClearContents
Select Case Target.Value Case 1 KezdőOszlop = 9 Case 0 KezdőOszlop = 10 End Select
For oszlop = KezdőOszlop To KezdőOszlop + 99 Cells(30, oszlop).Select Selection = "E" & oszlop - KezdőOszlop + 1 Hossz = Len(oszlop) ActiveCell.Characters(Start:=2, Length:=Hossz).Font.Subscript = True Next End If End Sub
Egy másik megoldás, amivel a sorszámot indexbe is teszem.
Private Sub Worksheet_Change(ByVal Target As Range) Dim KezdőSor, KezdőOszlop, sor, Hossz KezdőSor = Target.Row: KezdőOszlop = Target.Column
If Target.Value = 1 Then For sor = KezdőSor To KezdőSor + 99 Cells(sor, KezdőOszlop).Select Selection = "E" & sor - KezdőSor + 1 Hossz = Len(sor) ActiveCell.Characters(Start:=2, Length:=Hossz).Font.Subscript = True Next End If End Sub
Nem kell ezren felüli cella az eredménynek. Csak 100, azaz ahány esetre vizsgálni akarom, n-től függ a bemeneti paraméter (n=1-100). Az ezer+ oszlop akkor kellene, ha n=1-100-ig külön akarnám vizsgálni, mert 1 bemeneti érték esetén (n=i) kell a soksok oszlop. Egyébként 2007-es excelben több oszlop van, de nem akarom ennyire leterhelni a táblázatot.
Nekem jobb volna, ha pl az eredmények az I30 cellától jönnének sorba, tehát ha a bemenet $A$1=1, akkor I30-ba, ha $A$1=2, akkor J30-ba írná az eredményt.
Jól értem, hogy az EredményvektorElsőCella az a cella, ahova kiköpi a táblázat az eredményt? Ha igen, ezt szeretném az I30-tól beíratni.
....
Egyelőre nem sikerült a makrót indítanom, nem látja a makró nevét.
A munkalapnál Insert Module módban kell beírni a makrót?
....
"Az Undo azért kell, hogy meg lehessen állapítani, milyen értéket írtál felül. A kívánság ugye az volt, hogy ha nulláról változik 1-re, akkor kell futni a programnak, más esetben nem. (Mondjuk elmagyarázhatnád, hogy ez miért kell...) "
Ha jól értem a kérdést.. van egy számhalmaz1, ezt vizsgálja a táblázat, aminek lesz egy bizonyos eredménye n=i esetén (n=1-100), összeségében 100 eredmény.
De jó sok számhalmazom van, mondjuk m=200. Ezeket a számhalmazokat majd én szépen bemásolom egy másik táblázatba, ez nem olyan munkaigényes.
Tehát összeségében lesz - ha jól sikerül :) - egy 100oszlopból és 200 sorból álló eredménytáblázat. A számhalmazonkénti eredménysort én majd kézzel átmásolom, az se gond.
....
"A Függvényérték függvénybe azt írsz, amit akarsz. Ezt nem részletezted."
Őőőő ezt nem értem.
Lehet, hopgy rosszul magyaráztam. Tehát ha $A$1-be írok egy számot, annak folyományaként kapok egy számértéket jó pár függvény hatására. Ezt az értéket szeretném egymás mellé iratni I30-tól, n=1-100 szerint, vagyis 100 értékem lesz egymás mellett.
Adatok/Adattábla menü pont erre való. Maximum 2 paraméter helyére lehet vele behelyettesíteni egy képletbe. Egy egyszerű példa: 1. Alapképlet A1:1 B1:=2*A1
2. Érzékenységvizsgálat Ezután csinálsz egy oszlopsorozatot 1-100-ig az A5:A104 tartományban
B4:=B1
Kijelölöd az A4:B104 tartományt Adatok/Adatábla menüpont Oszlopértékek bementi cellája: A1
Ez viszonylag egyszerű, ha jól értettem a problémát. Itt a kód, magyarázat lejjebb.
Private Sub Worksheet_Change(ByVal Target As Range) Const FigyelendőCellaCíme = "$A$1" Const EredményvektorElsőCella = "$A$2"
Dim RégiÉrték, ÚjÉrték Dim i As Long
If Target.Address = FigyelendőCellaCíme Then Application.EnableEvents = False ÚjÉrték = Target.Value Application.Undo RégiÉrték = Target.Value Application.Undo Application.EnableEvents = True
If Not ((RégiÉrték = 0) And (ÚjÉrték = 1)) Then Exit Sub For i = 1 To 100 Range(EredményvektorElsőCella).Offset(i - 1) = Függvényérték(i) Next End If End Sub
Function Függvényérték(i As Long) Függvényérték = i * 2 End Function
A FigyelendőCellaCíme az, amibe ha beírod az egyest, akkor aktiválódik az egész. Ez tulajdonképpen megfelel egy gombnyomásnak, csak körülményesebb. Az EredményvektorElsőCella az a cella, ahonnan kezdve a program kilistázza az 1-100 számokra kapott függvényértékeket. Az Undo azért kell, hogy meg lehessen állapítani, milyen értéket írtál felül. A kívánság ugye az volt, hogy ha nulláról változik 1-re, akkor kell futni a programnak, más esetben nem. (Mondjuk elmagyarázhatnád, hogy ez miért kell...) A Függvényérték függvénybe azt írsz, amit akarsz. Ezt nem részletezted.
Amúgy az eredményeket egymás alá pakoltam, mert ha ezer eredményt vársz, annak egymás melletti elrendezés esetén ezer oszlop kellene, annyi pedig nincs.
Olyat tud az Excel meg Ti :) hogy van egy táblázat...
Én beírok egy helyre egy számot (n=1-100), kezdem az 1-gyel...
ez alapján kiköp egy eredményt, legyen E. Ha a kézzel beírt szám 1, akkor legyen E1 az eredmény.
Igenám, de nekem n=1-100 szerint kéne az eredmény E1,E2, E3,.... E100,
de nem szeretném kézzel beírni folyton 1-től 100-ig a számokat, majd manuálisan egymás mellé rendezni a kapott számot.
(Elméletileg meg lehetne csinálni, hogy mind az n=1-100 esetre külön oszlopokat hozok létre a táblázatban, de az ezren felüli oszlopot jelentene és ezt nem szeretném.)
Hanem valahogy automatizálni szeretném.
Úgy, hogy ha az adott mező ahova n-t írnám nem üres, hanem beleírom az 1-et, akkor végigfusson a sok függvény és egy sorba egymás melletti celláiba kapjam az eredményt.
Én még olyat nem láttam, hogy az automata mentés kiakaszt egy makrót, de ha ilyen fenntartások vannak akkor még be lehet tenni a kód elejére meg végére:
ActiveWorkbook.EnableAutoRecover = False / True
Már nem nagy segítség :-)
A munka1-nek én nem neveztem volna el egy újonnan létrehozott lapot, inkább adtam volna neki valami más - nem excel specifikus - nevet. Bár a kód nem használta a munkalap nevét, hanem csak az activesheet-et, aminek meg mindegy kellett volna legyen, h. mi a sheet neve...
Érdekes... a rendes táblázatomban nem ír 0-kat a kérdéses helyekre, csak a próbatáblázatomban, amiben eddig kísérletezgettem. Így egyelőre a kérdés törölve. Köszi az eddigi segítséget!
A korábban írt problémámra találtam egy lehetséges megoldást, amit Te írtál.
A problémám, hogy az Excel2007-ben megírt outlook-os makró nem fut Excel2003-ban, mert ott nem találja a outlook2007-hez tartozó Outlook Object Library referenciát.
Ezt írtad a 8169-ben: Másrészt, csinálhatod a fejlesztést úgy, hogy beikszeled az Outlook Object Library referenciát, és használod a kódkiegészítőt. És amikor kész vagy, kicseréled ezt: Dim OL As Outlook.Application Set OL = New Outlook.Application erre: Dim OL As Object Set OL = CreateObject("Outlook.Application") és már nem kell a referenciával törődni.
Ezt a trükköt el lehet követni az alábbival is? Ha igen mit kellene beírnom?
Dim ouApp As New Outlook.Application Dim level As Outlook.MailItem Set level = ouApp.CreateItem(olMailItem) level.To = "címzett" level.Subject = "tárgy" level.Attachments.Add (melléklet) level.display Set level = Nothing
Átjavítottam pontosvesszőre, úgy már működik. Csak az a baj, hogy nem ad jó eredményt.
Írtam egy függvényt rá, de ezt nem tudom húzással egészen az oszlop aljáig másolni, hanem addig a sorig, ahol a C oszlopban a következő 1-es góc kezdődik, aztán ezt a tömböt másolni (példában D2:D11), de ez nem tragédia.
Ezzel már csak az az esztétikai bajom, hogy amikor a D-be a C értékét kéne írni, eredméyne hogy a D egy cella kivételével 0 lesz. Ezen 0-k helyett szeretnék üres cellát (D' oszlop)
Így néz ki:
F1=3 (mennyin belül az elejétől kezdve keressen)
F2=20 (melyik számot keresse)
A B C D D'
1 1 0
2 1 0
3 1 0
20 1 0
5 1 5 5 5
6 0
7 0
8 0
9 0
10 0
Hogy lehet azt megcsinálni, hogy üres és 0 esetén a D-be üres cella kerüljön?
A makró remekül dolgozik, a 13000 kifejezést 1300 mp alatt darálta végig egy kétmagos AMD-s gépen (asszem 5600-as procik), 3 giga ram mellett. Viszont van egy érdekes dolog. Amikor először elindítottam a makrót, akkor a meglévő fájlban hoztam létre egy új lapot Munka1 néven, lementettem, és úgy indítottam el a makrót. Mintha belefagyott volna az egészbe, egy óra múlva sem volt semmi. Néhány sikertelene próbálkozás után nyitottam egy új munkafüzetet, amibe csak néhány száz mondatot raktam bele, ez néhány másodperc alatt lefutott. Aztán próbálkoztam egyre több mondattal, és rájöttem valamire: a makró csak akkor fut le, ha egy le nem mentett munkafüzetben indítom el. Ha lemenetem, akkor behal az egész. Lehet, hogy valami összefüggés van az excel automatikus mentési funkciójával, ami bekavar. Nem tom, de mentetlen munkalapon jól műk az egész. Még egyszer nagyon köszönöm a segítséget, rengeteg munkát takarítottál meg vele nekem.
Még azzal lehetne gyorsítani, ha az InStr előtt kiértékeljük, hogy a vizsgált mondat valami korábbinak a részmondata-e. Ha ugyanis B részmondata A-nak, akkor B minden részmondata is részmondata A-nak és ezeket már kiértékeltük amikor A-t kiértékeltük. Szóval egy if cell(sor,2).value="Részmondat" then exit for gyorsíthat rajta, csak nem tudom, hogy mennyi ilyen eset lehet.
Remélem Ibrahim nem azért nem hallatt magáról mert tegnap este óra fut a makró a gépén :-)
Egy exit for-ral nagyot lehet gyorsítani a dolgon.
Sub Ibrahimduplikacio() Dim sor, sor_1, usor As Long Dim t
usor = ActiveSheet.UsedRange.Rows.Count t = Timer
For sor = 1 To usor - 1 For sor_1 = sor + 1 To usor If InStr(1, Cells(sor, 1), Cells(sor_1, 1)) <> 0 Then Cells(sor_1, 2) = "Reszmondat" Exit For End If
Next sor_1 Next sor
MsgBox Timer - t & "masodperc alatt kesz" End Sub
Könnyű akkor gyorsítani, ha valaki már kitalálta a megoldást. :)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Kép Kép = Target.Value Shell ("rundll32.exe shimgvw.dll,ImageView_Fullscreen " & Kép) End Sub
A cellákba simán írd be a képeid elérési útját és nevét, kiterjesztéssel együtt.
A Windows kép- és faxmegjelenítővel mutatja majd meg a képeidet.
A kovetkező makrót futtasd le és rendben lesz a dolog. Teendők: 1.) Excelben legyen a Munka1 az aktív fül 2.) Alt+F11 (VBA Editor megnyílik) 3.) Insert menü / Modul 4.) A megnyíló sima fehér lapra copy-paste-tel másold be a lenti kódot (Sub-bal kezdődően és End sub-bal végződően. 5.) Kattints bele a makro szövegébe (bárhova, csak a kurzor a Sub és End sub között legyen. 6.) Nyomj F5-öt 7.) Menj el vacsorázni, hiradót nézni vagy valami (13000 sor esetén a makrónak 84 és fél millió cellát kell karakterenként átnézni.
Mikor a makró elkészült feldob egy kis ablakot.
Nem töröl, csak jelöl a B oszlopban, onnan már te is ki bírod törölni a felesleges sorokat.
Ha az én kedvemért megírod, hogy mennyi idő alatt futott le (mutatja majd a felugró kisablak a végén) azt megköszönöm.
----------------------------------------------
Sub Ibrahimduplikacio() dim x, y, igsor as long dim t
igsor = ActiveSheet.UsedRange.Rows.Count t = Timer
For x = 1 To igsor - 1 For y = x + 1 To igsor If InStr(1, Cells(x, 1).Value, Cells(y, 1).Value) <> 0 Then Cells(y, 2) = "Reszmondat" Next y Next x
Mondjuk, ha egy munkafüzet "A1" cellájának értékét szeretnéd villogtatni, próbáld ki ezt:
Sub VillogásBE() With Range("A1").Font If .ColorIndex = 5 Then ' kék .ColorIndex = 2 ' fehér Else .ColorIndex = 5 End If End With RunWhen = Now + TimeSerial(0, 0, 1) Application.OnTime RunWhen, "VillogásBE", , True End Sub
Ilyen függvény nincs, erre írni kell egy makrót amit majd le kell futtass. A rendezés lehetősége nagyon jó, mert akkor tényleg lehet gyorsítani az eljárást. Igyekszem a következő egy órán belül megcsinálni a dolgok (valszeg csak néhány sor, nem nagy ügy) csak most éppen dolgozom valamin.
A mondatok sorrendje szabadon megválasztható, és tudom hossz szerint sorba rendezni azokat, így biztos, hogy a részmondatok lejjebb helyezkednek el, szinte bizonyos, hogy nem közvetlen egymás alá esnek. A keresésnek úgy kellene mennie, hogy vesszük az első sort, összehasonlítjuk az összes többivel, és ahol részmondatot talál a függvény, azt a sort azonnal lehet is törölni (vagy megjelölni, ez mindegy). A törlés azért lenne jobb, mert így amikor a következő sort kell összehasonlítani az összes alatta lévővel, már kevesebb kliennssel lenne dolgunk. Az adatok az A oszlopban szerepelnek, a Munka1 munkafüzeten. Ha lehetne olyan függvény kellene, ami Office 2007 alatt is működik, ugyanis ez sokkal több oszlopot kezel.
Van valami szabályszerűség a mondatok között? Ezt úgy értem, hogy egy részmondat közvetlenül a főmondat alatt lesz, vagy csak alatta felette nem, etc. Azért kérdem, mert nem mindegy, hogy egy cellát minden más cellával össze kell-e hasonlítani, vagy nem.
Makroban egyébként az InStr függvény csinálja azt amit te szeretnél, add meg, hogy melyik oszlopban szerepelnek az adataid megírom neked, de ha mindent kell mindenhez hasonlítani akkor - szólok előre - elég sokáig fog az Excel bokázni a feladattal amíg végez.
Amire tehát szükség van: - a sheet neve amin a mondatok vannak - az oszlop betűje amiben a mondatok vannak - mi történjen a duplikációkkal? Törlődjenek? Vagy kerüljön a jobbról mellettük lévő cellába valami jel?
Cellán jobb klikk, megjegyzés beszúrása. Megjegyzésen klikk, míg sűrű pontokból lesz a kerete, nem sraffozott. Jobb klikk, megjegyzés formázása. Színek és vonalak fül. Kitöltés kategóriában szín legördülő, kitöltési effektusok. Kép fül, képválasztás.
Most megpróbáltam megcsinálni amit írtam, de nem sikerül. Ami azért furcsa, mert korábban már csináltam ezt, onnan ismertem ezt a trükköt. Lehet xl2003-ban volt az?
Ctrl+Alt+Del Itt feljön a feladatkezelő Vélaszd a Folyamatok/Processes fült Kattints a memóri fejlécre és akkor a használt memória alapján először (azt hiszem csökkenő) második kattintásra növekvő sorrendben mutatja, hogy mi mennyit használ.
Lehet memóriából van kevés... Vírus ellenőrzés, kémprogram ellenőrzés, azt nézd meg nincs-e olyan eljárás folyamatban ami nagyon eszi a memóriát. És még vagy millió egyéb oka lehet...
Cellára kattintással nem tudom hogy kell csinálni, de a mouse cellára irányításával a következő módon: - szúrj be egy comment-et (megjegyzés); - a comment tartalma legyen a kép; - kapcsold be, hogy a commentek akkor jelenjenek meg, amikor a mouse-t a cella fölé irányítják.
Tudom, hogy ez excel topik!! De nekem az egész offical van problémám!! a 2007es offico megyik napról a másikra azt irta ki word futtatásánál, hogy "Nincs elegendő memória vagy szabad hely az alkalmazás inditásához" Letöröltem, ujra raktam, töredeztességmentesitettem, 6 giga szabadhelyem van a C-meghajtón, épróbáltam a 2003ast is felrakni az sem működik... Mi lehet a baj??
Van egy problémám, amit nem tudom hogy lehetne megoldani. Van egy excel táblázatom, benne egy oszlopban adatok. A cellák rövidebb-hosszabb mondatokat tartalmaznak. Egyes mondatok részhalmazai más mondatoknak. Például:
Piros autó áll a zöld lámpánál. autó áll a zöld lámpánál Kék autó áll a piros lámpánál áll a zöld lámpánál Kék autó áll a piros stb.
Hogyan lehetne leválogatni azokat a sorokat (törlés céljából), amik valamilyen módon részhalmazai egy másik cella tartalmának? A táblázat egy fordító program egy funkciójának eredményeképpen született, amely megkeresi egy adott szövegben többször előforduló kifejezéseket, és kilistázza azokat. A program azonban nem elég intelligens ahhoz, hogy a részmondatokat kiszűrje a keresésből. Az eredeti táblázat iszonyú hosszú volt, hosszas kézi szűréssel most 13000 sorból áll, ezért kellene a segítség. Ha bárkinek működő ötlete van, amit el is mond, Isten áldja meg őt ezért!
Szerintetek valahog ymeg tudnám oldani, hogy egy cellába az adott hónap pl 6. munkanapjának a dátuma kerüljön?
Tehát pl vegyük most decembert...ebben az évben a 6. munkanap dátuma 08-12-2009-a...
Azt szeretném, hogy ez szerepeljen a cellában.
Szerintetek van erre mód. Tehát jó lenne, ha nem a naptárban kéne ellenőrizgetnem, hogy most épp 6 munkanap az milyen dátum, hanem ezt a formula maga kiszámolná...
Statisztikai kimutatáshoz kell, a számok egy-egy külön halmazt jelentenek, amiknek tulajdonképpeni jelentéstartalmuk van. Aztán ezekből is készül összegzés, miegymás.
Ja, angol nyelvű xl2007 (ez utóbbi nem releváns, a lenti függvények mindegyike léteztik xl2003-ban is).
Ha neked magyar nyelvű van, akkor a függvények között érdemes körülnézned, vigyázz, a pontosvessző és a vessző időnként cserélődik angol és magyar verzió között.
A tábládon teszteltem nekem műxik.
Csak perverz kiváncsiság: milyen valóséletbeli probléma megoldásához kell ez? Persze csak ha ez nem ad ki túl sok személyes információt...
A függvény: =IF(SUM($C$2:C2)<=$F$1,"",NOT(ISNA(MATCH($F$2,OFFSET(C2,-C2+1,-2,C2,1),0)))*C2)
Alapvetések: A tábla a 2. sorban kezdődik (első sor a fejléc, felteszem). A fenti képletet másold be a D2 cellába és másold lefele addíg amíg a táblázatod tart.
:D Már egy jóideje nem koptatom az egyetemi padot, ez nem iskolai aberráció :D
Azt írod, hogy: "...Az F1 azt mutatja meg, hogy az 1-es gócokban az első 1-estől hányadik 1-esig vizsgáljon, tehát jelen esetben 3db 1-esen belül vizsgál."
Ezzel szemben a példád pontosan a 3-as gócon belüli találatot ignorálja (és továbblép a 6-os gócra. Szóval a fenti mondat helyesen: "...Az F1 azt mutatja meg, hogy az 1-es gócokban az első 1-estől hányadik 1-esig NE vizsgáljon, tehát jelen esetben 3db 1-esen belül NEM vizsgál."
Jól látom?
A te megfogalmazásod is helyes Azért írtam így, mert ha gócon belül van "találat", akkor kell közbelépni, vagyis a D oszlopba már nem kerül át a C-ben lévő szám.
Ha gócon kivűl van, akkor nem kell "semmit" csinálni, csak "átkopizni" D-be a C-ben lévő számot. :)
Köszi, hogy foglalkozol vele. Nekem nem sikerült megoldást kitalálni eddig.
Azt írod, hogy: "...Az F1 azt mutatja meg, hogy az 1-es gócokban az első 1-estől hányadik 1-esig vizsgáljon, tehát jelen esetben 3db 1-esen belül vizsgál."
Ezzel szemben a példád pontosan a 3-as gócon belüli találatot ignorálja (és továbblép a 6-os gócra. Szóval a fenti mondat helyesen: "...Az F1 azt mutatja meg, hogy az 1-es gócokban az első 1-estől hányadik 1-esig NE vizsgáljon, tehát jelen esetben 3db 1-esen belül NEM vizsgál."
Van arra valamilyen belső szabály a vizsgálandó sokaságban, hogy biztosak lehetünk benne, hogy a te példádban a 3-as gócok követő (6-os) gócban lesz 8-as érték, vagy le kell kezelni azt az esetet is amikor a Match #N/A-t ad mert nincs 8-as a vizsgált számok között?
Innen egyébként te is meg tudod csinálni, mert csak a ha függvények hamis ágába kell betenni az eggyel alacsonyabb hierarchiájú következő ha függvényt.
Akarod, hogy valaki leírja neked (ezáltal elrontva a felfedezés örömét) vagy bepróbálkozol és ha ide berakod azt amit kitaláltál, szívesen megnézzük neked, hogy jó-e.
Nos, eddig ha jól értem a problémát és jó megoldási tervem van, akkor lesz egy monster képleted.
Amit eddig összegyűjtöttem, hogy milyen függvények kellenek bele: - match: kinézni, hogy hol a 8-as az A oszlopban; - offset: meghatározni, hogy az A oszlop milyen range-én belül értékelődjön ki a match; - dinamikus sum + if (hogy lássuk, hogy kívül vagyunk-e a 3-as értékű gócon).
feltétlenül problémás, mert ha H3=F3 akkor mindkettő teljesül. Az egyikből ki kell operálni az egyenlőségjelet (a visszaadott érték - speciális eset - nem változik ettől, mert F3=H3 és ez az érték kerül be írgy is úgy is.
Egyébként egy beágyazott ha függvényről beszélünk, nem nagy probléma, csak munkás...
Felteszem a fenti feltételek sorrendje egyben erősorrend is, ugye? Mert ha igen, akkor az utolsó kettő csak akkor értékelődik ki, ha G3=E3 (merthogy egyéb esetben az első két feltétel egyike teljesül és a kiértékelés lezárul).
A bal felső sarok ikonnal, benne: mentés, stb. amire gondolsz. A nagy böszme ablak bal alsó sarkában Excel beállítás/Kilépés...
Excel beállítás, magyarul
Népszerű elemek Képletek Nyelvi ellenőrzés Mentés Speciális
Testreszabás Bővítmények Adatvédelmi központ Források
Advanced almenü alatt én a Speciálisra gondolok, itt van legelsőként a Szerkesztés beállítási lehetőség. Az Enterre vonatkozólag ez van beállítva:
A kijelölt cellák az Enter lenyomása után áthelyezhetők: Lefelé
A probléma érdekes valóban. További fontos info, hogy ez win update után romlott el. Azóta pedig Win update hatására més programom is rosszul vagy egyáltalán nem működik. Pl. acrobat és Nokia PC suite. De ez most nem annyira fontos.
Az update-et megtiltottam, pontosabban engedtem a letöltést, de a telepítést nem. Ennek ellenére kétszer is megyszívtam, nemrég óta van netem, nincsenek nagyon tapasztalataim ezzel kapcsolatban és folyamatosan érnek a meglepetések.
No nem akarom szét off-olni az excel topikot, egyenlőre ennyi!
Lehet nem értem pontosan a problémát, akkor bocsánat ha beleszólok.
Szerintem nem elegendő csak kikapcsolni a hiba megejelenítését a
Application.DisplayAlerts = False paranccsal, hanem a hiba kezelését is át kell venni az Exceltől. Ez az 'On Error Resume Next' utasítássorral történhet. Ekkor nem áll meg a makró futása, ám a hiba kódja az Err objektumban tárolódik.
Én ezt úgy használom, hogy akkor kapcsolom ki az Exel hibakezelőjét, ha valami olyasmit készülök tenni, aminek a hibás kimenetelekor magam szeretnék dönteni a hogyan továbbról. Azaz beolvasok egy külső file-t, de ha az nincs meg, akkor a makró a továbbiak szerint nem használja az onnan várt adatokat, helyette mással számol.
Tehát kikapcsolom a hibakezelést. A hibára esélyes művelet után tesztelem a hiba bekövetkeztét és léterhozok egy változót, ami majd eltárolja ezt a hibát, végül visszakapcsolom a hibakezelést, hogy bármi más hiba esetén leálljon a makró. A 'hiba' változó azért kell, mert az Err objektum mindig a legutolsó hibáról tárol el információkat.
Van egy A oszlop tele számokkal. A B oszlopban egymást követő 1-esek, de ezek góconként fordulnak elő. A C oszlopban ezen 1-esek mellett a gócban a legutolsó 1-es mellett a gócban lévő 1-esek összege, valahogy így:
A B C
5
1
2 1
8 1
10 1 3
2
1
3
4
75
89 1
42 1
30 1
8 1
3 1
48 1 6
19
61
Az a feladat, hogy megadok egy cellában pl F1-ben egy számot, legyen ez a szám pl:
3
Egy másik cellában, pl F2-ben, egy másik számot, pl:
8
Az F1 azt mutatja meg, hogy az 1-es gócokban az első 1-estől hányadik 1-esig vizsgáljon, tehát jelen esetben 3db 1-esen belül vizsgál.
Az F2 azt mutatja meg, hogy melyik számot keresi ebben a 3-as gócban az A oszlopban.
Namármost...
vastagítottam, ahol 8-as van ennél a gócnál.
A B C
5
1
2 1
8 1
10 1 3
2
1
3
4
75
89 1
42 1
30 1
8 1
3 1
48 1 6
19
61
A piros 8-as a vizsgált 3-as gócon belül van. Ebben az esetben, ne másolja a D oszlopba C-ben lévő 1-esek összegét, azaz a 3-as értéket!
A fekete 8-as a vizsgált 3-as gócon kívül van, ezért az 1-esek összegét a 6-ost másolja a D oszlopba át!
A végeredmény így nézne ki:
A B C D
5
1
2 1
8 1
10 1 3
2
1
3
4
75
89 1
42 1
30 1
8 1
3 1
48 1 6 6
19
61
A B oszlopban az egyesek előtti közvetlen megelőző cellában se képlet se érték nincs.
Remélem, sikerült érthetően leírnom.
Milyen függvény kell a D oszlopba, hogy ezt csinálja? Nekem nem sikerült kiokoskodni. Van erre megoldás? Segítsetek!!!!! :) Köszi!
Volna egy tisztelet teljes kérdésem. Hogy lehet figyelni azt, hogy milyen üzenetablaklak érkezik egy makró futásakor? A cél az, hogy ne álljon meg emiatt a futás, hanem például lépjen be egy másik ágba. Vagy válassza vmelyik válaszgombot.
(Pédául: Pivottábla oldalmezőben olyan elemet adok meg (beírom kézzel), amely nem szerepel a táblában. Ekkor megkérdezi, hogy átnevezze-e az elemet, avagy ne. Futhatna tovább a makró, de a végén kell valami saját üzenet, hogy mi történt.
Magyar 2003-ban is lehet színkóddal formátumot adni ([Szín36]), de a karakter színének lekérdezésekor az eredeti színkódot kapom. Vagyis csupán formázásnak veszi a formázott színt, annak, ami.
Ahogy én látom, így is úgy is felül fogja írni, szóval a kisebbik rossz ha hagyod nekik, hogy helyrehozzák az átformázást.
Egyébként lehet írni egy makrót rá, hogy miután visszakapod a táblázatot (vagy miután a user kitöltötte, ő maga futtatva) alkalmazza újra a kívánt formázást (és akkor mindegy mit csináltak a formátummal a kopi-pészt során, mert a makró felülírja).
Egyszerűbb mint a billentyűzet shortcut-okat átírni :-) Valszeg makrorekorderrel is simán abszolválható...
Hozzárendeled egy custom gombhoz és megmondod a user-eknek, hogy copy-paste után nyomják meg a gombot.
Nem tom milyen verziót használsz, de a 2007-es xl engedi, hogy különböző szinten védd le a worksheet-jeidet. Egyszerűen hagyd ki a formázás-védést és a felhasználók visszaformázhatják a cellákat amiket elbarmoltak.
Igen, nem is az a gond ha én másolok, mert én erre odafigyelek.
A probléma az amikor az általam elkészített és levédett táblázatot kell a kedves kollégának kitölteni, aki meg néha egy másik táblából másolja át az adatokat. Utánna meg szentségel, hogy ronda lett a táblázat és nem is tudja kijavítani.
Egyébként elvi síkon van egy megoldásom, de én nem vállalkoznék ennek a leprogramozására. (Még nem vagyok ilyen magas szinten.)
Az általam védett lap kijelölése (aktívvá válása) esetén egy makró tegye inaktívvá a beillesztés parancsot, csak az értékként, vagy képletként beillesztést engedélyezze, A CTRL+V kombinációt, meg az adott lap esetében cserélje le egy értékként beilleszt funkcióra.
A copy-paste mindent másol, nem csak a tartalmat, hanem a formátumot is. Gondolom amikor két ellentmondó utasítás van az excelben (ne engedj formázni, másold a formátumot) akkor a programozók erősorrendet állítanak fel, hogy milyen konfliktus esetén ki legyen az erősebb. Úgy tűnik itt a formátumvédés húzta a rövidebbet :-)
Ha mindenáron meg akarod tartani az eredeti formát, akkor szerintem Paste Special-lel próbálkozz.
Ha már a formázásoknál tartunk, van valami amit nem értek.
Egy cellának leveszem a zárolását, majd az egész munkalapot levédem. Ebben az esetben a cellába lehet beírni számot, de a cella formázást, színezést, szegélymódosítást nem engedi. Eddig ok.
Ekkor egy másik táblázatból CTRL+C és CTRL+V vel átmásolok ide egy cellát. Ekkor a cella formátumát felülírja annak ellenére, hogy védett a munkalap és ezt ki sem tudom javítani, mert a cella formázást nem engedi.
Ez egy Excel hiba, vagy valahogy más módon meg lehet akadályozni, hogy másolás beillesztésnél felülírja a formátumot?
Akkor nem tom Kiváncsivá tettél, majd ránézek a 2003-as verziómra is ha lesz egy kis időm (mongyuk az is angol, szóval a megnézés nem feltétlenül válaszol meg minden kérdést).
És lehet, hogy az oprendszer input local beállítása is számít...
Másnak (Jimmy?) műxik a dolog 2003 alatt? Ha igen, milyen nyelvű változata van?
Én most 2007-en használtam és ott műxik. És nincs olyan emlékem, hogy változott volna a két változat között.
Nem lehet, hogy a pontos vessző, vessző dolog keveri meg? Ha jól látom a bejegyzéseidből akkor neked magyar verziód van (ahol a vessző tizedesvesszőnek játszik). Nekem viszont angol verzióm van (ahol a vessző ezres szeparátor). Lehet ott keveredik meg a dolog és nem a 2003/2007 verziónál...
Rájöttem, hogy hol jobb a számformázás: - Chart-ok tengelyeinek számainak formázására (mert ott a feltételes formázás nem műxik).
Szal ha valaki egy grafikon tengely számait szeretné aszerint szinezni, hogy hogy viszonyulnak pld az átlaghoz, akkor csak a számformátumos játékot tudja alkalmazni
Viszont ha már ilyen jól belemásztunk a számformázás arcába, azt még érdemes tudni, hogy nem csak a nyolc alapszínt lehet használni (red, blue, green,...), hanem az Excel 2003 mind az 56 (53?) alapszínét, csak név helyett color kóddal kell hivatkozni rájuk.
Tehát a [Color10] #,##0 is érvényes formázási utasítás. Nem tom, hogy a magyar változatban ez a Color10 mi lehet, [Szin10](?)
Egyetértek. Mondjuk lehet rá makrót írni ami mindíg update-eli az átlag értékét és a NumberFormat property-t megváltoztatja a munkalap változásainál, de ez talán már túlzás...
Az egyetlen ok ami miatt a számformátum jobb lehet az a lefele kompatibilitás (nem tom blöffölök), mert a számformátumok lefele teljesen kompatibilisek, a feltételes formázást nem tudom, hogy teljesen kompatibilis-e.
pld egy számokból álló sorozatot lehet úgy formázni, hogy az átlag feletti tételek feketék, az átlag alattiak pedig pirosak. Hát, ezt speciel igazán jól csak feltételes formázással lehet megoldani. Ugyanis az egyéni számformátum csak konstans értékeket fogad el a feltételekben, cellahivatkozást, képletet nem.
Lehetőség van a legközelebbi ezer-re kerekíteni a (megjelenített) számot. Pld a következő formázási utasítás hatására a 125913 126000-ként fog megjelenni (miközben a cella értéke változatlan marad) [<500] "0";#,"000"
(Az első feltétel <500 azért kell, hogy az ezer alatti számokkal is tudjon mit kezdeni a kód).
Csak a tíz harmadik hatványaira lehet így kerekíteni (ezrek, milliók, etc.).
Én még nem láttam olyat ahol ez a formázás hasznos, de biztos van, egyébként a MS srácok nem programozták volna le...
A number format nem csak a negatív, pozitív és nulla formázására vonatkozhat, hanem feltételeket is ki lehet értékeltetni vele. A lenti kód pld az 5-ösöket kéknek, a hatosokat pirosnak mutatja.
[Blue][=5]#,##0;[Red][=6]#,##0
A feltételek között lehet relációs jel is (pld egy számokból álló sorozatot lehet úgy formázni, hogy az átlag alatti tételek feketék, az átlag alattiak pedig pirosak)
1. olyan cellaformázási maszk van, amivel azt lehet beállítani, hogy a tizedes jegyek közül pl. az első MINDENKÉPP jelenjen meg, a többi csak akkor, ha nagyobb 0-nál?
2. láttam olyat egy táblázatban, hoyg a sorok mellett megjelent egy kis + jel, és ha rákattintottam, akkor szétugrott és megjelentek az elrejtett sorok. Ilyet hogy kell?
Nem a verzió lekérdezéssel van a probléma, azt tudom.
Az a gond, hogy a levél készítő makró futtatásához és az outlook-os parancsok felismeréséhez szükséges, hogy az Excelben be legyen kapcsolva ez az outlook 12 "parancsértelmező" vagy micsoda a Tools->References menüben (Ez már kicsit kezdi meghaladni a tudási szintemet.) E nélkül a makrót le sem fordítja, nem hogy futtatná.
2007-ben én a 2007-es outlook ot tudom neki bekapcsolni, ami a 12-es. Az előző 11-es nem is szerepel a listában. Ezért aztán, amikor 2003-as Excel-ben nyitják meg a táblázatomat, a VBA hülyén néz, hogy mi az a outlook 12, Ő ilyet nem ismer, anyira meg nem inteligens, hogy helyette bekapcsolná a 11-est. (Tulajdonképpen miért is tenné.) Ezt kézzel kell bekapcsolni egy 2003-as Excelben. (Ugyanitt meg ki kell kapcsolni a 12-est, mert arra meg azt írja, hogy hiányzik.
Nekem az a gyanum, hogy ezt makróból nem lehet állítani, hiszen már eleve a makró futáshoz ez is szükséges lenne. De ez csak gyanu, amit kezdetleges tudásomra alapozok.
Tulajdonképpen erre kérnék megerősítést, és akkor nagyon szomorú leszek. Vagy cáfolatot és egy új látásmoddal megközelítve esetleg valamilyen más megoldást. :o)
Le lehet kérdezni a verziószámot. Beépített függvény is van erre, magyarban: =INFÓ("verzió") De valaki írta lentebb is, hogy ez elérhető. Innentől szerintem már neked sem gond a probléma megoldása.
Még egy kérdésem lenne, bár erre már nem hiszem, hogy van megoldás.
A 10056-ban írt levélküldős programomat használják Excel 2003-ban és 2007-ben is. Én 2007-et használok, tehát a VBA-ban a references-ben be van kapcsolva a Microsoft Outlook 12. Ha a táblázatomat 2003 alatt nyitják meg ott fordítási hibával kiakad mert ott nincs Outlook 12 csak 11. Nálam meg 11 nincs. Nincs valamilyen beállítás vagy trükk arra, hogy ezt akár "automatikusan felismerje"? Ha nem lesz más megoldás, akkor le kell mentenem a táblámat két gépen külön 2003-ban és 2007-ben. Ezt már próbáltam és működik de nem túl elegáns és elég macerás.
XL 2007-ben: 1.) Excel főmenü (a bal fölső sarok, ahol a Save meg Print van) 2.) Jobb alsó sarok: Excel options 3.) Advanced almenü 4.) Editing options. Ez az első tétel a listában
Ird meg légyszi, hogy ez volt-e elállítva, mert ha itt minden OK akkor még érdekesebb a probléma
Nem olvastam el figyelmesen a kérdést. Amit korábban írtam, az Excel makró, ami meghívja az Outlook-ot, majd visszakapja a fókuszt. A te makród Outlook-ban van, és onnan kellene elérni az Excelt.
Jó a makród, de írd be még ezt is a végére: Application.ActiveWindow
Hmmm...2003-as és az a fura, hogy eddig ilyet nem csinált.
Nem nagy gond, mert "paste-value"-ként be tudom másolni...csak nagyon idegesít, hogy mi okozhatta ezt...foleg hogy korábban nem csinált ilyen abszurd dolgot.
Senki sem kérte az excelt, hogy változtasson a font-on...érthetetlen
Igen többek között ezzel is szenvedtem, de nem volt jó, mert ez csak az Excelen belül aktiválta az ablakot. Magát az Excel ablakot nem tette aktívvá, csak a tálcán kezdett villogni az Excel ikonja, mert a programom feldobott egy msgbox-ot és vállaszra várt. De maga az msgbox is és az Excel ablak is a háttérben volt nem volt látható, csak ha a tálcán az Excelre kattintottam.
Ennyire nem bonyolult a helyzet. Nem a Shell parancsot használom. Részben nem is értem, hogy mit írtál.
Az AppActivate ThisWorkbook.Name parancs hibaüzenetre futott, de legalább megtudtam, hogy létezik ilyen parancs és kicsit módosítva az AppActivate "Microsoft Excel" parancs megoldotta a problémámat.
Kiragadva a programomból a lényeget:
Dim ouApp As New Outlook.Application Dim level As Outlook.MailItem
Set level = ouApp.CreateItem(olMailItem) level.To = "címzett"
Mikor a Shell paranccsal indítod a külső alkalmazást, akkor a Shell visszatérési értékét eltárolod, ez lesz mondjuk a ProcessID változó, a levelező alkalmazás munkafolyamat azonosítója. Amíg megírod a levelet, aktív ez a munkafolyamat. Miután elküldted a levelet, lezáródik ez a munkafolyamat és a ProcessID-ben tárolt azonosítóhoz nem fog érvényes munkafolyamat tartozni. Mindeközben az Excel makró egy ciklusban teszteli, hogy érvényes-e még ProcessID. Amint érvénytelenné válik ProcessID, visszakapcsolunk az Excelre.
...
Dim ExeName As String, CommandLine As String
ExeName = ...
CommandLine = ...
On Error Resume Next Dim ProcessID As Double ProcessID = Shell(CommandLine, vbNormalNoFocus) If Err.Number > 0 Then MsgBox Chr(34) & ExeName & Chr(34) & " nem futtatható!" & Chr(10) & _ "Hiba: " & Err.Description, vbExclamation Exit Sub End If
Do AppActivate ThisWorkbook.Name AppActivate ProcessID Loop Until Err.Number > 0 On Error GoTo 0
Makróból hívok meg egy másik alkalmazást (levélküldés). Ekkor a levél lesz az aktív ablak. Ez így is van rendben, ezt szeretném. Majd fut tovább a makró és ekkor szeretném ha a képernyőn ismét az Excel jelenne meg, nem a levél (outlook)
Nem makróból hívok meg egy másik alkalmazást (levélküldés). Ekkor a levél lesz az aktív ablak. Majd fut tovább a makró és ekkor szeretném ha a képernyőn ismét az Excel jelenne meg, nem a levél (outlook)
Egyébként most vettem észre, hogy nem is abba a fórumba írtam, amelyikbe akartam. :o) Mind a két Excelt figyelem de a másik fórumot használom jobban. De most már mindegy. Megkérdezem ott is.
Júhi, köszi Delila, sikerült megcsinálta, csak az volt a baj, hogy más tulajdonságok is voltak az Összes B oszlopában nem csak az a 22 fül amire szét kellett szedje, azokat töröltem és amikor már csak az a bizonyos 22 maradt akkor megcsinálta. Első makrós élményem tök jó :-)
Remélem jól értem, hogy mit szeretnél. Ha VB-ben vagy a File felírat alatt van egy kis excel jelecske ha arra kattintasz vissza lépik excelbe.
Őszintén egyelőre ennyi amit értek a makrókhoz J Nagyon köszönöm Delila a makrót, sajna nem azt csinálja amit szeretnék de ez bizt az én hibám nem nagyon értek hozzá be kell szerezzek egy könyvet és utána nézzek a makróknak mert bizt. nagyon hasznosak és egy rakás munkát megspórolhatnék velük.
Sz.
VBA-ból indítok egy másik alkalmazást. Ekkor ennek az alkalmazásnak lesz aktív az ablaka. A munka végeztével ezt nem szeretném bezárni, de újra az Excel ablakot szeretném aktívvá tenni. Ezt milyen paranccsal lehet megoldani?
Itt a makró, amiben feltételezem, hogy az összes adatot tartalmazó lap neve Összes, a többi lapé pedig a tulajdonság nevével megegyező (jó, okos, szamár), és az Összes lapon ez a tulajdonság a B (2.) oszlopban szerepel.
Sub Lapokra() Dim sor, lapn Sheets("Összes").Select
For sor = 2 To ActiveSheet.UsedRange.Rows.Count lapn = Cells(sor, 2) 'Itt veszi az adatot a B oszlopból) Rows(sor).Copy Sheets(lapn).Select Cells(Range("A65536").End(xlUp).Row + 1, 1).Select ActiveSheet.Paste Sheets("Összes").Select Next End Sub
Az Entert itt tudod állítani:
Eszközök ---- Beállítások --- Szerkesztés --- be kell pipálni, hogy Enter után továbblép és kiválaszthatod az irányt is, hogy merre menjen.
A Tab-hoz nem tudok (még:) hozzászólni.
Sz.
Sziasztok!
Itt a köv. feladvány: van a 22 fülem ahová be kellene tegyen egy másik táblázatból neveket pld. tulajdonság alapján amiből szintén 22 fajta van, de egy fajtán belül változó darabszámú ember. . Pld. az egyik fülbe tegye a jó embereket, mondjuk abból van 3, a köv. fülbe az okosakat, abból van pld. 8, köv. fülbe a szamarakat x darabszámút. Valami jó kis képlet kellene amivel egyszerre mind a 22 fület elintézhetem J. Ha rákeresek az Fkeressel az a baj csak az elsőt adja ki a köv. x darabot nem.
Sz.
A következő problémáim vannak, illetve lettek, csak úgy ok nélkül. Office 2007-et használok, az excel-el vannak problémáim:
1.) Sokszor van szükségem adatbevitelhez a [] jelekre, amit itt láttjátok szépen betudok gépelni. Az excel-ben sem magyar, sem angol kiosztással ne tudom használni.
2.) Nemrégiben egyik napról a másikra a TAB-om nem a megszokott módón viselkedik. Nem a következő oszlopra ugrik és kijelöl, hanem doksinként rapszodikus módón egy sokkal távolabbiba.
3.) Az enter leütésére a kijelölés nem ugrik a következő sorra, egyszerűen megszűnik a kijelölés és a cellában marad a kurzor.
Alternativ megoldás a nullás problémára: 1.) Kijelölöd a már átmásolt területet. 2.) Ctrl+1 (Format Cell) 3.) Válaszd a Number-s kategóriát, 4.) Numbers alkategóriát válaszd és állítsd be, hogy milyen számformátumot akarsz látni (tizedes jegyek száma, ezres vessző legyen, ne legyen, negatív szám színe), 5.) Ha ez kész, akkor lépj át a Custom kategóriába és rakj a megjelenő szerkesztő ablakba a látható formázási string mögé egy pontosvesszőt és két idézőjelet.
Példa: A szerkesztőkisablakban az jelenik meg hogy: #,##0_ ;-#,##0 (fekete negatív szám, ezres vessző, tizedesjegyek nélkül) Ekkor te úgy szerkeszted át, hogy így nézzen ki: #,##0_ ;-#,##0;""
Ugyanez piros negatív számokkal, ezres vesszővel és tizedesekkel: Ablak tartalma: #,##0.00_ ;[Red]-#,##0.00 A te javítások után: #,##0.00_ ;[Red]-#,##0.00;""
Most, hogy mondod: Excel 2007-ben: 1.) Kijelölöd annak a sheetnek az összes másolandó celláját amit másolni akarsz 2.) Copy (Ctrl+C) 3.) Kijelölöd annak a sheetnek egy celláját ahova másolni akarsz (ide fog kerülni a másolt tartalom bal felső sarka, normál esetben ez az A1 cella) 4.) Home tab/Paste ikon és itt a lenyíló menüből a Paste Link-et válaszd. 5.) Tada!
Nullák elrejtése mint lent.
Excel 2003-ben asszem annyi a különbség, hogy a Paste special-t kell választani ami az Edit menüben van.
A 0 értékek elrejtése: Excel 2007-ben: 1.) Excel főmenü (bal felső sarok, ahonnan nyomtatni, meg menteni szoktak) 2.) Excel options (a lenyíló menü jobb alsó sarka) 3.) Advanced almenü 4.) Görgess lefele amíg azt nem látod, hogy "Display option for this worksheet" 5.) A negyedik tétel a listában: Show zero values... 6.) Na, ezt kattints ki és huss eltünnek a zéróid.
A megoldás nem rossz, kipróbáltam csak minden üres cella helyére betette a 0-át ahol nem volt adat az eredeti cellában, ezt nem értem miért csinálta. És az a helyzet, hogy egy excel táblában van 22 fül amit szét kell osszak 11 excel táblába, szóval ezzel a módszerrel lesz mit csináljak egy darabig főleg a 0-ások törölgetése miatt. Azért nagyon köszi ez sem jutott nekem eszembe :-) Valami olyasmin gondolkodtam, hogy hivatkozni arra a táblára és fülre és azt egy az egyben betegye egy másik excel táblába persze mindig frissítve :-)
A lenti - tökéletes - megoldáshoz még annyit fűznék hozzá, hogy a fentiek elvégzése után érdemes figyelni a file megnyitásakor, mert az Excel2007 előszeretettel és automatikusan letiltja a külső file-okra való hivatkozások frissítését!
Szóval legyél benne biztos, hogy frissítetted a hivatkozásokat.
Állj egy olyan cellába, amelyikben a másik füzet adatát szeretnéd látni.
Kezdd el a képlet beírását egy = jellel.
Kattints a másik füzetedre, ott is a másolandó cellára.
Enterezd le.
A kapott képletben szögletes zárójelek között lesz a másik füzeted neve, utána a lapnév következik egy felkiáltójellel a végén, majd a másolandó cella fix hivatkozásként.
A két $ jel eltávolítása után a képletet átmásolhatod a teljes területre, ahol a másolandó füzet adatai kellenek.
A másolt füzetben mindig a másolandó füzet aktuális értékei szerepelnek majd.
va különböző workbook-ok azonos nevű füleit (worksheet-jeit) szeretnéd szinkronizálni...
Kérdés: vannak workbook-ok amik változhatnak és ezek változását szeretnéd látni egy - hívjuk Master - workbookban vagy bármelyik workbook változik az összes le kéne követnie (megnyitáskor).
Ez az első kérdés. Ha nem a Master workbook változatról van szó akkor nagyon durva a megoldás (egy makró ki kell olvassa minden workbook utolsó mentési idejét és összehasonlítani az éppen aktuális workbook utolsó mentési idejével. Ha itt eltérés van (az aktuális változott régebben) akkor cellánként át kell nézni a workbook minden fülét és minden celláját és a változtatásokat lekövetni. Macerás...
Speciális eset: ha csak két workbookról van szó és abból az egyik a Master, akkor elég a Master minden celláját hozzálinkelni a másik minden cellájához. Ezt relative könnyű megcsinálni és még programozni sem kell hozzá.
Sziasztok!
Egy olyan kérdésem lenne, hogy különböző excel táblákban lévő azonos fülű táblákat hogyan tudnék úgy összekapcsolni, hogy ha változtatom az egyik excel táblában a fület mikor megnyitom a másik táblát akkor abban is felajánlja az elöző tábla azonos fülében lévő adatokon végrehajtott változtatások elfogadását, vagy csak autómatikusan változtassa meg az is jó lenne.
Nagyon köszi előre is annak aki tud segíteni!
Szép napot!
Sz.
Ja, időnként elcseszett egy logikát követ az excel object model... Mongyuk ha jobban belegondol az ember akkor logikus, hogy egy ablakban több panel is lehet és akkor panelszinten kell rendezni a dolgot, nem ablakszinten. Ezért nincs is az activewindow-nak olyan tulajdonsága amivel ezt meg lehet csinálni.
Nem csak hogy félreértettem, de még el is rontottam, mert a .select a képernyő közepére rakja a hivatkozott cellát... Meg az .activate is, ahogy elnézem.
Nem értem, hogy miért nem jó, amit javasoltam. Ha megnyitsz egy munkalapot akármelyik ablakban, és bebillentyűzöd, hogy pl. F5 AC329, akkor ha az AC329 előzőleg nem volt a képernyőn, akkor a képernyő bal felső sarkába kerül, kijelölve.
hűha, ezt nem is értem, de valószínűleg rosszul tehettem fel a kérdést. A lényeg: kopipaszte jellegű makróval értékké alakítva új munkalapra másolok egy másikat. A munkalapot átnevezem (egy cellából veszem a munklapnevet)
Ez egy nagy táblázat és ennek a közepe táján vannak azok az adatok, amelyeknek szem előtt kell lennie a munkalap generálódásakor. Ez úgy lenne jó, ha a G38 cella az ablak bal felső sarkában lenne. Tehát a kérdésem az volt, hogy van e olyan tulajdonsága az ActiveWindow(?)-nak amellyel be lehet tájolni a helyzetét, de mondhatnám úgy is, hogy a vertikális és horizontális scrollozást úgy beállítani, hogy a g38 cella az ablak bal felső sarkában legyen (pl függetlenül a Zoom-tól, vagy hogy milyen eszköztárak aktivitása befolyásolja az (adat)ablak méretét
sziasztok, azt hogy lehetne megoldani, hogy pl. a G38 cella legyen az ablak bal felső sarkában? (Ezzel lenne megoldva a cél, hogy a nyomtatási terület legyen látható) többszörös Scrollozgatással megoldottam, de nem tetszik :( biztos vagyok benne hogy van nem favágós megoldás is.
Inkább olyasmiről lehet szó, hogy a rendszerleíró adatbázisban regisztrált programokat ismeri fel névről, és azoknak - ugyanonnan - tudja az elérési útvonalát is.
Azt nem értem itt miért nem kellett az egész útvonalat megadni és hogy hogy mégis tudta hol keresse a winwordot? Van valami alapértelmezett hely ahol ilyenkor keres?
Gondolom, benne volt PATH környezeti változóban megadott elérési utak között a winword.exe mappája.
Nem kell hogy WinZip legyen, főleg hogy ha más használná majd a macrót, akkor nem is biztos, hogy lesz neki WinZip-je. Szóval még jobb az eleve beépített, amit ajánlottál.
Hadd kérdezzek még valamit, ha nem baj.
Most voltam VBA kurzuson és próbálgattuk ezt a macrót:
Sub akármi()
Shell "winword",3
SendKeys String:="Hello"
Wait:=True
End Sub
Azt nem értem itt miért nem kellett az egész útvonalat megadni és hogy hogy mégis tudta hol keresse a winwordot? Van valami alapértelmezett hely ahol ilyenkor keres?
A WinZIP valamiért kőben van vésve, ugyanis XP, Vista, Win7-be már be van építve a zip kezelése (Tömörített mappa), és Windows Shell-el tudod kezelni. A következő linken elég sok Excel VBA példát találsz: http://www.rondebruin.nl/windowsxpzip.htm
Szerintem azt kellene megnézni a winzip leírásában, hogy hogyan kell parancssorból használni. Milyen paramétereket, milyen sorrendben kell beadnod neki. Azt kell majd a Shell parancsba integrálnod.
A formátum változtatását az A1-en állva hajtom végre. A 3 függvény (karakter- és háttérszín, magasság) értéke akkor változik a SelectionChange hatására, ha az A1 mellé kattintok, holott Me.Range("A1").Calculate szerepel a Private Sub-ban.
Hát ja. És az is lehet, hogy ráadásul verziófüggő. Mivel ez a működés egyáltalán nem tűnik logikusnak, elképzelhető, hogy hiányos tervezés eredménye, és pl. xl2007-ben már másképp oldották meg.
Kicsit jobban utánanéztem, és rájöttem, hogy az előbb eltúloztam a dolgot. A súgó azt írja, hogy a Volatile-ként megjelölt függvények újraszámolódnak, ha a munkalap bármelyik cellájában kalkuláció történik. Vagyis nem az összes képlet, csak az "illékony" képletek számolódnak újra. Az is csak akkor, ha a számolás egyébként automatikusra van állítva. Sorry, ha behülyítettem valakit.
Ha az elegendő, hogy első kattintásra mutassa a cellaszínt, akkor az alábbi megoldást javaslom:
Állítsd a számolást automatikusra, és
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Me.Range("A1").Calculate End Sub
(Szerintem abban a kakukktojás munkafüzetedben is valami ilyesmi lehet.)
A Range("A1") megadásával azt állítod be, hogy nem az egész munkalap, hanem csak az A1 cella, és persze definíció szerint a Volatile függvények számolódnak újra.
Másik lehetőség, hogy a számolást manuálisra állítod, és egyenként megadod, hogy mely cellák számolódjanak újra:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Me.Range("A1, C2, F14").Calculate End Sub
Ezzel a módszerrel úgy tapasztaltam, hogy a Volatile függvények sem számolódnak újra, csak a megjelölt 3 cella.
A magasságot megadó akkor is frissül, ha a hivatkozott cella sorazonosítójának alsó vonalára kattintok, ha szerepel benne a Volatile, ha nem. Az automatikus számolás be van kapcsolva. Ennek kikapcsolásakor a színre vonatkozó függvény értéke F9-re módosul, a magasságéra vonatkozó NEM.
Hogy bonyolítsam a dolgot, az én szin függvényem a volatile ellenére is, csak az F9-re reagál a szinváltozásra. Még akkor is, ha be van kapcsolva az Automatikus újraszámolás. De nem mindegyik füzetben van így. Van amelyikben a szinváltozásra ugyan még nem, de az azt követő első klikkre már az új színértéket mutatja. Akkor is, ha kikapcsolom az Automatikus újraszámolást. Ráadásul úgy néz ki, hogy ebben a füzetben nem is lehet kikapcsolni valamiért a automatikusan újraszámol funkciót, mert többi képletváltozást is azonnal nyomonköveti. Dehogy miért, a fene se érti.
A képletek elvileg és általában akkor számolódnak újra, ha a bemeneti tartományuk tartalmában változás történik. Ehhez képest a Volatile azt teszi, hogy a képletek újraszámolódnak, ha a munkalapon bármelyik cella megváltozik, akár van köze a képlethez, akár nincs. Tehát gyakorlatilag minden művelet után átszámolja az Excel az egész munkalapot. Ha sok a képlet, akkor ez nagy szívás.
Namost, én azt gondoltam, biztos azért van benne tbando függvényében a volatile, mert az arra is érzékennyé teszi az átszámolást, ha a cella formátuma változik. Csak lusta voltam letesztelni. De ezek szerint a formátum változása nem indítja be az újraszámolást. Akkor nem igazán tudom, mi lehet a megoldás, mert nem ismerek olyan eseményt, ami formátumváltozásra indul be. Hacsak nem az OnTime metódus, de az nagyon megbízhatatlan.
Ezzel az "illékony" applikációval óvatosan kell bánni, főleg a sok képlet van a munkalapon. Még a végén belefutsz abba, hogy az Excel minden lélegzetvételedkor újraszámolja az összes képletet.
Saját CELLA függvénnyel szeretném a cellamintázat színének, és a cellamagasság értékeit lekérdezni, mivel az Excel ezeket nem adja meg. Ebben szeretném, ha segítenétek. Korábban a font színek lekérdezésében József segített, aminek felhasználásával az alábbi függvénymakrót kreáltam. Gondolom egy-két terminus kicserélése elég lesz az uj függvények elkészítéséhez.
Function szin(cella) Application.Volatile szin = cella.Font.ColorIndex End Function
Azért van ezzel egy kis gond. Most próbálgattam, és a következőt tapasztaltam.
Van az a képlet, ami meghatározza a munkafüzet mappáját ("Hely"). Ha megnyitok egy munkafüzetet valahol a winchester túlsó végéről, vagy hálózatról, stb, akkor a képlet értéke megváltozik, és a most megnyitott munkafüzet helyét fogja mutatni, egészen addig, míg újra nem számolódik. Ez bizonytalan makróműködést eredményez. Szerintem inkább a ThisWorkbook.Path tulajdonságot kellene használnod, legalább a makróban.
Azt hiszem, korábban is kaptál már erre vonatkozó javaslatot.
Üdv mindenkinek. Az lenne a problémám, hogy van egy excel táblázat, amiben parkolási adatok vannak. Van egy tartomány, ahol 0 és 1-esek állnak, ezek jelzik hogy ingyenes-e a parkolás vagy sem. Ezeket a nullákat kellene törölni, de nem találom azt a függvényt amivel ez megoldató lenne - 3.pont. És a 4. feladatot se tudtam megoldani. Valaki tudna segíteni?
Vajon Cooper olvtárs gondolta-e volna, amikor megnyitotta ezt a topikot, hogy egyszer eléri a 10000 hozzászólást? (Igaz, még nincs annyi, de már közel a pillanat.) Ebből az alkalomból szeretném méltatni azt a kis csapatot, amely - akár kérdésekkel, akár válaszokkal - aktívan élteti a topikot. Kösz mindenkinek. :-)
Ezt találtam a Google segítségével 1.elindítod regedit.exe-t 2. Megváltozatatod a következő értékeket: Az Office verziódat ellenőrizd le pl. [HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelSecurityFileOpenBlock] "LotusandQuattroFiles"=dword:00000000 "LegacyBinaryFiles"=dword:00000000 "LegacyDatabaseAndDatasourceFiles"=dword:00000000
Ez most egy nem igazán excel kérdés lesz, de azért mégis. Talán valaki tudja rá a választ. Az excellel gyakran dolgozom tovább wk1 kiterjesztésű lotus filekból. Illetve dolgoztam a mai napig. Mert ma, amikor be akartam hívni egyet, ezt a hibaüzenetet kaptam:
"A megnyitni kívánt filetípust a rendszerleíró adatbázis egyik házirend-beállítása letiltotta."
Hogy mi válthatta ki a letiltást nem tudom. Talán egy Windows frissítés mellékhatása. Más okát elképzelni sem tudom.
Megpróbáltam kiküszöbölni, de nem sikerült. Átnéztem a házirendi-beállításokat, van vagy 200 belőlük, de képtelen voltam rájönni, hogy melyikük tilthatta le közülük. Van valakinek valamilyen tippje?
Az átmásolás után a képlet sajnos kiegészül egy hivatkozással arra a fájlra, amiből átmásoltam a képletet. Hogyan tudom ezt elkerülni?
Nem tudod elkerülni. A excel eleve így van tervezve. De azért mégis van rá egy mód. A képletben hivatkozott cellát utánamovelod az új füzetbe. (ctrl x, ctrl v)
1. Így hirtelen nem tudom, de talán ha sorba rendeznéd egy a kérdéses adatokat egy külön lapon vagy munkafüzetben és megszámolva az elemek számát, már könnyebben kinyerhető a második és az utolsó előtti adatok.
2. Kattints a képletet tartalmazó cellára, majd a szerkesztő sorba. Ott jelöld ki a teljes képletet, majd nyomj Enter-t. Ezután menj át a másik munkafüzetre és ott szintén kattints a kívánt cellára, majd a szerkesztó sorban illeszd be az imént kimásolt képletet.
1. Milyen függvény eredményezi egy oszlop második legnagyobb értékét, illetve második legkisebb értkét (az utolsó előtti és a második értéket nagyság szerint sorrendbe helyezve).
2. Képletet másolok át az egyik fájlból a másikba, ami az adott fájlban lévő munkalapra hivatkozik. Az átmásolás után a képlet sajnos kiegészül egy hivatkozással arra a fájlra, amiből átmásoltam a képletet. Hogyan tudom ezt elkerülni? (Csak a képletet másolja át, a fájlra történő hivatkozás nélkül).
Nemrég tárgyaltuk a szűrést. Tehát van sok oszlop tele számokkal és üres cellákkal.
Egy-egy oszlopot szűrtem üresre, így az üres cellák szerint lett sorbarendezve, magyarul az első üres cellát követi a második üres cella. Természetesen a szűrés előtt a két üres cella között voltak a számok. Csak azért ragozom ilyen részletesen, hogy teljesen érthető legyen :D
Szeretném ha ezek az üres cellák sorszámot kapnának, de elkülönüljenek az egyébként köztük lévő számoktól. Tehát valahogy így lennének átnevezve az üres cellák:
1a
2a
3a
4a
5a
6a
...
Eddig nem jutottam dűlőre.
Cellaformázással átalakítottam #a -ra és az első cellába 1-et írva próbáltam húzással, hogy növekvővé írja tovább, de nem jött össze.
Aztán próbáltam egy külön oszlopból bemásolni az 1a, 2a, 3a ...-t , így se jött össze, mert nem a szürt azaz üres cellákba másolta, hanem az eredetibe, tehát a 2a, 3a, 4a stb felülírta az eredetileg az oszlopban első üres cellát követő számokat.
Eddig egyedül manuálisan sikerült a szűrést követően, de ez baromi sokáig tartana és előfordulhat, hogy hibázok begépeléskor.
Van erre megoldás?
Lehet az 1a, 2a ... az a helyett más is, csak jó lenne ha valahogy meg lehetne különböztetni őket az oszlopban lévő számoktól, miután a szürést megszüntettem.
Sziasztok, egy kérdésem lenne. Egy olyan függvényt szertnék készíteni, ami egy táblázatban az egyik oszlop adatai közül kiválasztja a minimális értéket, és a minimális érték sorában lévő másik oszlop értékét adja eredményül.
(Például legyenek testsúlyok az egyik oszlopban, magasságok a másikban, és akkor legyen a minimális testsúlyú ember magassága a függvény eredménye.)
Egyelőre csak azt tudtam megcsinálni, hogyha egy konkrét értékkel egyenlő egy konkrét cella, akkor adja eredményül a mellette levő cella értékét.
Ha csak a reláció jellege változik akkor a cseréhez elég a relációjelek cseréje (kivéve ha = ről akarsz valami másra váltani.)
Ha pedig azonos relációról akarsz két másfélére, akkor a B$1 és B$2 hozzáfűzése már megkülönbözteti őket.
Ha két egyforma reláció van, akkor sem tudnám utána különbözőre cserélni szerintem, mert nincs ami alapján meg lehetne különböztetni, ha két azonos szám van, pl >4 és >4 és ezt szeretném pl >3 és >2 -re változtatni.
A = jel meg tényleg kivitelezhetetlen így a képletben lévő de nem erre a két relációval kapcsolatos többi = jel miatt.
A te variánsod, úgy néz ki jól müxik. De kipróbáltam néhány másmilyent is, hát volt amelyiknél kifejezetten elbarmolta a képletet. Szóval csak óvatosan. Nem árt ha van biztonsági táblád. Valamint nem rögtön belevágni az összes cserébe, hanem először megnézni egyen, és ha ott müxik, csak akkor rámenni a teljes táblára.
Közben likvidáltam az oszlopok közti elválasztó nemnumerikus karaktert, így maradt ez:
=HA(ÉS(A10>4; A11>4);B10+1;0)
Jó ötlet ez a csere, köszi szépen. Csak akkor okozhat gondot, ha nem egyforma a relációra akarom cserélni.
.
.
.
Most azt próbálgattam, hogy mit csinál ilyen esetben a táblázatban ha beleírom:
=HA(ÉS((A10>4)*1; (A11>4)*2);B10+1;0)
Érdekes módon semmi káros hatással nincs az eredményre.
Így már fogok tudni cserélni >4)*1 és >4)*2 szerint.
Ha esetleg tudtok róla, hogy ez gubancot okozhat, vagy nálatok gubancot okoz, akkor szóljatok légyszi. Mert akkor nem írom így meg az egész táblázatot, amire holnap fog sor kerülni valószínűleg.
Nehéz elhinnem, hogy nem lehet egy külső relációt bevonni a képletbe :((
Így elég lenne egy tök rövid függvény. És nem kéne átírni az összes párszáz számolós oszlopot, ha kiderülne hogy egy új reláció szerint is meg kéne számolni azon cellákat darabra, amikben az egyik cella =2 és az őt követő >7 vagy hasonló.
Néztem a pivotot, de ennyi idő alatt abban nem láttam olyat, hogy azokat a cellákat számolja össze az oszlopban darab szerint, amikor két egymást követő cellára vonatkozóan lehet számolni, amik megfelelnek bizonyos feltételeknek, pl >4 és >6 stb.
Nagyon úgy tűnik, mégis csak a makro lesz a megoldás. Amivel bemásolod a megfelelő képletet az aktuális B-oszlopba. Én nagyon nem értek hozzá, de tán még én is meg tudnám csinálni. Akkor pedig te is.
Néztem, de azt úgy értelmeztem, hogy az üres cellák kiszűrésére írtad, meg egyébként sem ismerem a pivot táblát, bár nézegettem a netes leírásokat róla. Én meg utána írtam, hogy a szűrés parancssal csináltam, majd kopiztam az oszlopot.
Eddig tbandó függvényét sikerült a VÁLASZT függvénnyel kombinálni, azzal működik.
Megpróbálom ezt a relációs IGAZ/HAMIS dolgot, hátha egyszerűbb lesz.
nézted a 9914-et? A relációkat egyébként be tudod tenni egy külön cellába és IGAZ/HAMIS értéket ugyanúgy visszaadja, amint a HA()fgv "feltétel" argumentumába is kell. pl.: =A10>4 Ha nem erre gondoltál v. ismerted akkor bocs.
Próbáltam az OFSZET függvénnyel is. A táblán kívül csináltam volna annyi oszlopot, amennyi feltétel szerint kéne vizsgálni. Tehát itt pl az EEE oszlopban lett volna a korábbi függvény ami a B-ben volt:
ilyenkor az előtte lévő EED oszlop természetesen üres.
Az eredeti helyén a B oszlopban akartam OFSZET-tel az EEE-ből idehozni a függvényt. De ahogy tapasztalom, csak értéket hajlandó vinni, tehát a 0-k kerülnek B-be. És nem pedig maga a függvény sajnos. Pedig milyen jó lett volna.
Szóval ez így nem működik.
Nincs valami összefűző függvény, aminek folytán bele tudnám tenni a feltételeket tartalmazó (A1 cellában: >4, B1 cellában: >4) cellából a >4-et a
Hát például úgy, hogy kiegészíted a Alaptáblázatodat még 2 oszloppal.
Az elsőben, mondjuk a C11-gyen kezdve, összefüzöd a nevet a fizetéspoblémával. A másodikba pedig beírod ezt a képletet: Darabteli(C$11:C11;C11). majd végighúzod.
Az így kapott kimutatásod első eredményoszlopának összegzései választ adnak a kérdésedre. A további oszlopok meg mutatják, hogy hányan vétkeztek 2x, 3x stb.
E forma egyet nem tud még: Ha valamelyik fószer mindkét módon sumákolt, azt nem jelzi, hanem úgy kell kibogarászni belőle. Vagy egy további kumutatással kimutatni.
Sziasztok! Ezzel kapcsolatban senki sem tud segíteni?:( Nem tudom, hogy azért, mert ti sem tudjátok a megoldást vagy nem írtam le elég érthetően a problémát?
Azt szeretném megkapni, hogy egy-egy probléma hány beszállítónál merül fel, de ehelyett mindig a tételeket összegzi, nem a beszállítókat.
Bár én csak olyat találtam, ahol a mm és a 0 között kettőspont van, de a percet hogyan teszem be a karámba []? Bocsánat, most kicsit elszőkült az agyam ;)
Sziasztok! Érdekes problémával kerültem ma szembe. Evezősversenyt "adinisztráltunk" excel-ben, és nem találtunk olyan számformátumot, amibe be tudtunk volna pl ilyen időket vinni, mint 61 perc 25 másodperc, 3tizedmásodperc.
(Ez egy hosszútávú verseny, ami azt jeleni, hogy percenként indulnak a versenyzők, eveznek 6km-t, majd célbaérnek. A módszer a következő volt: Amikor egy kategóriából elindult az első, akkor indult a stopper. Egy perc múlva indult a következő versenyző. Mikor célba ér egy versenyző, akkor feljegyezzük a rajtszámát, és azt, hogy a kategóriájában elsőként indult versenyző indulási ideje óta mennyi idő telt el (teljes idő), majd kivonjuk az ő indulási ideje és a kategória első indulója közötti különbséget (korrekció), így megkapjuk az adott versenyző tiszta idejét. Mivel a táv leevezése 20+ percet vesz igénybe, valamit előfordult egy kategóriában 50+versenyző, ezért nem megfelelő az a számformátum, ami 59 percig működik.)
Egy 5 feltételes képlettel megoldható. A B1-gyel vezérled, hogy az A11 melyik relációját vizsgálja a B2-vel. Persze kurva hosszú képlet lesz, de csináltam ennél hosszabbakat is, és többszáz soros táblázatokkal is elég jól elboldogult. Majd számolj be róla, hogy ez mennyit bírt.
az autoszűrőt biztosan ismered, abban van ilyen, hogy "üres" tényleg nem jó a példára, azt gondoltam hogy egy oszlop üres sorati ki lehet így egyszerre törölni, de csak sort engedne kitörölnim az nem jó ide. De akkor is egyszerűbb a következő, mint sorbarendezgetni:
Tartományt kijelölni az oszlopban (üres cellákkal együtt) ctrl+g - irányított Üres cellák jelölőbe pont. OK Jobb gomb egyik kijelölt cellán - törlés - cellák eltolása felfelé. kész.
Kivenném a képletből a 2 feltételt (>4 és >4), két külön cellába írnám és oda hivatkoznék rá.
Van arra valami megoldás, hogy relációval együtt írhassam a táblázat tetején, mert akkor ránézésre is látszik, hogy mi alapján vizsgálva, meg így nem kéne átírni a képletben mindig a >, <, = esetén.
de így nem fogadja el, 0-val tölti fel a B oszlopot.
Külön oszlopokat nem szeretnék emiatt beszúrni, ahol az egyikben a nagyobb+nagyobb, másikban a nagyobb+kisebb, haradikban kisebb+nagyobb, majd nagyobb+egyenlő stb relációk szerint lennének a képletek, mert kb 2000 oszlopra duzzadna a mostani 100valahányról.
A szentségit. Tényleg számnak érzékeli. És nem is akármilyennek, hanem baromi nagynak. Gondolom amekkorát az excel még számértéknek elfogad. Ha viszont bekapcsolod a másodlagos képletkiértékelési módot a Beállitásokban, akkor meg nullának látja. Emiatt az elsődleges excel képletkiétékelésnel X+1=HIBA, a másodlagosnál (Lotusosnál) meg X+1=1. Máskor meg hibaüzenet ad, hogy az adatsorban nem numerikus adatok is vannak, ezért nem tudja kiszámolni a müveletet.
Na de rátérve a te problémádra, ha előfordulhatnak stringek az adatoszopodban, akkor nincs mese, be kell iktatni a képletbe egy SzÖVEG.E függvényt:
Viszont az oszlopba beszúrtam egy nemnumerikus karaktert, ami jelzi az eredeti helyén az oszlop végét. Ezután a karakter után következik a többi szám és így tovább...
Namármost amit a B11-be kell írni (és lehúzom az oszlop legalájáig) ezt a nemnumerikus karaktert számnak érzékeli.
Írok egy példát, így érthetőbb:
a feltétel hogy mindkét cella nagyobb legyen 1-nél:
B11-be: =HA(ÉS(A10>1; A11>1);B10+1;0) alapján ez lesz belőle:
A B C
1 0
1 0
2 0
X 1 1
1 0
1 0
1 0
1 0
Közben az X mellett 0-nak kéne lenni, mert az X nem nagyobb 1-nél, de az excel mégis annak veszi.
Én nem mennék rá erre a linkre... Egy 4 hsz-ú valaki, aki mindegyik topikba ugyanezt a linket teszi be (illetve tenné, ha nem lenne olyan béna, hogy 4-ből 2-szer nem sikerül neki) az gyanús. A link maga is gyanús.
Az üres cellák kiszűrésére igen egyszerü módszer, hogy leindexszelsz egy oszlopot, majd sorba rendezed a tábázatod az üres cellákat tartalmazó oszlopra. Így az üres cellát tartalmazó sorok a tábálzat aljára kerülnek, föléjük beiktatsz egy üres sort, hogy elváljon az értékes adatokat tartalmazó táblázatodtól, majd újra sorba rendezed a táblázatod, de most az indexek alapján. Így visszakapod az eredeti sorrendet az üres cellát tartalmazó sorok nélkül.
Ha bármikor vissza akarod állítani az eredeti táblázatot, akkor a táblázatból kizárt üres cellás sorokat is belefoglalva csinálsz egy újabb sorbarendezést az indexekre.
A fentiekhez egy jó tanács: A sorbarendezések elött csinálj egy biztonsági másolatot a tábládról. Mert előfordulhat hogy egy rejtett üres oszlop miatt csak a táblázat egyik felét rendezed, az pedig biztonsági másolat nélkül igen nagy szívás. Hogy ezt elkerüld érdemes leellenőrizned, hogy az utolsó sorbarendezhető oszlopod megegyezik-e a táblázatod utolsó oszlopával. Vagy a kijelölést CTRL+T-vel végzed majd CTRL + . -tal körbeugrálod a kijelölt táblázatod sarkait.
tbandó és robbantómester köszi. Még el kell mélyednem benne, a pivottáblát nem ismerem. Nekem is a jobb áttekinthetőség végett az üreseket kiszűrném egy új oszlopba. Mondjuk el fog tartani egy darabig, mert át kell másolnom egy másik munkalapra 80-90 oszlopot. Nincs erre egy egyszerűbb megoldás? Azt hittem hogy az irányított beillesztésnél az üresek átugrása pont erre lenne jó, de ugyanúgy az üresekkel együtt illeszti be.
Pivot táblával kapcsolatban lenne kérdésem. Meg próbálom értelmesen leírni a problémát, remélem sikerül. Vannak (1) beszállókat azonosító kódok, illetve nekik nyitott tételeik, amelyekkel (2) különböző probléma van (pl. be van blokkolva a tétel, manuális kifizetésre vár, stb.). Azt szeretném megkapni, hogy egy-egy probléma hány beszállítónál merül fel, de ehelyett mindig a tételeket összegzi, nem a beszállítókat.
Excel Comma Separated Value File-okat kaptam. Az A oszlopban egy cellában vesszővel elválasztva van a két érték. Hogyan lehet ezeket úgy megnyitni vagy átalakítani, hogy két cellában legyenek az értékek? Remélem, tudtok segíteni, köszönöm.
Az eredmény azért 3, mert az 1-es tipusúnál a számoknak növekvő sorrendben kell lenniük. Tehát az a szisztémája, hogy a sornak az első 1-nél nagyobb szám elötti elemére mutat. Ami nem feltétlenül 1-es, sőt, mondhatni az 1 csak határesete. Mivel ennek a keresésnek a célja, hogy az 1-t alulról legjobban megközelítő számra mutasson.
hát, ezt inkább nem próbálom ki - én biztosan nem tököltem volna vele ennyit :) Viszont ezt nem tudtam, hogy a HOL.VAN 1-esre paraméterezve az utolsót adja vissza. Sőt, ezt most sem nagyon hiszem el.
pl ha a2 cella sorcímkéje "sor" és b1 cella oszlopcímkéje "oszlop" akkor így tudsz hivatkozni a b2 cellára: =sor oszlop (a szóköz a metszet operátort jelenti) ebből aztán rögtön tudod, hogy mi az.
>ki lehet kapcsolni a "képletekben címkék is használhatók" dolgot
>Ezzel még nem találkoztam. Mire jó ez? Hol van ennek értelme?
szuper dolog.
Bár nem a te problémádra való, előzetesen ennek nem néztem utána.
Viszont ha hasunálod, akkor el tudod kerülni, hogy cellákat(cellatartományokat) láss el NÉVvel.
A lényege az, hogy ha bekapcsolod a beállításoknál, akkor sor -illetve oszlopcímkéket tudod a képletekben használni, akár a metszetüket is. Azért jó dolog, mert áttekinthetővé teszi a táblázatot, azonnal tudod, hogy mit miből számol a cella, nem kell visszanézned hogy mi az oszlop ill sor címke.
ki lehet kapcsolni a "képletekben címkék is használhatók" dolgot
Ezzel még nem találkoztam. Mire jó ez? Hol van ennek értelme?
Viszont megcsináltam a 2 kiegészítő oszlopos variánst. Ez a változat az üres cellákat úgy tekinti mintha ott se lennének. Úgy néz ki, minden variánsra müködik. Legalábbis remélem.
Elég sokat eltököltem vele. De megérte, mert kiismertem a HOLVAN függvény lelkivilágát. Az 123455556 sorozatra a HOl.VAN(5;sorozat;0)=5, míg a HOL.VAN(5;sorozat;1)=8. Azaz a 0 típusú keresésénél az első elemre mutat, az 1-típúsunál az utolsóra. Talán másnak is hasznos lesz.
ez szrtem makrós feladat. Úgy gondolom ugyanannyi fáradtság megírni másnak erre egy makrót, mint neked összekattintgatni kopipaszte. + a makróhoz ismerni kellene a munkalapok szerkezetét
Sziasztok! Van egy olyan problémám, hogy egy 30 munkalapfüllel rendelkező excel állományban azt szeretném megoldani, hogy a különálló lapok egyetlen lapba kerüljenek. Meg lehet ezt oldani pár kattintással? Előre is köszi: Paragabika
Nem feledkeztél meg arról a tényről, hogy a számok között üres cellák vannak?
De. Megfeledkeztem róla. Pontosabban 0-nak tekintettem. Ha így nem jó, mert az üres sort úgy kéne tekinteni, mintha ott se lenne, akkor az első képletemet így egészíteném ki:
Gyakran van, hogy van egy Munkafüzetem hatalmas táblázattal tele tartományelnevezésekkel. Ebből kell különféle variációkat létrehozni. Mindegyik variációra csinálok egy másolatfüzetet. Majd ezek végtábláit tartalmazó lapokat akarom összehozni egy közös füzetbe.
Nos ilyenkor rendszerint elfelejtkezem arról, hogy a különböző füzetekben ugyanazok a tartományelnevezések szerepelnek, amit az excel észlel, és ezért lelkiismeretesen mindegyik névre rákérdez, hogy megváltoztatom-e vagy sem. Nekem meg herótóm van attól, hogy egyenként végig kell menni az összes néven, nem lehet egylépésben elrendezni a választ. Ráadásul kiugrani sem lehet a folyamatból, hogy kitöröljem az egyik füzetből az összes nevet. Nos erre kérdeznék rá: van-e szerintetek valamilyen funkció, ami leállítaná a rákérdezéseket. Az ESC nem jó, mert újra felteszi a kérdést.
Tegyük fel, hogy a pédád valós, ahogy szemléltetted. Feltételezem, hogy az a1-ben oszlopcím vab, így a2-től kezdődnek az 1-esek, továbbá b oszlopban a példád szerinti mintaként ugyanúgy azok megszámolása. a c oszlopba (C2-be) írj pl egy ilyet: =SOR(A2) és húzd végig. (Ez csak sorszámozáshoz kell)
A következő lépésben készíts egy pivottáblát (adatok/Kimutatás v kimutatás diagramm) és foglald bele az a-b-c oszlopokat. Itt a sormezőbe húzd bele a c, majd ezt követve szintén a sormezőbe a b oszlopot.
Ezzel eltűntek az üres sorok és megmaradt a b oszlopban lévő számok sorrendje. (Az "Összesen" sorokat távolítsd el a kimutatásból)
Innen től egy Ha() fgv-el már gyerekjáték meghatározni a célt.
pl a kimutatástábla "F8" cellájában keződnek a megszámolt egyesek, akkor pl.: D8-tól lehúzni: =HA(F8>4;HA(F9>4;1;0);0) és a végére egy szum - és meg is van a számod.
Szerintem ez a legegyszerűb. Vagy makró, de az meg minek ha nem muszáj.
Egy for ciklus végigmegy B oszlopon, ha kitöltött mezőhöz ér, akkor hasonlítja az előző kitöltött mező értékével, ha kell számol és megjegyzi az aktuális mező értékét, mint előző kitöltöttet...
Még annyit hozzáfűznék az előzőhöz, hogy jelenleg a nevezett oszlopban a számok között vannak üres cellák Ez az egész a korábbi kérdésemhez kapcsolódik, amikor egy oszlopban az egymás után következő 1-eseket kellett megszámolni. Ennek az eredményei vannak ebben a nevezett oszlopban.
Így néz ki gyakorlatilag, és itt a B oszlopban lévő számokról van szó. Az egymást követő 1-esek csoportjai között általában több üres cella is van:
Adott egy oszlop, amiben egész számok vannak, mondjuk 1-től 20-ig.
5
4
12
2
1
4
10
5
1
6
mondjuk valahogy így :)
Össze szeretném számoltatni, hogy
hány egymást követő cella van az oszlopban, amikor egy 4-nél nagyobb számot megint egy 4-nél nagyobb szám követ. (a példában ugy a 10 és az őt követő 5 jelenti ezt), itt 1 lesz az eredmény.
Itt a "4-nél nagyobb" kritérium persze változni fog. Vagyis lesz majd olyan is hogy 5-nél nagyobb számot követ 3-nál kisebb, stb.
Ha szükséges, egy (vagy kettő) plusz oszlopot be tudok szúrni erre a célra.
Légyszi segítsetek! Lehet makrós megoldás is. A DARABTELI függvénnyel próbálkoztam, de nem jutottam előre.
Szia, bocs hogy csak most reagálok! Köszi szépen. Elteszem talonba ezt a javaslatot. Végül egy másik táblázatba raktam, a nem kivánt sorok kihagyásával.
A Feltételes formázás valójában 4 formátumot tesz lehetővé: a 3 db feltételes plusz az 1 db alapértelmezett formátum. Bizonyos esetekben össze lehet vonni feltételeket. Pl. ha azt akarjuk, hogy 1, 11 és 319 érték esetén legyen a cella alapszíne piros, azt egy feltételben meg lehet fogalmazni.
Az Excel 2007-es verzió 3-nál többet is tud, de 2003-ig 3 feltétel a maximum. Ezt csak makróval lehet megkerülni.
Llehet-e a cellák formátumát, - konkrétan szinét - úgy beállítani, hogy az a felvett értéktől függjön? Pl. teleteszek egy tartomány celláit véletlenszerű egészekkel és a megjelenő szám színét maga a szám határozza meg. (Talán valamelyik commodore-nál, agy a qbasic-nál volt olyan, hogy a parancs végére egy color n-et biggyesztve a kinyomtatott szín az n-től függött (EGA 16 színét használta). Itt sikerült feltételes formázást találnom, de abban csak 3 feltételre volt hajlandó figyelni. Köszi.
Mikor beírtad a képleteket a G2:J2 tartományba, a bal Alt és a pont együttes lenyomására az eredmények helyett a képletek válnak láthatóvá.
Elkezdheted a D2 képletének beírását – ami a J2-ben már kész van:
=KÖZÉP(A2;H2;I2-H2+1) –, de az = elé adsz egy aposztrófot ('), amitől a beírtakat szövegként értelmezi az Excel.
Eljutsz eddig:
'=közép(a2;
A H2 beírása helyett belépsz a H2 cellába, és az = nélkül másolod (Ctrl+c) a tartalmát, Esc-vel kilépsz a cellából, majd a D2 képlet végére beilleszted. Beírod a pontosvesszőt. Következik az I2 tartalma, amit az I2 cellából másolsz be a D2 végére, és így tovább.
Az Alt+pont lenyomására újra az eredmények látszanak.
For sor = usor To 3 Step -1 With Sheets("Munka2") .Cells(sor, 1) = Cells(sor, 1) .Cells(sor, 2) = Cells(sor, 2) .Cells(sor, 3) = Cells(sor, 3) .Cells(sor, 5) = Cells(sor, 5) .Cells(sor, 6) = Cells(sor, 6) End With
If Cells(sor, 1) = Cells(sor - 1, 1) And Cells(sor, 6) = Cells(sor - 1, 6) Then If Cells(sor, 4) = Cells(sor - 1, 4) Then With Sheets("Munka2") .Cells(sor, 4) = 0 .Cells(sor - 1, 4) = Cells(sor, 4) End With Else Sheets("Munka2").Cells(sor, 4) = Cells(sor, 4) End If Else 'Ez a sor kellett még hozzá Sheets("Munka2").Cells(sor, 4) = Cells(sor, 4) End If Next
Sheets("Munka2").Select For sor = usor To 3 Step -1 If Cells(sor, 1) = Cells(sor - 1, 1) Then Cells(sor - 1, 4) = Cells(sor, 4) + Cells(sor - 1, 4) Range(Cells(sor, 1), Cells(sor - 1, 1)).Merge Range(Cells(sor, 4), Cells(sor - 1, 4)).Merge End If Next
For sor = usor To 3 Step -1 With Sheets("Munka2") .Cells(sor, 1) = Cells(sor, 1) .Cells(sor, 2) = Cells(sor, 2) .Cells(sor, 3) = Cells(sor, 3) .Cells(sor, 5) = Cells(sor, 5) .Cells(sor, 6) = Cells(sor, 6) End With
If Cells(sor, 1) = Cells(sor - 1, 1) And Cells(sor, 6) = Cells(sor - 1, 6) Then If Cells(sor, 4) = Cells(sor - 1, 4) Then With Sheets("Munka2") .Cells(sor, 4) = 0 .Cells(sor - 1, 4) = Cells(sor, 4) End With Else Sheets("Munka2").Cells(sor - 1, 4) = Cells(sor, 4) + Cells(sor - 1, 4) End If End If Next
Sheets("Munka2").Select
For sor = usor To 3 Step -1 If Cells(sor, 1) = Cells(sor - 1, 1) Then Cells(sor - 1, 4) = Cells(sor, 4) + Cells(sor - 1, 4) Range(Cells(sor, 1), Cells(sor - 1, 1)).Merge Range(Cells(sor, 4), Cells(sor - 1, 4)).Merge End If Next
Application.DisplayAlerts = True
End Sub
Nem túl szép, hogy kétszer megyek végig az adatokon, de csak így jött össze.:(
Így kérik, nem változtathatom meg :( Az egyszer, kétszer, illetve háromszor ismétlődő sorokat megoldottam már, de a négyszer ismétlődőkkel kezdődően bajban vagyok, mert nem tudom kezelni a két logikai vizsgálatot normálisan. :(
Általánosan: az űrlapelemek aktuális értékét tudomásom szerint nem őrzi meg az Excel, úgyhogy erről magadnak kell gondoskodni. A "hogyan" az meg már lehet sokféle. Egy (rejtett) munkalapon, független szövegfájlban, tán még a Windows rendszerleíró adatbázisában is. A magam részéről a szövegfájlt használnám.
A Te konkrét példád esetében: Ha jól értem, a Listbox aktuális állapota tükröződik, mentés esetén meg is őrződik a kimutatásokban. A munkafüzet megnyitásakor egyszerűen vissza kell állítani.
"Valamint még azt vettem észre, hogy ListBox csak akkor használható, ha el - és visszalépek arra a munkafüzetre amin rajta van."
Ezt a dolgot így kérik Tőled? Valami munkahelyi agymenés? Csak azért kérdem, mert egyesített cellákat programozni mindig szívás. A helyedben valami formailag más megoldást választanék.
Így egy kicsit másképp fest a dolog. Sztem nem kell hozzá az utolsó (vagy bármelyik) cella pontos helyének meghatározása. Próbáld ki ezt:
Function UtsoCella(tomb As Range) As Long UtsoCella = tomb.Cells.Count End Function
A fenti kód a B3:B10 tartományra 8-at ad, nem 7-et, és szerintem ez így logikus, hacsak nem nulláról kezded a számozást. Ez utóbbi esetben módosítsd a kódot: UtsoCella = tomb.Cells.Count - 1
PS: A "keres" mint függvénynév nem szerencsés, mivel van ilyen nevű beépített függvény.
Köszönöm az előző választ. Valószínűleg valami ilyesmi lesz a megoldás.
Azt a makrót amit írtam, úgy akarom használni, mint egy függvényt. Adok neki egy tetszőleges cellatartományt és szeretném visszakapni a tömb utolsó elemének sorszámát. Pl.: A makró meghívása: =keres(B3:B10) (vagy bármi más cellatartomány) A visszaadott értéke padig a tömb utolsó elemének sorszáma, ami most 7.
Elvileg azzal lenne az egyszerű...de sajnos mégsem az. Számomra legalábbis. Nem tudom úgy elhelyezni az oszlopokat és játszani a mezőbeállításokkal, hogy jó legyen. Jelenleg manuálisan bénázom össze a dolgot. :(
Köszi..de a jelszóemlékeztető nem sokat segít rajtam, ugyanis a regisztrációmkor megadott fióknak sem tudom a jelszavát, mert csupán a fórumhoz hoztam létre.. :)
Hogyan kell szöveges file-t megnyitni és írni beléje, furdalta az oldalamat már egy ideje, de lusta voltam keresgélni és itt is megkérdezni.
Ma viszont legyőztem lustaságomat, pár pillanat alatt meg is találtam a Visual Basic help-jében a megfelelő móricka programot, de nem müködött. :-)))
Sub OpenTextFileTest() Const ForReading = 1, ForWriting = 2, ForAppending = 38, Create = True Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("d:testfile.txt", ForAppending, Create, TristateFalse) f.Write "Hello world!" f.Close End Sub
Aztán megtaláltam: a szöveges leírás szerint a ForAppending értéke 8 kell legyen, a móricka programban meg elírták (3 volt).... Lehet, hogy azért, mert 2003-s EXCEL volt?
Van erre több lehetőség. Tegyük fel, hogy az adataid az A oszlopban vannak, kezdődnek A2-ben, és a végét keressük. Ha a tartomány összefüggő, és legalább 2 cellából áll, akkor az alábbi a legegyszerűbb módszer:
UtolsoSor = Range("A2").End(xlDown).Row
Ha nem összefüggő, vagy nem biztos, hogy legalább 2 cella, akkor:
UtolsoSor = Range("A" & Rows.Count).End(xlUp).Row
Másik megközelítés
A következő üres celláig fut a ciklus, és nem érdekel, hogy az pontosan hol van:
i = 2 Do MsgBox Range("A" & i).Value i = i + 1 Loop While Range("A" & i) <> ""
Írtam egy makrót, ami egy keresési eljárást futtat végig egy cellatartományon. A ciklushoz viszont tudnom kéne, hogy hány elemű (sorú) cellatartomány megy be a makróba. Hogyan lehet ezt lekérdezni (gyakorlatilag hány elemű a tömb)?
Hosszú kihagyás után ismét hozzátok fordulok segítségért :)
A problémát nem tudom értelmesen leírni ábra nélkül, ezért azon minden gondom feltüntettem :)
Adott egy több száz soros tábla, alapból megtévesztő adatokkal. Makróval szeretném megoldani az alábbiakat, de kicsit kijöttem a formából (vagy ennyire talán sose voltam benne.. (think) ? )
Segítségeteket előre is köszönöm!
ui1: Master of Amateur vagyok, csak elfelejtettem a jelszavam :) ui2: Remélem, érthetően írtam le a gondom :)
Hosszú kihagyás után ismét hozzátok fordulok segítségért :)
A problémát nem tudom értelmesen leírni ábra nélkül, ezért azon minden gondom feltüntettem :)
Adott egy több száz soros tábla, alapból megtévesztő adatokkal. Makróval szeretném megoldani az alábbiakat, de kicsit kijöttem a formából (vagy ennyire talán sose voltam benne.. (think) ? )
Segítségeteket előre is köszönöm!
ui1: Master of Amateur vagyok, csak elfelejtettem a jelszavam :) ui2: Remélem, érthetően írtam le a gondom :)
A listbox és a pivotitems szinkronba hozására ilyesmit javaslok: . . . For Each pi1 In pf1.PivotItems i = HanyadikHonapEzAzOszlop(pi1) pf1.PivotItems(i).Visible = Me.ListBox1.Selected(i - 1) Next . . .
Function HanyadikHonapEzAzOszlop(PivIt as PivotItem) As Long 'itt valami kód, ami a PivIt.Name tulajdonságból meghatározza a hónap sorszámát. 'Pl. 'Select Case LCase(PivIt.Name) 'Case "január" 'HanyadikHonapEzAzOszlop=1 'Case "február" 'HanyadikHonapEzAzOszlop=2 'stb. 'attól függ, miből származik az oszlopok neve. End Function
Az eredeti problémáról mondják itt-ott, hogy Excel 2003/XP bug van a jelenség hátterében. Állítólag kiküszöbölhető, ha beállítod az AutoSort tulajdonságot Manual-ra.
Azt értem, hogy i-ből miért kell kivonni egyet. Más itt a gond. Abból indulok ki, hogy a Listbox tartalmazza mind a 12 hónapot. Ha nem így van, akkor az alábbi okfejtés érvényét veszti. Na most. A pivottáblában csak azok a hónapok jelennek, amelyekre a forrás-tábla adatot tartalmaz. Tegyük fel, hogy januárra nincs adat. Ekkor a Január nem jelenik meg a pivottáblában. Tehát a For Each pi1 In pf1.PivotItems ciklus Februárral kezd. Az i = i + 1 művelet után (a ciklus első végrehajtásakor) i értéke 1 lesz. Ez, ha belegondolsz, azt jelenti, hogy a pf1.PivotItems(i).Visible = Me.ListBox1.Selected(i - 1) attól függően jelenteti meg Február oszlopát a kimutatásban, hogy a listbox-ban a Január be van-e ikszelve.
A listbox tulajdonságainál a bemeneti tartományban megadod azt a területet, ahol megadod a listboxban megjelenítendő adatokat, ez lehet januártól decemberig a hónapok elnevezése. A cellacsatoláshoz beírod a cellát, ahonnan majd a kimutatáshoz veszed az értéket. Itt az a sorszám jelenik meg, ami a kiválasztott elem sorszáma a bemeneti tartományban, pl. a szeptember kiválasztása után 9.
A makróban a táblázat a kimutatáshoz Munka1!A1:B20, az oszlopok címe hónap és adat, a cellacsatolás Munka2!A1.
Sub Kimutatas() Dim tabla, i_1 As String Dim h, i tabla = "A1:B20"
Range("A2").Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Munka1!" & tabla).CreatePivotTable TableDestination:="", TableName:= _ "Kimutatás1" With ActiveSheet.PivotTables("Kimutatás1") .AddFields RowFields:="hónap" .PivotFields("adat").Orientation = xlDataField End With
h = Application.Fixed(Sheets("Munka2").Cells(1, 1), 0) 'listbox értéke szövegként
For i = 1 To 12 i_1 = Application.Fixed(i, 0) 'a ciklusváltozó értéke szöveggé alakítva
If ActiveSheet.PivotTables("Kimutatás1").PivotFields("hónap"). _ PivotItems(i_1) <> h Then ActiveSheet.PivotTables("Kimutatás1").PivotFields("hónap"). _ PivotItems(i_1).Visible = False End If Next End Sub
Szeretnék egy feltétel szerint törölni teljes sorokat (nemcsak a tartalmukat).
Ilyet írtam:
For i = 2 To 5000 ActiveSheet.Cells(i, 12).Select If UCase(Left(ActiveCell, 3)) <> "HUN" Then ActiveSheet.Rows(i & ":" & i).EntireRow.Delete End If Next i
Végigmegy a cikluson, jó sorokat is töröl, de nem az összeset, többször le kell futtatni, hogy az összes "jó" sort törölje. Mintha a sor törlése után lejjebb menne a kurzor és ezért hagy ki sorokat.
Egy olyan kérdésem lenne, Excelben lehet-e korfát készíteni diagram segítségével. Vagy az is nagy segítség lenne, ha valahogy az egyik diagramot sikerülne egy függőleges tengely mentén tükrözni.Ez megoldható valahogy? Segítséget előre is köszönöm:)
Sziasztok! Találkoztatok már ilyen problémával? Egy munkafüzetben adatok vannak és 2 db kép (jpeg) van beszúrva. Ha nyomtatásra kerül a sor, akkor hibaüzeneteket küld, az oldalbeállítás teljesen összeomlik és leáll a nyomtatás, vagy is el sem indul. A végén már a nyomtatót sem ismeri fel. Kép nélkül teljesen jól működik. Spyware-nek és vírusnak nem gondolnám, hogy köze lenne hozzá, mert rendszeresen nézem. A nyomtatót újra telepítettem és az Office-t is, de nem oldotta meg a problémát. Lehet, hogy nem ide tartozik ez a probléma, de nekem csak az Excel használatában, akadtak ilyen gondok. Mi lehet a megoldás? Előre is köszönöm
Megszámoltam, és igazából sajnos 70 helységnevem, és 222 személyem van (hozzájön még a hónap 31 napja és a nap 24 órája). Így összesen ez 222 oszlop és 9617 sor lett
Megcsináltam a kimutatást.
Létezik olyan függvény, amit a legutolsó sornál csak vízszintesen végighúzok, és csak akkor szól, ha valamelyik oszlop valamelyik órájában (cellájában) 13, vagy ennél több van?
Egyelőre autószűrővel, egyesével nézem, ami így is jó, ha ~2 mp=1 név, több, mint 4 perc alatt végzek. Ha nem lenne ez a kimutatás, akkor vért izzadnék.... :)
De lehet próbálkozni más variációkkal is. A lényeg az ADAT mező, a többi csak azt mondja meg, hogy hogyan legyen az adat csoportosítva. Oszlopnak olyat érdemes megadni, amiből kevés van. Névből csak 5 különböző, Helységből csak 2 különböző van a példádban. Ezek jók oszlopnak. Az óra viszont nem lenne jó, mert abból olyan sok van, hogy a kimutatás nem férne el a munkalapon (max. 256 oszlop).
Jimmy válaszához annyit, hogy az időt tartalmazó oszlop bal oldali két karakterét felhasználva érdemes egy új oszlopot beszúrni, és ezt ábrázolni a kimutatásban.
Adott több személy (B oszlop) az ország több részén (A oszlop). Mindenki eszik almát, és azt szeretném megtudni, hogy ki az, aki adott napon (C oszlop) 1 óra alatt (D oszlop), 13- vagy ennél több almát eszik egy adott helységen (A oszlop) belül.
Az órák 00-val kezdődnek és **:59-kor fejeződnek be (pl: 8:00-8:59-ig, 9:00-9:59-ig, stb)
A valóság a hónap végére kb. egy 40ezer soros, kb. 50 „helységneves”, megszámlálhatatlan „személynevű” excel táblázatot generál.
Próbálkoztam már „részösszeggel”, „autoszűrővel” is, de ez meghaladja a tudásomat.
Már az is segítség lenne, ha csak az óra alatti darabszámot dobná ki nekem a gép (személyre/helységnévre/napra/órára bontva), a többit már meg tudnám oldani.
Pl.: Budapest, Erika, 09.21, 10:00-10:59-ig = 3 db
Nincs mit. Az első eset akkor reagál, ha a megváltozott tartomány az A1 cella. Az Istersect-es verzió akkor reagál, ha a megváltozott tartománynak része az A1 cella. (Pl. amikor az egész A oszlop tartalmát törlöd egy művelettel.) Ez tehát egy nagyobb halmaz.
Legyetek szívesek segíteni még egy cseppet: Azt hogy kell csinálni, hogy a Worksheet_Change(ByVal Target As Range) ne az összes cella változását figyelje, hanem csak pl. az A1-et
Én máshogy értem, mint Delila A mennyiségekhez egy segédoszlopba: =HA(ÜRES(B2);C1;B2) Ezzel mindig az utolsó mennyiség fog ismétlődni, tehát meglesz minden napra, ahogy írtad. Berakod a pivottáblába, és ott van ÁTLAG számítás is...
Makrós kérdés: Hogy kell a pivottábla tételeit makróval beállítani? Rögzített makró nem jó, mert mindent tételenként csinál. (Pl. "Cikk" mezőben csak a "1111" számú tétel legyen kiválasztva) Változót kell használnom, szerintem a "CurrentPage" kell, de nem akar működni...
Dim Cikk As String If Not Range("CIKK") = "" Then Cikk = Range("CIKK") With Sheets("Norma") .PivotTables("Kimutatás1").PivotFields("Cikk").CurrentPage = Cikk .PivotTables("Kimutatás1").PivotCache.Refresh End With Else: MsgBox "Add meg a Cikket!" End If
Bocs, ha értetlen vagyok, de - nem az a lényeg, hogy havi összesent előállítsam, mivel az megy (már az adatbázisban is van hónap mező, de képlettel is megy) - a tényleges mező dátum formátumú, a hónap() függvény is működik rá
Tehát a lényeg, - ha havi 2 mozgás van (pl. 2009.04.05, 2009.04.09), akkor is ki kellene számítanom minden napra (04.01, 04.02, 04.03, ..., 04.29, 04.30) a készletet és azt átlagolnom.
Példa: 2009.04.05 - 100kg (adott, mert volt aznap mozgás) 2009.04.06 - 100kg (számolt, ez is 100, mivel 100+1*0=100) 2009.04.07 - 100kg (számolt, ez is 100, mivel 100+2*0=100) 2009.04.08 - 100kg (számolt, ez is 100, mivel 100+3*0=100) 2009.04.09 - 130kg (adott, mert volt aznap mozgás) 2009.04.10 - 130kg (számolt, ez is 130, mivel 130+1*0=130) 2009.04.11 - 130kg (számolt, ez is 130, mivel 130+2*0=130) ... 2009.04.30 - 130kg (számolt, ez is 130, mivel 130+21*0=130)
Tehát a havi átlag nem (100+130)/30, hanem (100+100+100+100+130+130+...+130)/30
Másik gyakran alkalmazott lehetőség: A kimutatás hátteréül szolgáló táblázatba beszúrsz még egy oszlopot, ezzel a képlettel: HÓNAP(dátum cellája) és végig húzod. Belefoglalod a kimutatásba és kész.
Szerintem azért nem látod, mert a kimutatás hátterében a dátumok nem "dátum" formátumúak. Ha ezt nem tudod megoldani, akkor tudod csoportba foglalni is a hónapokat. (Egérrel kijelölöd a dátumokat, jobb gomb, csoportba foglalás stb...)
Ja igen. Mielőtt felmerül a kérdés. A becsipogás alatt azt értem mikor egy vonalkód olvasóval beolvastatom a táblázatba. Mi csipogásnak hívjuk, mert csippan mikor sikerül. :)
A képen bal oldalt egy kimutatás van (ez egy adatbázisból készül). A cél az, hogy termékkódonként havi átlagkészletet számoljak - a nyitóval most nem foglalkozom, mert az fix.
1. módszer Kimutatás fülön: ami a képen látszik: termékkód, azon belül dátum. Lefelé max 500 termékkód van, de sajnos nem minden tenyleges napra (365) van mozgás (lefelé nem is férne el 500*365 sor)
2. módszer Kimutatás: lefelé termékkódok, jobbra dátumok Képlet fülön: Lefelé csak termékkódok, jobbra 180 nap kézzel beírva (2 fülön, h elférjen) Sikerült is fkeres, szumha módszerekkel jól beképletezni, de ha végighúzom, akkor már az 500*365 db képlet nagyon lelassítja az átszámolást, ha a kimutatásban szűrök.
3. módszer Lefelé termékkódok, jobbra csak a 12 hónap lenne, így biztos felgyorsulna, de annyira sok tényezőt kellene figyelembe van (sok ha() lenne, hogy nem látom át). Pl. első tételkód vagy utolsó, napok különbsége 1 vagy több, hónap(tenylege) kölönbsége 1 vagy több, ...
Próbáltam úgy is, hogy a mennyiség göngyölített, de a fenti problémákon ez se segített.
Olyan kérdésem lenne, hogy: Azt szeretnénk megoldani, hogy egy vonalkód becsipogásánál egy fix első 4 karaktert figyeljen és, ha eltér akkor ne lehessen becsipogni. Megoldható?
Arra van valami megoldás, hogyan lehet egy oszlopban a maximum függvényt (illetve bármilyen hasonszőrű függvényt) alkalmazni, de az oszlopban csak minden 2 sorban lévő cellát (de nem a táblázat tetejétől) kéne vizsgálni, a köztelévőket nem? Adatbázis függvényekkel megoldható a dolog, pl. így
Arra van valami megoldás, hogyan lehet egy oszlopban a maximum függvényt (illetve bármilyen hasonszőrű függvényt) alkalmazni, de az oszlopban csak minden 2 sorban lévő cellát (de nem a táblázat tetejétől) kéne vizsgálni, a köztelévőket nem?
Ha külön megadnám a párszáz cellát az elég körölményes, és úgy tudom, van egy határ, ami felett nem fogad el több argumentumot.
A helyzet az, hogy nem nagyon szoktam fórumozni, de most ott tartok, hogy nem találok megoldást egy bosszantó problémára.
A problémám az alábbi:
Van egy nagy terjedelmű többszáz soros excel doksim, aminek az oldalsó görgetősávja megkerdült.
Elvileg a gördítősávnak tudnia kellene "kezelni" a dokumentum méretét, igazodnia kellene a felhasznált sorokhoz. Na ez nem igazodik!!!! :@
Ha egy icipicit lehúzom a gördítősáv csúszkáját már rögtön a négyezredik sornál jár, ahol már nincs is adat. Arról meg nem is beszélek, ha kicsit jobban lehúzom a csúszkát... :@
Megnéztem... nincsen lentebb semmilyen adat, sem pedig olyan nyomtatásban is megjelenő formátum (pl. szegély, vagy kitöltőszín) sincs úgy beállítva, hogy az egész
oszlopot jelöltem volna ki az oszlopazonosítóra kattintással.
Ha a nyomtatási képre kattintok, akkor is csak addig hozza a nyomtatnivalót, amíg ténylegesen tartalmaz adatot a táblázat.
Sőt! Már azzal is próbálkoztam, hogy lementem a táblázat legaljára, a 65.536. sorhoz, és kijelöltem a teljes sort, és "olcsó játék hülyegyerekeknek" módszerrel végig kijelöltem az összes e feletti sort odáig amíg nem kezdődött meg az adatokkal feltöltött táblázat, és fogtam és Szerk./Törléssel kitöröltem ezeket az üres sorokat.
Elb...tam a kijelöléssel egy csomó időt, de ez sem működött, az excel autómatikusan újragenerálta nekem ezeket a sorokat.
Van több hasonló terjedelmű, hasonlóan formázott doksim is, és ezekből csak 2 kerdült így meg, a többi tökéletesen normálisan működik.
Elég bosszantó, ha a doksi aljára akarok kilyukadni, és én napi szinten több órát is dolgozok ezekben a vackokban, és már kezdek tőle agylobbot kapni.
Szerintem ahogy én szoktam csinálni, könnyen megírható makróban. -Sorbarendezi az az oszlop adatait, felismeri az első blank cellát, onnan kitörli a cellákat végig, majd átlép a következő oszlopra. Az utosó oszlop után visszarendezi a táblázatot az eredeti sorrendre.
Mert az első törlős makró olyan volt, hogy az adott oszlop tartalmát törölte az első sortól az utolsóig.
Írtam is, hogy olyat szeretnék, amiben benne legyen, hogy mettől meddig töröljön, de ne olyan, ami külön ablakokban kéri be.
Próbáltam a kijelölős makródat is elteszem ha ilyen fog kelleni, de ez is lassabb, így nem ez lenne a számomra a megfelelő, hanem egy mezei makró, ami nem kér be semmi adatot inputboxban, de maga a makró tartalmazza.
Köszönöm, közben rájöttem, hogy ez egy elég buta kérdés volt. :) Na mindegy, azért nagyon köszi. Tudsz arra megoldást, hogy egy oszlopból a függvény csak a negatív előjelű összegeket adja össze abszolút értékű eredményt adva. Mondjuk: 20 50 -20 10 -10 90 50
Előbb ezt írtad: "Tudnál olyat írni, mint a korábbi összeadós makró, amiben a sort és oszlopot is meg kell adni tól-ig?"
Később: "... az esetk többségében mindig azonos területen és lépésközzel használnám"
El kellene döntened, mit is szeretnél.
A $ jelekre nincs szükség, mert a 9813-as hozzászólásban ezt olvashattad: "... a törlendő területet ki kell jelölnöd, és csak a lépésközt kell megadnod." Vagyis a kijelölés határozza meg a törlendő területet.
Mivel az újabb jelzésed szerint a lépésköz is azonos az esetek többségében,
a 9813-as makróban az
"m_step=InputBox" kezdetű sor helyett m_step=4 -et írj. Ebben az esetben kérdés nélkül fut le a törlős makró, és csakis a kijelölt területen.
Ez is biztos jó megoldás lenne. Pl $ jelet tenni a táblázat behatároló sarkaira? Egyébként jelenleg üres oszlop és üres sor követi a számolandó táblázatrészt. De nem biztos, hogy így marad. A kiindulást nem tudnám ilyen egyértelműen meghatározni.
Még annyit :)))) hogy ezt a törlős makrót átírnád úgy nekem olyan verzióra, hogy ne kérje be az adatokat?
Mert igazság szerint az esetek többségében mindig azonos területen és lépésközzel használnám és így csak nehézkessé, időigényessé, macerássá :) teszi a makrófuttatást, hogy mindig be kell írni.
Formátum -> Feltételes formázás -> 1.feltétel -> A cella értéke egyenlő igen -> formátum beállítása 2.feltétel -> A cella értéke egyenlő nem -> formátum beállítása
Üdv mindenki, Hogyan oldható meg, hogy a köv. függvényben - if(b1>1,"igen","nem") - az igen vagy a nem különböző betűszínnel vagy háttérszínnel jelenjen meg. Előre is kösz a válaszadónak!
Te miből ismered fel a táblázatban, hogy melyik oszlopokban, melyiktől melyik sorig kell törölni? Ha ezt meg tudod fogalmazni, az már egy algoritmus. Arra szerintem programot is lehet írni, és akkor nem kellene azzal vacakolni, hogy hogyan kérjük be a felhasználótól az adatot.
Nem jelent problémát az inputbox megírása, beleírtam. A felhasználó szempontjából kényelmesebb, mintha a makróban kellene mindig átírni az értékeket.
Lehet, hogy akad itt a fórumon olyan segítség, amivel az oszlopok sorszáma helyett a betűjelet kérhetnéd be, az még egyszerűbb lenne a használatnál – és nekem is jól jönne.
Sub Oszlopok_Clear() Dim kezd_oszlop, uoszlop, oszlop, m_step, kezd, usor As Integer kezd = InputBox("Melyik sortól kezdődjön a törlés?", _ "Első törlendő sor", Default) usor = InputBox("Melyik sorig töröljem az adatokat?", _ "Utolsó törlendő sor", Default) kezd_oszlop = InputBox("Melyik oszloptól kezdődjön a törlés? (számmal)", _ "Első törlendő oszlop", Default) uoszlop = InputBox("Melyik oszlopig töröljem az adatokat? (számmal)", _ "Utolsó törlendő oszlop", Default) m_step = InputBox("Mennyi legyen a lépés távolság", _ "Lépés távolság", Default)
For oszlop = kezd_oszlop To uoszlop Step m_step Range(Cells(kezd, oszlop), Cells(usor, oszlop)).Select Selection.ClearContents Next End Sub
Nem lehet hogy az egérrel veszik össze? Időszakosan már előfordult nálam, hogy valami miatt az egeret megutálta gép :) Próbáld ki másik egérrel, hátha ez a gond.
Korábban én sem. Sőt, a nálam jóval szakértőbb barátaim sem. Egyikük megigérte, hogy átfésüli a netet, hátha talál rá valami információt. A többi excelemmel nincs baj, de azok nem ezen a partición vannak.
A legvalószínübb ok, hogy az Excel Adatelemzés bővítménye a windows által megnyitott valamelyik háttér programmal akad össze, pl tűzfal, vírusfigyelő, szótár, skype stb. Összeakad de nem mindig. Pl. az A és B oszlopokat jól jelöli ki, de a C helyett már a D-t, a D helyett az E-t stb.
Szevasztok! Remélem tud valaki segíteni egy problémámmal. Az excel munkaoszlopai eddig betűkkel voltak jelölve, most nem tudom ilyen okból számozva vannak azok is mint a sorok. Hogyan lehet visszaállítani az eredeti állapotot?
Nagyon baba! Köszönöm szépen!!!!! A táblázat első néhány oszlopából kiderül, hogy meddig tart az egész táblázat, úgy hogy ez nem lesz gond.
Még lenne egy nagy kérésem! :)
Ezzel a szisztémával meg tudod írni, hogy törölje ki az oszlopokban a cellákat? Tehát ahová eddig az 1-eseket számolta össze, ott kéne törlést csinálni. Külön makróval gondoltam. Mert elvileg lehetne az általad írt makróba belevenni, hogy mielőtt összeszámolja az 1-eseket, töröljön ott minden adatot. De rugalmasabb ha külön makróban van, mert akkor más táblázatoknál is tudnám alkalmazni ezt a törlés funkciót.
Újra installáltam az office2003-t. De a hiba maradt. Hab a tortán, hogy a kijelölést mutató szaggatott keret sem igazodik a cellahatárokhoz. Kb egy fél cellával balra felfelé elcsúszik.
Az excelem idáig a korrelációkat könnyedén számolta. Ezzel most sincs baj, de kb 1 hete megőrjít az adatkijelölésnél azzal, hogy ráklikkelek a cellára, de nem azt jelöli ki. Mi a franc lehet ennek az oka, és hogy lehetne reparálni?
Sub Oszlopok_1() Dim sor, summ, usor, oszlop, kezd As Integer kezd = InputBox("Melyik sortól kezdődjön az összesítés?", "Kezdő sor", Default) usor = InputBox("Melyik sorig készüljön az összesítés?", "Utolsó sor", Default)
For oszlop = 11 To 135 Step 4 For sor = kezd To usor If Cells(sor, oszlop) = 1 Then summ = summ + 1 Else If summ > 0 Then Cells(sor - 1, oszlop + 1) = summ summ = 0 End If Next Next End Sub .
Ennél inputbox kéri be a két adatot.
A hátulütője, hogy pl. megadod a 20. sort kezdőnek, de ha valamelyik oszlopban a 15:30 sorokban van 1-es, akkor hamis eredményt, 10-et ad a 15 helyett.
Hogy teljes legyen, jobb lenne úgy hogy hányadik sortól hányadik sorig fusson le a makró a táblában. Ha azt bele lehetne írni a makróba... Köszi előre is.
Mert alatta is lesznek majd egyesek, amik mellé nem lenne jó, ha bármi kerülne.
Köszi, igen én is így gondoltam hogy más nevet adok a makrónak. De lehet inkább a 9789-est módosítom aszerint, hogy melyik oszloptól kezdje és melyik oszlopig csinálja. Így 1 makróm lesz lényegében, csak más tól-ig és step adatokkal.
Még annyit tudnál (lehet) módosítani, hogy a 9789-ben írt makróba beírni, hogy hányadik sortól kezdje? Ez is fontos lenne! :)
Mert a táblázatom első X sorában (mondjuk 25 sor) vannak 1-esek amik mellé nem kell írni semmit, mert azok nem számolandók így össze, mert más jellegű adatok. És ezen 1-esek oszlopa egybeesik a számolandó oszlopok valamelyikével. Remélem, érthető :)
Már csak amiatt is jó lenne ez, mert ha bővülne a táblázat újabb pl 2000 sorral, akkor nem vizsgálná elölről az egészet az oszlop tetejétől.
Vagy nem így működik a makró, hogy ha a kiértékelendő (1-eseket és ürec cellákat tartalmazó) oszlopok mellett ha van már érték, arra a területre nem fut le a makró? Vagy minden futtatáskor elejétől vizsgálja?
Kipróbáltam, működik, köszi. Egyelőre maradok a makrós megoldásnál. Ha az valami miatt nem alkalmazható, akkor megnézem ezt és összehasonlítom az eredetivel, ami az oszlop tetejétől számol. Feltételezem, hogy ezzel kevesebb ideig számol a gép. Sőt, ha majd kicsit jobban ráérek, akkor mind a hármat összehasonlítom, melyikkel végez hamarabb a gép.
Kicsit frissebb fejjel megnézve a kérdésedet [a 20. oszlop után 10 oszlop kihagyás van, de onnantól megint 4 (vagy akármennyi) oszloponként kell ez a számítás]:
A 20. oszlopba állva futtatsd a 9786-os hozzászólásban lévő makrót, utána írd át a 9789-est úgy, hogy a 30. oszloptól kezdjen, és azt futtatsd le. Adj más címet is neki, nem lehet két azonos című makró egy füzetben.
Az első makró is inkább EgyOszlop névre, vagy valami hasonlóra hallgathat, mert már nem igaz, hogy csak a B oszlopra szól. :)
tbando
A függvényekkel az volt a baj, hogy a sok adat – sok függvény – miatt nagyon lelassult a frissítés.
Látom már vannak príma makrós megoldások a feladatra. De azért ideteszem a magamét is az érdekesség kedvéért. Én 1 segédoszlop bevezetésével oldanám meg a feladatot. És 2 képlettel.
Amennyiben az 1-esek oszlopa az A10 celláról indul akkor a két képlet:
És akkor az pl két makró egymás utáni lefuttatásával megoldható, hogy ha egy munkalapon belül 4 oszloponként kell ez a számítás, de a 20. oszlop után 10 oszlop kihagyás van, de onnantól megint 4 (vagy akármennyi) oszloponként kell ez a számítás?
Ha a fájl elmentése előtt törlöm a makrót, attól még a fájl a lefuttatott makró eredményeit nem törli, ugye?
Bárhol állhatsz, és bővítheted a tábládat. A *-os sorban a 135 az EE oszlop, azt nem írtam az előbb. Lehet, hogy azt is kell módosítanod.
Azt, hogy melyik oszlop hányadik, legegyszerűbben úgy nézheted meg, hogy ráállsz az oszlopra, és a Beállítások Általános fülén bejelölöd az S1O1 hivatkozási stílust. Akkor a betű jelzés helyett az oszlop sorszámát írja ki felül.
Bele kellett vinni a szabályszerűséget, de *-okkal jeleztem, hol kell átírnod.
Itt a lépés (Step) 4, és a K oszloptól indulunk, ami a 11. Ezt a két adatot kell átírnod, amikor más fájlban teszteled. Nullákat nem ír.
Sub B_oszlop() Dim sor, summ, usor, oszlop As Integer usor = ActiveSheet.UsedRange.Rows.Count + 2 For oszlop = 11 To 135 Step 4 '********* For sor = 2 To usor If Cells(sor, oszlop) = 1 Then summ = summ + 1 Else If summ > 0 Then Cells(sor - 1, oszlop + 1) = summ summ = 0 End If Next Next End Sub
Több ilyen fájlom is van, máshol vannak benne ezek az oszlopok.
Az egyik munkafüzetben, minden negyedik oszlop a K-tól (L-től):
32 oszlopban számolandó, ezekben vannak az 1-esek:
a K, O, S, W, AA, AE, AI, AM, AQ, AU, AY, BC, BG, BK, BO, BS, BW, CA, CE, CI, CM, CQ, CU, CY, DC, DG, DK, DO, DS, DW, EA, EE -ben az 1-esek
az 1-esek melletti összeg pedig ezekbe az oszlopokba kéne:
L, P, T, X, AB, AF, AJ, AN, AR, AV, AZ, BD, BH, BL, BP, BT, BX, CB, CF, CJ, CN, CR, CV, CZ, DD, DH, DL, DP, DT, DX, EB, EF
Ha erre megírnád, abból megpróbálnám átidomítani a többi fájlhoz. Lehetőleg úgy kérném, hogy a szabályszerűséget - vagyis hogy itt ebben a példában minden negyedik oszlopnál számolandó - ne vedd bele, mert akkor nem fogom tudni testreszabni a többi fájlnál, mert azokban másképp követik egymást.
És ha bele tudnád írni, hogy ezekben az oszlopokban törölje a 0-kat, az tuti lenne!
Sub B_oszlop() Dim kezd, sor, összeg, usor, oszlop As Integer kezd = Selection.Row: oszlop = Selection.Column usor = Cells(65536, oszlop).End(xlUp).Row + 1 For sor = kezd To usor If Cells(sor, oszlop) = 1 Then összeg = összeg + 1 Else If összeg > 0 Then Cells(sor - 1, oszlop + 1) = összeg összeg = 0 End If Next End Sub
Olyan utasítást nem lehet beleírni a makróba, hogy törölje a 0-kat a B oszlopból? Hozzáteszem nem értek hozzá, sajnos :-/
Az a helyzet, hogy több oszlopnál kéne ezt megcsinálni, hogyan lehet bővíteni ezt a makrót kiterjesztve a többi oszlopra? Mondjuk összesen 60 oszlopról van szó egy munkalapon belül.
A 9775-ben azt írod, hogy sok oszlopban vannak ilyen adatok az A-n kívül. Van benne rendszer? Pl. minden harmadik oszlop tartalmaz 1-eseket, amik mellé oda kell íratni a darabszámot?
Az egyes oszlopokban azonos sorig vannak adatok?
Átírtam úgy a makrót, hogy ha a két fenti kérdésre nem a válasz, akkor is lehessen használni.
Vegyük példaként, hogy az A oszlop 1-esei mellé már 3000-ig be van írva a B-be az érték, és az A oszlopban még vannak adatok. Ekkor az A3001-en állva indítsd a makrót.
A D oszlopban is vannak adataid, itt a 20. sorig van az E oszlopban összegezve. D21-en állva ismét indítod. Tehát mindig az 1-eseket tartalmazó oszlopnak arra a cellájára állsz, ahova még a következő oszlopba nincs beírva az összeg.
Sub B_oszlop() Dim kezd, sor, összeg, usor, oszlop As Integer kezd = Selection.Row: oszlop = Selection.Column usor = Cells(65536, oszlop).End(xlUp).Row + 1 For sor = kezd To usor If Cells(sor, oszlop) = 1 Then összeg = összeg + 1 Else Cells(sor - 1, oszlop + 1) = összeg összeg = 0 End If Next End Sub
A szóban forgó algoritmus számára bemeneti adat mind az A, mind a B oszlopnak az adott cella fölötti része. Pl. a B147-es cella képletének bemenő adata az A1:B146-os terület. Ha itt változás történik, a képlet újraszámolódik. Valamint minden B147 alatti képlet is újraszámolódik. Sőt, azt hiszem, a B147 újraszámolása is kiváltja az összes B147 alatti képlet újraszámolását, de ebben nem vagyok biztos. Mindenesetre kaszkádnak tűnik. Minél több sor van, annál nagyobb szívás.
A gond az, hogy nem nagyon tudok elképzelni olyan képletet, ahol ne kellene végighivatkozni az egész A oszlopot, hiszen honnan tudnánk előre, hogy hány cellát kell a hivatkozásba belevenni?
Mert ugye a képleteknek automatikusan jelezniük kell a változást. Ha pl. egy 15 darabból álló sorozat közepén a 8. egyest töröljük, akkor a 7. egyes mellett meg kell jelennie egy hetesnek, illetve a 15. egyes mellett szintén egy hetesnek. De ha a 15 darabból álló sorozat fölé beírunk egy egyest, akkor a két sorozatnak egybe kell olvadnia. A Te példádon, ha az A oszlop összes üres cellájába 1-et írunk, akkor a B oszlop összes képletének újra kell számolódnia, hogy a mutatott érték helyes legyen. De ez csak akkor lehetséges, ha a képletek hivatkoznak minden olyan cellára, amelyektől az értékük függhet.
Esetleg el tudom képzelni, hogy a B oszlopra hivatkozást mellőzzük, de ehhez szükség van néhány megkötésre. Ilyenekre gondoltam:
Igaz-e, hogy az A oszlopban csak 1-esek és üres cellák vannak? Igaz-e, hogy egymás után nincs két üres cella? Lehet-e maximálni valahogy az egymás után következő 1-esek számát? (Pl. azt mondjuk, a feladat ismeretében, hogy nem lehetséges, hogy egymás után 42 egyesnél több legyen.)
Illetve bármi egyéb szabályszerűség, ami segíthet.
Vagy marad az a megoldás, amit Delila javasolt, hogy nincs automata követés, hanem gombnyomásra újraszámoljuk az egészet.
Vagy egy VBA felhasználói függvény, ami csak az A oszlopra hivatkozik. Valszleg az is gyorsabb lenne, mint a múltkori.
Őőőő , köszi :) Kipróbáltam egy próba fájlon. Működik is azzal a kitétellel, hogy ahol az oszlopban több üres cella követi egmyást, ott az utolsó üres cella kivételével mellé 0-t ír. Így néz ki:
Állj arra a cellára, ahol még nincs beírva az érték a B oszlopba, és indítsd az alábbi makrót:
Sub B_oszlop() Dim kezd, sor, összeg, usor As Integer kezd = Selection.Row: usor = Range("A65536").End(xlUp).Row + 1 For sor = kezd To usor If Cells(sor, 1) = 1 Then összeg = összeg + 1 Else Cells(sor - 1, 2) = összeg összeg = 0 End If Next End Sub
Azt szeretném, hogy az egymást követő (vagyis két üres cella közti) 1-eseket összeadja a mellette lévő oszlopban, úgy hogy a legalsó cella mellé írja az összeget.
(ez azt csinálja, hogy az A oszlopban lévő összes 1-esből kivonja a B oszlopban lévő számok összegét, amit beír abba a cellába, ami után az A oszlopban üres cella követ)
Na most az a bajom, hogy sok oszlopban alkalmazom, amik sok sorból állnak, nagyon sokáig lefogja a gépet, mert hogy ez a képlet az oszlop tetejétől számol, és ráadásul az adatbázis is bővül. Tehát gyakorlatilag fagy a gép tőle.
Kérdésem:
Lehet olyan függvényt kreálni, hogy ne az oszlop tetejétől számoljon, hanem ha pl a B4000 cellán vagyok akkor csak 30 cellára visszamenőlegesen?
Gondolkoztam rajta, de ez a fenti függvény leszűkítve 30 cellára nem lenne jó, mert ha az A oszlopban egymást követő egyesek között kezdődne a "30 cella figyelés", akkor ha kivonom belőle a B oszlopan a B4000 cella fölötti 30 cella összegét, akkor az téves eredményt ad.
Közben kisütöttem valamit, de hátha van valakinek jobb ötlete:
Private Sub TextBox10_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode <> 37 And KeyCode <> 39 Then KeyCode = 0 End If End Sub
Ismét csak segítséget szeretnék kérni, adott egy TextBox (MultiLine = true), ahol le szeretném tiltani a módosítási (felülírás, törlés...stb.) lehetőségeket, de nem szeretném, ha inaktív lenne (Enabled = false), mert hosszabb szöveget is tartalmazhat és ezt jó lenne görgetve látni. Meg lehet oldani ezt valahogy?
Előre is köszönöm.
Mások nem ilyen szégyenlősek, és jól teszik. Csak annak van esélye választ kapni, aki kérdez. Itt a tudást ingyér osztják, és 9700 hsz fölött van már a topik, ha érted, mire gondolok.
Egyébként ne hidd, hogy amit itt csinálunk, az ellenérték nélkül marad. Például, ha én itt segítek Neked, azt majd Te szépen továbbadod valaki másnak, egy olyan területen, amihez Te értesz, ő pedig nem. Aztán ő megint másnak adja tovább, és ez a láncreakció előbb-utóbb visszaér hozzám. Ez kozmikus törvény.
Igaz nem nekem válaszoltál, de mivel a válasz engem érint, ezért nagyon szépen megköszönöm a segítségedet. Testhez álló kérdések biztosan lennének, de egy komplex feladatot nem nagyon merünk kérdezni, hiába egy nonprofit baráti társaság hobby tevékenységéhez kellene, mivel a tudás pénz, amiből sajnos a legkevesebb van.
Van egy tábla. Kb fél éve készült. Azóta az adatok folyamatosan kerültek rá. Viszont dátum sosem lett melléírva, h melyik adat, mikor került bele a táblába. Kérdés.. Tudja-e vki, hogy milyen billentyűkombinációval lehet megtudni, hogy egy adat mikor került egy cellába?
"Ezt hol tudom állítani? Mondjuk, a Me.ComboBox1.RowSource = "'Munka1'!A1:B5" tartományból veszi az adatokat, de azt szeretném, hogy a B oszlopban lévő adatok jelenjenek meg a választáskor."
Például: Me.ComboBox1.ColumnWidths = "0;100"
A 0 (nulla) az A oszlop adatait elrejti, a 100 pedig a B oszlop adatait mutatja meg. Ez utóbbi adat tényleges értéke attól függ, hogy milyen széles szövegeket akarsz megjeleníteni. Igény szerint módosíthatod. A ColumnWidths tulajdonságot tervező módban is beállíthatod, ha van értelme (ha a RowSource-t nem változtatgatod nyakra-főre).
"A választás után, hogy tudom lekérdezni a kiválasztott értékhez tartozó "A" oszlopbeli értéket?"
A felhasználó a ComboBox-ban valójában egy sort választ ki. A ComboBox értéke az az érték lesz, ami a kiválasztott sor és a BoundColumn tulajdonság által meghatározott oszlop metszetében van. A Te konkrét példádban be kell állítani a BoundColumn tulajdonságot 1-re, mert A1:B5 tartományban az A az első oszlop, és Neked ez kell. Ha tehát 1-re van állítva, akkor a felhasználó által kiválasztott B értékhez a ComboBox1.Value érték tartozik az A oszlopban.
A BoundColumn tulajdonság egyaránt beállítható tervező módban és kóddal is. Ez utóbbi esetben arra kell vigyázni, hogy a tulajdonság beállítása (tehát már az is, ha nem módosítod, hanem ugyanazt az értéket állítod be) kiváltja a ComboBox Change eseményét.
Delila_1 köszönöm a gyors választ. Ez így jó is lenne, de nekem szükségem van a sor és oszlopok sorszámaira. Ugyanis nagyon sok név van felsorolva és gyorsabb ha számokat ütök be mint kiírjam a neveket. Megkérnélek leírnád a bonyolultabb megoldást az oszlop és a sor számokkal?
Bármilyen hihetetlen, elég ennyit beírni: =Peti ló, vagyis az oszlop-, ill. sor címét, szóközzel elválasztva. A sorszámokat tartalmazó sorra és oszlopra sincs szükség.
Ez a példa a szóköz-, más néven metszer operátor alkalmazására jó példa.
[url=http://kepfeltoltes.hu/view/090913/762252560n_vtelen_www.kepfeltoltes.hu_.jpg][img]http://kepfeltoltes.hu/thumb/090913/762252560n_vtelen_www.kepfeltoltes.hu_.jpg[/img][/url] A képet a Képfeltöltés.hu tárolja. [url=http://www.kepfeltoltes.hu]http://www.kepfeltoltes.hu[/url]
"Ha több oszlopod van, és valamelyiket nem akarod megmutatni, akkor egyszerűen nullára állítod a szélességét."
Ezt hol tudom állítani? Mondjuk, a Me.ComboBox1.RowSource = "'Munka1'!A1:B5" tartományból veszi az adatokat, de azt szeretném, hogy a B oszlopban lévő adatok jelenjenek meg a választáskor.
A választás után, hogy tudom lekérdezni a kiválasztott értékhez tartozó "A" oszlopbeli értéket?
A ColumnCount tulajdonság adja meg az oszlopok számát. A ColumnWidths állítja be a szélességüket (azt hiszem, pixelben). Ha több oszlopod van, és valamelyiket nem akarod megmutatni, akkor egyszerűen nullára állítod a szélességét. A BoundColumn tulajdonság adja meg, hogy melyik oszlopból jön az érték, amikor a felhasználó kiválasztja a sort.
Azt hogyan lehet megoldani egy ComboBox-al, hogy egy munkafüzet két oszlopából vegye az értékeit (mondjuk A és B oszlopából), de a választási lehetőségenél csak az egyik oszlop értékei látszanak? A választás után persze minkét értékre szükség lenne.
hali darabteli függvény kritériumánál hogyan kell használni a csillagot? idézőjelek nélkül hibásnak írja ki a képletet, idézőjelekkel viszont nem működik (vagyis eredeti funkciója helyett azokat a cellákat keresi, amelyek tartalmazzák a csillag karaktert). ötlet?
Ha a cella számformátumát erre állítod: óó:pp:mm,000 akkor látszanak az ezredmásodpercek is, ki is lehet vonni őket. Lásd a képen az A4 cella képletét.
****************************************** Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 40 Then TextBox2.Enabled = False End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) TextBox2.Enabled = True End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 40 Then ComboBox1.Enabled = False If KeyCode = 38 Then TextBox1.Enabled = False End Sub
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ComboBox1.Enabled = True TextBox1.Enabled = True End Sub ******************************************
Az excel időformátumai nem kezeleik a századmásodpercet. Írd külön cellába a századmásorpercet. A szmp nélküli időértékeket egyszerűen ki tudod vonni egymásból, megkapva a különbségüket. A szmp-et pedig kivonod külön. (A cella formátumát ne felejtsd el "Idő"-re állítani a szmp nélküli időértékeknél)
Köszönöm ez működik itt a 2007-ben, csak a TextBox2-nél az elv alapján sehogy sem tudom beilleszteni, hogy felfelé billentyűre ne lépjen vissza a TextBox1-re. A lényeg az lenne, hogy a TextBoxokból csak Tab-al lehessen kilépni.
Itt egy lehetséges megoldás. Az elv az, hogy amikor a lefelé nyilat nyomja a felhasználó, letiltjuk az adott vezérlőelem alatti vezérlőelemet. Amikor elengedi a billentyűt, akkor újra engedélyezzük. Ezért tehát a kód szempontjából fontos, hogy milyen sorrendben vannak a vezérlők egymás alatt. Ha például az alábbi vezérlők vannak az alábbi sorrendben
felül: TextBox1 középen: TextBox2 alul: ComboBox1
akkor a TextBox1 eseménykezelőjében a TextBox2-t kell letiltani majd engedélyezni. VBA: ************************************ Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 40 Then TextBox2.Enabled = False End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) TextBox2.Enabled = True End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 40 Then ComboBox1.Enabled = False End Sub
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ComboBox1.Enabled = True End Sub ************************************ (KeyCode = 40 a lefelé nyíl kódja.)
Na most, ez biztosan működik 2003-as Excelben, teszteltem. Viszont elképzelhető, hogy 2007-ben valami változás volt, pl. ha TextBox2 le van tiltva, akkor továbblép ComboBox1-re, ezt nem tudom. De ezen az elven akkor is lehet működő kódot alkotni, csak kicsit bonyolultabb lesz.
Szeretném a segítségeteket kérni abban, hogy az Excel, meg tudja e állapítani az alábbi két idő különbségét, valamint azt, hogy melyik a kevesebb idő? Össze tudja e őket adni? Ha igen, akkor ezt, hogyan teszi?