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.
Szia, köszönöm az ötletet. A munkalapok sorrendjének felcserélése után nem ugyanazon a munkalapon jelentkezett a gond, hanem amelyik elsőként került sorra. A korábbi első itt már rendben lett.
A rendező program így indul:
Sub Tagozat_sorrendezo()
Dim lapszam As Long ' stb.
lapszam = ThisWorkbook.Sheets.Count
For aktlap = 2 To lapszam ' Az első a teljes lista, de azzal most nem foglalkozunk, ezért a másodiktól kezdjük a sorrendezést. Tehát a mindenkori második kerül elsőként sorra
MsgBox "A tagozati adatok sorrendezése befejeződött!"
End Sub
Tehát ezek alapján semmi okát nem látom az első munkalap többitőleltérő viselkedésének.
Kérdezted még, hogy "Milyen tartományra hivatkozik az aktlapws változód?"
Az aktlapws az aktuálisan éppen sorra került munkalap. A sorrendezésnél az A2-től kezdve a teljes tartományt jelöli ki. Azért A2, mert két soros fejléc van, de ebből az első sor érdektelen, csak a 2. sor az érdekes
Esetleg próbáld meg a munkalapok sorrendjét felcserélni. Ha akkor is ugyanazon a munkalapon jelentkezik a gond, akkor azt érdemes alaposabban megvizsgálni.
Milyen tartományra hivatkozik az aktlapws változód?
Nem biztos, hogy segít neked, de én akkor jártam hasonlóan, amikor egy "újrahasznosított" (és .Clear-rel törölt!) munkalapon bennragadt egy szűrő. Nálam akkor egy sortörlő VBA-utasítás hagyott ki a törlésből szemre véletlenszerű sorokat, és szintén nem mindig ...
És ezután jött az újabb rejtély. Miután lefutott a program úgy, hogy a sorban elsőként érintett munkalapon a rendezés nem történt meg (és mindig ez, nem véletlenszerűen egyik, vagy másik), akkor ha újra elindítom a rendező makrót, akkor ezt is megcsinálja.
Lehetséges, hogy valami időzítési problma miatt nem működik rendesen az .Apply parancs? Meglátom, holnap megpróbálkozom egy DoEvent, vagy hasonló beírásával. De azért kellemetlen, ha van olyan programrészlet, amelyik hol így, hol úgy működik.
Most viszont van egy teljesen megmagyarázhatatlan jelenség a rendezéssel kapcsolatban. 7 munkalapot kell rendeznem lényegében azonos adatszerkezettel. A rendezéshez 5 mezőt használok, ebből 4 csökkenő sorrendben, az utolsó növekvőben rendez. Mind a 7 munkalapon ilyen adatok vannak a rendezendő oszlopokban. Vagy szám, vagy Nincs adat szöveg az egyikban, és #ÉRTÉK! a másikban. A rendezés célja többek közt éppen az, hogy ezek a hibás sorok a rendezéskor az elejére kerüljenek.
A 7 munkalap közül 6-ban teljesen rendben rendezi a sorokat a program, az egyikben következetesen nem.
A rendező részlet, amit egyiknél nem végez el, a következő. A fejlécsor a második, így az első rendezendő sor a 3. (bocs a hosszú változónevekért. Szeretem a beszélő elnevezéseket):
Kösz, most én is rákerestem ugyanott, és az AI nekem a szintais leírását követően ezt adja (előzőleg Wordbe másolvas, majd onnan ide):
The SortFields.Add2 method in Excel allows you to create a new sort field and return a SortFields object. This method can optionally sort data types with the specified SubField. Let’s break down the parameters:
...
Here’s an example of how you might use it to sort a table named Table1 on Sheet1 by Column1 in ascending order based on the SubField Population from Geography data types:
Az Excel VBASortFields.Add2 metódusa lehetővé teszi új rendezési mező létrehozását és egy SortFields objektum visszaadását. Ez a módszer különösen akkor hasznos, ha az adattípusokat egy almező-definíció alapján szeretné rendezni. Bontsuk le a részleteket:
expression: SortFields objektumot képviselő változó.
Key: Megadja a rendezés kulcsértékét.
SortOn (Nem kötelező): A rendezés alapjául szolgáló mező.
Order (Nem kötelező): Megadja a rendezési sorrendet.
CustomOrder (Nem kötelező): Megadja, hogy kell-e egyéni rendezési sorrendet használni.
DataOption (Nem kötelező): Megadja az adatbeállítást.
SubField (Nem kötelező): Megadja azt a mezőt, amely alapján rendezni kell egy adattípushoz (pl. Népesség földrajzi helyhez vagy Mennyiség készletekhez).
Megjegyzések:
Ez az API támogatja az almezők olyan adattípusok szerinti rendezését, mint a földrajz vagy a részvények.
A képletekkel ellentétben az almezők nem igényelnek szögletes zárójeleket a szóközök használatához.
Példa: Tegyük fel, hogy van egy Tábla1 nevű táblája a Munka1 lapon, és növekvő sorrendbe szeretné rendezni az Oszlop1 szerint a Földrajzi adatok almezőből származó populációja alapján. Ezt a következőképpen érheti el:
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort.SortFields.Add2 _ Key:=Range("Table1[[#All],[Column1]]"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal, _ SubField:="Population" With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Ne feledje, hogy ez a módszer rugalmasságot biztosít az adattípusokat és almezőket érintő összetett rendezési forgatókönyvek kezelésekor. 📊🔍
Egy excel tábla rendezését vizsgáltam makrórögzítéssel, és a SortFields.Add2 formát adta ki. Próbáltam utánanézni, hogy mi ez, és azt találtam, hogy az Add2 használ egy új paramétert, aminek a neve "SubField" , amiről ezt írja a Microsoft: "Specifies the field to sort on for a data type (such as Population for Geography or Volume for Stocks)".
Namármost én ebből egy mukkot sem értek, ezért elkezdtem utánanézni, de nem találtam érthető leírást. Annyit viszont láttam, hogy néhányan nehezményezték, hogy egyes korábbi verziókkal ez az Add2 nem kompatibilis. Ezért a saját programomban helyette a 2 nélküli Add-ot használtam, és rendben műküdik.
De érdekelne a Subfield részletesebb magyarázata. Tudtok valami forrást, ahol utána lehet nézni? Nekem nem jött össze.
Egyszerű: Feltéve, hogy a B oszlop rendezett, ahogy a példád mutatja.
Ekkor az A oszlop 2. sorába beírsz egy 1-est.
Utána az A oszlop 3. sorába ezt írod: =HA(B3=B2;A2;A2+1). Majd ezt a képletet végighúzod lefelé a teljes listában, és ott lesznek az azonosítóid mindegyik mellett. Úgy, ahogy a mintádban látod.
Szeretnék segítséget kérni egy feladathoz: Van egy több ezer soros táblázatom, tartalmaz egy oszlopot amiben vannak ismétlések(ezek lehetnek számok és betűk is) [Azonos_elemek], azt szeretném elérni, hogy egy másik oszlopban az azonos elemek kapjanak egy egyedi számot. [Egyedi_azonosító].
A VKERES-nél elmondja, amit a FKERES-nél nem; összeollóztam :(
Ha a tartományban_keres argumentum értéke IGAZ, akkor a tábla első sorában szereplő értékeknek növekvő sorrendben kell állniuk: ...-2, -1, 0, 1, 2,... , A-Z, HAMIS, IGAZ; különben előfordulhat, hogy a VKERES függvény nem a helyes értéket adja vissza. Ha a tartományban_keres argumentum értéke HAMIS, akkor a táblának nem kell rendezettnek lennie.
Opcionálisan megadhatja az IGAZ értéket, ha a visszatérési érték kereséséhez közelítő egyezést szeretne előírni, vagy a HAMIS értéket, ha pontos egyezést. Ha nem ad meg semmit, az alapértelmezett érték az IGAZ, vagyis a közelítő egyezés.
Elnézést a sok egymás utáni posztért,de közben megtaláltam a megfelelő képletet amit keresek,ami majdnem tökéletesen műkődik,de van benne egy hiba valamiért. A Körténél azt az adatot írja ami a "Citrom"-hoz van megadva. ezt miért csinálhatja?
igen,mindenképp előrébb vagyok vele,viszont én a képlet után az eladott mennyiséget szeretném kapni. így ezzel a képlettel a TRUE előtt megadott értékű sorban lévő adatot kapom meg,mivel itt az 5 van megadva a képletben,ezért a kijelölt terület első oszlopában az 5.sorban lévő adatot kapom meg. Én nekem pedig arra lenne szükségem,hogy amelyik sorban megtalálta az "alma" kifejezést,abban a sorban az ötödik oszlopban lévő adatot kapjam meg. Ezt megtudom valahogy oldani?
Sziasztok. Olyan kérdésem lenne,hogy az megoldható e excelben,hogy a tábla a megfelelő adatokat beírja magának egy bemásolt adathalmazból.
Csatolok 2 fájlt egy egyszerű példával hogy egész pontosan mire gondolok.
Egy nagyon egyszerű dologról lenne szó,de az F-J sor celláihoz az adatokat készen kapom meg,és a teljesen véletlenszerű sorrendben vannak az adatok. pl a képen Alma,Körte,Barack stb.. sorrend van,a következőben már egy teljesen másik sorrend lép fel.
Tehát amiben a segítséget kérem,hogy képes legyen a tábla magától kikeresni hogy melyik sorban van az az adat amit keresek pl a C5ös cellához,ami most a J5ös cellában van,de következő alkalommal lehet a J8asban lesz,utána a J5ösben.
Elég bután sikerült elmagyaráznom,de lényegében valami kereső függvényre lenne szükségem,ami kikeresi melyik sorban van pl az Alma,és az adatokat onnan kitudja ezután keresni.
Kicsit megkésve mégis találtam megoldást arra a problémámra, hogy "létezik-e, hogy nincs visszaállítási lehetőség a VBA ablakok alapértelmezett elrendezésére?". Közzéteszem, hátha másnak is szüksége lehet rá.
Tudom, hogy nem mai a kérdés, de esetleg még egy tipp a korábbi megoldás mellé:
Én fel szoktam venni egy segédoszlopot, ami valahogy így néz ki:
=HA(VAGY(A1="";B1="";C1="");IGAZ;"")
Ezt mondjuk az F oszlopba beírva "IGAZ" értéket kapsz, ha valamelyik cella a háromból (A1, B1, C1) üres, egyébként üres marad a cella. Erre autoszűrővel szűrve könnyen megtalálom, hol vannak üres adatok.
Persze ez csak akkor működhet, ha van lehetőség plusz oszlop felvételére.
Megtaláltam a megoldásokat, leírom hátha szükséges lesz még rá valakinek.
Szóval a táblázat oszlopokba ha megváltoztatom a képletet, akkor amikor beírom a cella mellett megjelenik egy kis ikon, ahol kiválasztható, hogy az oszlopképlet legyen az új.
A formázási problémát pedig az egész oszlop (nem csak a táblázatoszlop) formázásának megváltoztatásával tudtam megváltoztatni.
Nyomtatóbeállításra kérdezem. Tudom hogy megjegyzi az előző állapotot, de egy tucat munkalapfülnél ezt egyenként kellett végigkattintani. Ráadásul a kolleginák kinyomtak így száz oldalakat pocsékba, mert ők se, én se gondoltam, hogy a nyomtatóbeállítások még ráadásul munkalaponként is eltérőek lehetnek! :(
Ha arra, hogy minden munkalapot 1 oldal széles 1 oldal magasan nyomtasson, akkor
1. Kijelölöd az összes munkalap fület (shift egér ha egymás utáni, ctrl egér ha van közte más is)
2. A Lapelrendezés menű Méret beállítás csoportjában beállíthatod a szélességet - magasságot, méretet
Ez így minden egyes munkalapra érvényes lesz.
Ha viszont a nyomtatón szeretnél egyoldalas nyomtatást, azt a nyomtató beállításoknál kell előzetesen kiválasztani és addig a beállítás marad, amíg meg nem változtatod újra.