Keresés

Részletes keresés

pimre Creative Commons License 2024.03.04 0 0 37897

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

    Set aktlapws = ThisWorkbook.Worksheets(aktlap)

    utolsosor = aktlapws.Range("A" & Rows.Count).End(xlUp).Row

    utolsooszlop = aktlapws.Cells(2, Columns.Count).End(xlToLeft).Column

 

    osszesoszlop = oszlopkeres(aktlapws, "összes", utolsooszlop, aktlapws.Name, rendben) "megkeressük az "összes" nevű oszlopot

 

    ' aztán a többi oszlopnevet is megkeresi (mert minden munkalapon más helytől kezdődnek ezek az oszlopok.

    ' Az egymáshoz viszonyított helyzetük ugyanaz, bár azt hiszem, hogy ez úgyis érdektelen a probléma szempontjából

 

    ' végül az egyes oszlopok szerint sorrenddez, ahogy a 37893-as hozzászólásban bemutattam:

    Call sorrendez(aktlapws, utolsosor, utolsooszlop, osszesoszlop, hozottoszlop, kozposszegoszlop, szobelioszlop, nevoszlop)

Next aktlap

ThisWorkbook.Save

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 

 

With aktlapws.Sort

     .SetRange Range("A2:" & oszlopnev(utolsooszlop) & utolsosor)

     .Header = xlYes

     .MatchCase = False

     .Orientation = xlTopToBottom

     .SortMethod = xlPinYin

     .Apply

 End With

 

 

Előzmény: Fferenc50 (37896)
Fferenc50 Creative Commons License 2024.03.04 0 0 37896

Szia!

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?

Üdv.

Előzmény: pimre (37894)
XtraP Creative Commons License 2024.03.04 0 0 37895

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 ...

Előzmény: pimre (37894)
pimre Creative Commons License 2024.03.04 0 0 37894

É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. 

 

Előzmény: pimre (37893)
pimre Creative Commons License 2024.03.03 0 0 37893

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):

  

aktlapws.Sort.SortFields.Clear 

aktlapws.Sort.SortFields.Add Key:=aktlapws.Range(osszesoszlop & "3:" & osszesoszlop & utolsosor), _

                            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 

aktlapws.Sort.SortFields.Add Key:=Range(hozottoszlop & "3:" & hozottoszlop & utolsosor), _

                            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal  

aktlapws.Sort.SortFields.Add Key:=Range(kozposszegoszlop & "3:" & kozposszegoszlop & utolsosor), _

                            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal  

aktlapws.Sort.SortFields.Add Key:=Range(szobelioszlop & "3:" & szobelioszlop & utolsosor), _

                            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 

aktlapws.Sort.SortFields.Add Key:=Range(nevoszlop & "3:" & nevoszlop & utolsosor), _

                            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   

With aktlapws.Sort

    .SetRange Range("A2:" & oszlopnev(utolsooszlop) & utolsosor)

    .Header = xlYes

    .MatchCase = False

    .Orientation = xlTopToBottom

    .SortMethod = xlPinYin

    .Apply

End With

És az .apply valami rejtélyes módon ezen az eg munkalapon nem hajtódik végre.

 

Elég lehet ennyi, hogy tudjak kapni egy tippet, merre keressem a hiba okát?

pimre Creative Commons License 2024.03.03 0 0 37892

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:

 

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

 

De sajnos ettől sem lettem okosabb.

Valódi példa itt sincs, és  ebből sem derül ki, hogy mitől Sub a SubField.

Előzmény: Eredő Vektor (37891)
Eredő Vektor Creative Commons License 2024.03.03 0 0 37891

Pl. Copilot ezt mondja rá:

 

Az Excel VBA SortFields.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:

  • Szintaxis:

    expression.Add2(Key, SortOn, Order, CustomOrder, DataOption, SubField)
    • expressionSortFields 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. 📊🔍

Előzmény: pimre (37889)
Eredő Vektor Creative Commons License 2024.03.03 0 0 37890

ahogy látom, elkezdik excel szinten is alkalmazni az adattípus fogalmát.

Szerintem azt a célt szolgálja sorbarendezésnél, hogy az adattípust figyelembe veszi mint második rendezési szint pl. egy oszlopon belül.

Előzmény: pimre (37889)
pimre Creative Commons License 2024.03.03 0 0 37889

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.

pimre Creative Commons License 2024.02.29 0 0 37888

Ja és persze, ha kész, akkor a képleteket célszerű lehet értékké alakítani, hogy ha bármi változik a sorrendben, akkor is megmaradjanak az azonosítók.

Előzmény: pimre (37887)
pimre Creative Commons License 2024.02.29 0 1 37887

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.

Előzmény: Asatru (37883)
Eredő Vektor Creative Commons License 2024.02.29 0 0 37886

és a sorrend tökmindegy

Előzmény: Eredő Vektor (37885)
Eredő Vektor Creative Commons License 2024.02.29 0 1 37885

Nagyjából ennyiből ez megvan:

=HOL.VAN(B1;$B$1:$B$3;0)

Nekem A1:B3-ban vannak az adatok fejléc nélkül. 

A-ban a "képlet", B-ben az "Azonos elemek"

Előzmény: Asatru (37883)
Zs:) Creative Commons License 2024.02.29 0 0 37884

Az azonos elemek mindig egymás alatt vannak, vagy össze vissza előfordulhatnak?

Előzmény: Asatru (37883)
Asatru Creative Commons License 2024.02.28 0 0 37883

Sziasztok!

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ó].

Mellékelek egy példa képet.

Köszönöm szépen ha tud valaki segíteni!

Fferenc50 Creative Commons License 2024.02.27 0 0 37882

Szia!

Vaqyis a képletben meg kell adnod a negyedik paramétert is, hamis vaagy 0 értéknek.

Üdv.

Előzmény: MM10 (37879)
XtraP Creative Commons License 2024.02.27 0 1 37881
Előzmény: XtraP (37880)
XtraP Creative Commons License 2024.02.27 0 1 37880

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.
Előzmény: MM10 (37879)
MM10 Creative Commons License 2024.02.27 0 0 37879

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?

MM10 Creative Commons License 2024.02.27 0 0 37878

illetve,teljesen mindegy mit írok az "alma" helyére a képletben,semmit nem befolyásol 

Előzmény: MM10 (37877)
MM10 Creative Commons License 2024.02.27 0 0 37877

 

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?

XtraP Creative Commons License 2024.02.27 0 0 37876
Előzmény: MM10 (37874)
MM10 Creative Commons License 2024.02.27 0 0 37875

 

A kép lemaradt:

Előzmény: MM10 (37874)
MM10 Creative Commons License 2024.02.27 0 0 37874

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.

pimre Creative Commons License 2024.02.27 0 0 37873

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á.

 

Tegnap feltetemezt a kérdést az az Ozgrid oldalra (https://forum.ozgrid.com/forum/index.php?thread/1233674-reset-excel-vba-screen-to-the-initial-state/), és reggelre kaptam választ: "You should be able to reset them by deleting the Dock entry in the registry at HKEY_CURRENT_USERSoftwareMicrosoftVBA7.1Common"

 

Töröltem a Dock bejegyzést, és helyreállt a kívánt eredeti állapot.

Előzmény: Fferenc50 (37833)
_Nyuszi Creative Commons License 2024.02.24 0 0 37872

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.

Előzmény: djuice (37863)
VízÜgyes Creative Commons License 2024.02.21 0 0 37871

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.

Előzmény: VízÜgyes (37839)
djuice Creative Commons License 2024.02.21 0 0 37870

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! :(

Előzmény: Fferenc50 (37869)
Fferenc50 Creative Commons License 2024.02.21 0 0 37869

Szia!
Mire gondolsz?

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.

Üdv.

 

Előzmény: djuice (37866)
arkilaszlo Creative Commons License 2024.02.21 0 0 37868
Előzmény: djuice (37866)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!