Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz jjohn #54707 üzenetére

    Szia,

    Az egyezési mód (match mode) az egyik legnagyobb eltérés az FKERES és XKERES között. Az FKERES-ben alapból közelítő találatot ad vissza, míg az XKERES pontos egyezést. (A másik, hogy XKERES tud balról találatot visszadni.)

    Az hogy 3-as opcióval (ami reguláris kifejezés használatát jelenti) megy csak az XKERES azt sugallja nekem, hogy a keresési érték nem pontosan úgyanúgy van a keresési tartományban (pl. lehet szóköz előtte vagy utána).
    A mintában az OTJV25 lapon a számok szövegként voltak a cellákban, ezt csak cella formázással nem lehet elérnni, hanem bevitelkor apsztróf + szám kell, pl. '476
    vagy ha már vannak számok akkor mellette oszlopban a képlet =A1&"" . Ezt az eredményt visszamásolva az A-oszlopba szövegmarad a szám.

    Próbáld ki, hogy 3-as helyett 1-et adsz meg. Ekkor is hiba lesz vagy műkődik rendben?

    Reguláris kifejezések hasznosak tudnak lenni, de külön "szakma" jól használni őket.
    pl. Ha megakarjuk találni a különböző Attilákat a szövegben akkor lehet próbálkozni vele. Itt pl. Attila, Atilla, Atila, Atika változatokat keresünk.

    üdv

  • Mutt

    senior tag

    válasz PeLa87 #54704 üzenetére

    Szia,

    EV lapon ez a képlet: =XKERES(A2&"";OTVJ25!A:A;OTVJ25!B:B;"")

    Feri csak arra figyelmeztet, hogy a kereső függvények csak azonos típusok (szöveget szövegekben és számokat számok) között tud keresni. Excelben a számokat szövegként is lehet tárolni (ilyenkor a számok balra vannak a cellában automatikusan igazítva, míg a számok jobbra igazodnak).

    Az OTVJ25 lapon a számok szövegként vannak, ezért ha az EV lapra számként írod be őket akkor nem lenne találat, de a képletben a &"" résszel mindent szöveggé alakítunk, így műkődni fog a képlet.

    üdv

  • Mutt

    senior tag

    válasz mindanee #54699 üzenetére

    Szia,

    Ilyen számformátumot nem lehet létrehozni. Egy közeli eredményt ezzel a kóddal lehet elérni: # "nap" ? "óra" /24

    Az órát ilyenkor kerekíteni fogja a rendszer.

    A képletedben a KEREK.LE(G18;0) helyett használhatod az INT(G18)-at is.

    A G-oszlopban megvan az eredeti értéked, azt nem tudod kitörölni különben nem lenne meg a szöveges változatod másik cellában. A számolást végezd az eredeti oszlopon/értéken. Ha azt akarod hogy ne látszódjon az eredeti, akkor el lehet "tünteni":
    a) oszlop elrejtéssel
    b) betűszínt a háttérszínnel megegyzőre állítod
    c) egyedi számformátummal; pl: ";;;" ilyenkor ha zárolod a cellát és még az elrejtést is beállítod, akkor teljesen láthatalan lesz a cella tartalma.
    d) rejtett munkalapra teszed

    Remélem nem értettem félre a problémát.
    üdv

  • Mutt

    senior tag

    válasz Geryson #54694 üzenetére

    Szia,

    Kaptál már helyes válaszokat, de MS365-ben van még más lehetőség is.
    A legegyszerűbb a SZÖVEGELŐTTE és SZÖVEGUTÁNA függvények használata, de egy kis AI segítséggel a leghatékonyabb egy reguláris kifejezés használata.
    A többi pedig csak poén.

    =SZÖVEGELŐTTE(SZÖVEGUTÁNA(A1;"(");")")
    =REGEXKIVONÁS(A1;"(?<=\()\w+(?=\)$)")
    =INDEX(SZÖVEGFELOSZTÁS(A1;{"(";")"});;2)
    =PY("text =   xl(""A1"")
         text.split(""("")[1].split("")"")[0]",0)


    üdv

  • Mutt

    senior tag

    válasz szricsi_0917 #54685 üzenetére

    Szia,

    A Connections object-nek nincs Refreshing tulajdonsága.

    A Power Query egy OLE DB lekérdezés, aminek viszont már van ilyenje.

    Ha nem munkalapra írja ki az eredményt a lekérdezés, akkor minding False -t ad vissza.

    Szóval
    If conn.Refreshing Then
    helyett
    If conn.OLEDBConnection.Refreshing Then
    kell.

    Mivel a lekérdezések alapból a háttérben futnak, ezért a számolás kikapcsolása amíg a lekérdezések futnak nem fog segíteni. A munkafüzet abban a pillanatban hogy a lekérdezések a munkalapra kirakják az eredményt be fog lassulni (látom hogy hagysz 3x 2 másodpercet még, de mivel lassú a füzeted ezért valószínű ez nem elég).

    Igazán jó megoldást nem tudok így látatlanban, de ha több infót adsz talán tudunk mondani vmit.

    üdv

  • Mutt

    senior tag

    válasz föccer #54672 üzenetére

    Szia,

    Milyen Excel verziód van? Van Python gombod képletek menüben?
    Milyen gyakran frissülnek a verziószámok?
    Jelenleg nagyon sok adatban keres a képlet, miközben lehet hogy alig volt változás.
    Amin el lehetne gondolkodni, hogy mondjuk az Excel megnyitásakor egy Power Query/Pivot segítségével meghatároznánk a receptekhez tartozó legutolsó verziószámot (ez egy keresési tábla lenne) és az egy FKERES/XKERES-el raknánk be a táblába. Ha szükséges menetközben kézzel lehet frissíteni keresési táblát.

    Az 54653-asban mutatott képlethez pár ötlet:
    1) Többször használod ugyanazt a feltételt az A és B oszlopokra. Beszíneztem párszor.

    A LET-et erre vezették be, ha van akkor érdemes használni. Ha nincs akkor lehet hogy jobb lenne a munkalapon ennek a képletnek az eredményét tárolni.

    2) A HAHIBA elhagyható, ha a SZŰRŐ-nek használod a 3. opcióját, üres esetén mit adjon vissza.

    3) A SORBA.RENDEZ és EGYEDI megoldható egy lépésben is MS365-ben, elméletben gyorsabb. CSOPORTOSÍTAS.ALAP.SZERINT függvényt lehetne kipróbálni.
    =CSOPORTOSÍTÁS.ALAP.SZERINT(FÜGG.HALMOZÁS(<lista>);;;0;0)

    Itt valójában csak az első paramétert adjuk meg, a többit üresen hagyjuk, illetve a 0-val nem kérünk plusz mezőket.

    4) Mivel a szűrőkben ugyanazon feltételeket használod ezért kipróbálhatod, hogy csak 1 db szűrőd van: SZŰRŐ(OSZLOPVÁLASZTÁS(L2:AG100000;1;4;7;10;13;16;19;22);feltétel)

    Ahol a feltétel az amit az 1-es pontban említettem. Ez esetben nem szűrűnk üres értékekre. A kapott oszlopokat ez esetben egymásra kell halmoznunk, ami bonyolítja a dolgot. Ha nem kell dinamikusan csinálni, akkor ennyi:
    =LET(talalatok;SZŰRŐ(<ide jön amit fentebb írtunk>);
    eredmeny;FÜGG.HALMOZÁS(OSZLOPVÁLASZTÁS(talalatok;1);OSZLOPVÁLASZTÁS(talalatok;2);<további oszlopok);
    SORBA.RENDEZ(EGYEDI(eredmeny)))

    üdv

  • Mutt

    senior tag

    válasz Geryson #54675 üzenetére

    Szia,

    Klasszikus képlettel kaptál már választ, de Excel 2024-től már van SZÖVEGELŐTTE függvény is, amelyet egyszerű használni.

    üdv

  • Mutt

    senior tag

    válasz föccer #54655 üzenetére

    Szia,

    A név hibát azért adja, mert a képlet végefelé a MARADÉK függvény helyett az angol MOD maradt a képletben. Azonban ezek után sem lesz jó, mert van hiba a képletben:
    1) A változók (t1, t2, n1, n2, col1, col2) cellahivatkozások lesznek. Tegyél bele pl. aláhúzást (t_1, t_2 stb).
    2) A# és B# csak akkor helyes, ha névkezelőben létrehoztad az A és B neveket.
    3) A végén inkább VÍZSZ.HALMOZÁS kellene.

    Alternatív megoldások:
    1) Power Pivottal egy sima pivot, mivel a két adatsor között nincs kapcsolat, ezért az összes kombinációt (Descart-szorzat) vissza fogja adni.

    2) Power Query-vel is hasonló a módszer.
    3) Egy másik változat LET-re.
    =LET(lista1;A1:A3;
    lista2;C1:C3;
    a;OSZLOPHOZ(lista1&"|"&TRANSZPONÁLÁS(lista2));
    hely;BYROW(a;LAMBDA(r;SZÖVEG.KERES("|";r)));
    VÍZSZ.HALMOZÁS(BAL(a;hely-1);KÖZÉP(a;hely+1;100)))


    üdv

  • Mutt

    senior tag

    válasz lenkei83 #54628 üzenetére

    Szia,

    Nem fog menni segédoszlop nélkül. Az érvényesítés szöveges listát vagy cella tartományt vár és az újabb függvények tömböt adnak vissza, s ezt nem fogadja el (még?, már 4 éve fenn áll ez a hiba) a rendszer.

    A megoldás, hogy a sorbarendezett adatot vhova (akár rejtett oszlop/munkalap) kiíratod és használod fel érvényesítésben. Ekkor használd a # jelet, ami mindig az összes elemére a tartománynak hivatkozik.

    A példában E2-ben van a sorbarendezés. Az F2-ben az érvényesítésnél pedig a képlet =E2#

    Más.
    Az ELTOLÁS helyett használhatsz mást dinamikus tartomány létrehozására.
    1) Ha van KIMETSZÉSITARTOMÁNY függvényed, akkor
    =SORBA.RENDEZ(KIMETSZÉSITARTOMÁNY($D$2:$D$60)) vagy rövidebben
    =SORBA.RENDEZ($D$2:.$D$60)
    2) SZŰRŐ is remek megoldás.
    =SORBA.RENDEZ(SZŰRŐ($D$2:$D$60;$D$2:$D$60<>""))
    3) Akár pedig ez is:
    =CSOPORTOSÍTÁS.ALAP.SZERINT($D$2:.$D$60;;DARAB2;0;0)

    üdv

  • Mutt

    senior tag

    válasz Rhair #54622 üzenetére

    Szia,

    Ikonkészletek esetén nem tudsz saját képletet használni (ami most kell).
    A megoldás, hogy az adatsor melletti cellába állítod elő a képletet.

    B4-ben a képlet: =HA(ÉS(A5="";A3<>"";A4<>"");VÁLASZT(ELŐJEL(A4-A3)+2;"ê";"ó";"é");"")

    Megnézzük hogy felette és alatta van-e érték, illetve hogy az aktuális sorban is van-e érték, ha nincs alatta, de felette és mellette van érték akkor az utolsó sorban vagyunk vagyis lehet összehasonlítani az előtte lévő értékkel. Az összehasonlítás eredményeként "furcsa" karakterket írunk a cellába, amelyek nyilakká változnak ha annak az oszlopnak a betűtípusa Windings lesz.

    üdv

  • Mutt

    senior tag

    válasz tylerddd #54621 üzenetére

    Szia,

    ...csv fájl adatok menüből való megnyitásakor miért kap formázást a táblázat...
    Ilyenkor az Excel Power Query funkcióját használod, ami munkalapra az adatokat csak táblázat formájában tudja betölteni.

    A jobb alsó sarokban az átméretezés ikont látod, amivel a táblázat tartományát lehet állítani. Ha egyáltalán nincs szükséged a táblázatra, akkor a táblázatban állva válaszd ki a Táblázattervezés menüt és ott az átalakítás tartománnyá opciót, OK-zd le a kérdést.

    Amikor az Adatok menüt használod, akkor egy kapcsolatot hozol létre (amiben átalakítási lépéseket lehet meghatározni) az adatforrás és az aktuális munkafüzet között. Ha tőrlöd a munkalapot/táblázatot ahova a kapcsolat az eredményt írja (a fenti tartománnyá alakítás is tőrlés), attól még a kapcsolat megmarad az forrás és a füzet között. Egy másik gépre/mappába másolva emiatt kaphatsz figyelmeztetést, ezért ha a kapcsolatra sincs szükséged, akkor az Adatok fülön a "Lekérdezés és kapcsolatok" opció alatt töröld a felesleges kapcsolatot.

    Ps.
    A Power Query hasznos dolog, ha ismétlődő feladatot kell adatokon végrehajtani, kvázi makrókat lehet vele helyettesíteni. Érdemes megismerkedni vele, ha gyakran használod az Excel-t.

    üdv

  • Mutt

    senior tag

    válasz underdark #54617 üzenetére

    Szia,

    Kimutatást javasoljuk erre.
    Az újabb Excel-ekben képlettel is lehetséges már.

    E2-ben a képlet: =KIMUTATÁS.ALAP.SZERINT(Table1[Name];Table1[Year];Table1[ASC];SZUM;0;0;;0)

    Van egy másik képletem is de sokkal hosszabb.

    =LET(nevek;SORBA.RENDEZ(EGYEDI(Table1[Name]));
    evek;SORBA.RENDEZ(EGYEDI(Table1[Year]));
    sorszam;SORSZÁMLISTA(DARAB2(nevek));
    ertekek;REDUCE(TRANSZPONÁLÁS(evek);sorszam;LAMBDA(s;c;FÜGG.HALMOZÁS(s;TRANSZPONÁLÁS(SZUMHATÖBB(Table1[ASC];Table1[Name];INDEX(nevek;c);Table1[Year];evek)))));
    VÍZSZ.HALMOZÁS(FÜGG.HALMOZÁS("";nevek);ertekek))

    A képletben az "ertekek" sorban van a lényeg, ami a SZUMHATÖBB segítségével kiszámolja mindegyik névhez és évhez az értéket. A REDUCE-t arra használom, hogy a kapott értékeket "egymásra tegyem" (függőleges halmozás), mert ezt tudom majd a munkalapra kiírni. A végén még az elejére teszem a neveket.

    üdv

  • Mutt

    senior tag

    válasz dm1970 #54609 üzenetére

    Szia,

    Ez esetben egy keresési táblával tudjuk meghatározni, hogy mennyi szünetet kell majd levonni.
    =KEREKÍTÉS(MARADÉK(JOBB(B1;5)-BAL(B1;5);1)*24;2)-KERES(MARADÉK(JOBB(B1;5)-BAL(B1;5);1)*24;{0;6,33;9,75};{0;0,33;0,75})

    Üdv

  • Mutt

    senior tag

    válasz sopruk #54602 üzenetére

    Szia,

    A keres függvények csak azonos adattípuson (szám vs. szöveg) műkődnek helyesen.
    Amikor két külön helyről van adatsorod, akkor sokszor előfordul hogy a típusok eltérőek (
    a számok szövegként vannak tárolva).

    Esete válogatja hogy mi a jó megoldás, de csinálhatod hogy az XKERES-ben azonnal típuskonverziót végzel:
    1) mind a keresett, mind a keresési tartományt szöveggé alakítod azzal hogy üres szöveget fűzől hozzájuk:
    =XKERES([@Termékkód]&"";csv_data[termékkód]&"";csv_data[összeg])
    2) mindent számmá alakítasz egy szorzással:
    =XKERES([@Termékkód]*1;csv_data[termékkód]*1;csv_data[összeg])

    Ha a keresési tartomány sok adatot tartalmaz (kb. 50 ezer sor felett van), akkor gyorsabb megoldás, a tartomány mellé egy új oszlopban végzed el a típus átalakítást és azt használod fel kereséshez.

    Hasonló technikát lehet használni pl. felesleges szóközök miatti hibák esetén a TISZTÍT függvénnyel.
    =XKERES(TISZTÍT([@Termékkód]);TISZTÍT(csv_data[termékkód]);csv_data[összeg])

    üdv

  • Mutt

    senior tag

    válasz dm1970 #54604 üzenetére

    Szia,
    ...időpár alapján kiszámolja a tényleges munkaidőt a munkaközi szüneteket kiveszi belőle...

    1) Az eltelt időszámítására a legbiztossabb megoldás a MARADÉK / MOD függvény használata. MARADÉK(vége-eleje;1)*24
    2) Érdemes a HAELSŐIGAZ / IFS függvényt használni, ha több vizsgálatod is van a képletben.

    Ezek után, ha újabb Exceled van (Excel 2021 vagy újabb), akkor a LET függvénnyel áttekinthetőbbé tehetjük az egészet:
    =LET(input;B1;
    kezdete;BAL(input;5);
    vege;JOBB(input;5);
    kulonbseg;MARADÉK(vege-kezdete;1)*24;
    kulonbseg-HAELSŐIGAZ(kulonbseg>9+45/60;45;kulonbseg>6+20/60;20;1;0)/60)


    Az első 3 sor a bementő adatokról szól.
    A 4. sorban számoljuk a két időpont közötti különbséget a MARADÉK függvénnyel.
    Az utolsó sorban a HAELSŐIGAZ megnézi hogy a különbség mekkora és levonja vagy a 45 vagy a 20 percet.

    üdv

  • Mutt

    senior tag

    válasz macilaci78 #54572 üzenetére

    Szia,

    Ha A1-ben van a cikkszám és soha nem tartalmazhat "|" és "#" (pipe és hashtag) jeleket, akkor B1-ben ez a képlet:
    =HAHIBA(CSERE(BAL($A1;SZÖVEG.KERES("|";HELYETTE($A1&"-";"-";"|";OSZLOPOK($B:B)))-1);1;HAHIBA(SZÖVEG.KERES("#";HELYETTE($A1;"-";"#";OSZLOPOK($B:B)-1));0);"");"")

    Ezt tudod oldalra másolni, ahányszor kell az újabb részekért.

    Excel 2010-ben teszteltem, jónak kell lennie 2016-ban is.

    A képlet működése:
    1) van benne két HELYETTE amivel a kötőjeleket cserélgetjük le egyszer pipe-ra, ez fogja jelezni a szöveg minket érdeklő végét, illetve hashtag-re ami pedig a szöveg elejét jelzi. A HELYETTE függvényben meg lehet mondani, hogyha egy karakter többször előfordul, akkor melyik előfordulását cseréljük le. Az OSZLOPOK($B : B) adja meg, hogy éppen melyiket kell cserélni.
    2) Ezek után már csak a két marker közötti szöveg kivágása van vissza. Előbb BAL-al levágjuk a végét (a pipe-jelig tartjuk meg a szöveget), majd a CSERE függvénnyel a hashtag-ig (ami a kezdetet jelöli) mindent semmire cserélünk.

    Másik megoldás pedig egy 2 soros Power Query lenne, de ez csak akkor ha sok adatod van.

    Illetve VBA-val a Split függvénnyel pár soros kódot is lehetne használni.

    üdv

  • Mutt

    senior tag

    válasz andreas49 #54568 üzenetére

    Szia,

    Remek.

    A LET-ben is célszerű 365 helyett 365.25-el osztani, majd szorozni is.
    A napokat pedig tehetjuk egy KEREKÍTÉS-be, ahogy gondolom te is tetted.
    ... napok;KEREKÍTÉS(eredmeny-evek)*365,25;0);...

    Illetve van egy másik megoldás is, ami a rejtett DÁTUMTÓLIG/DATEDIF függvényt használja. Ha van 2 dátumod (1900 utánból), akkor ezzel ki lehet számolni az eltelt évek és napok pontos számát.
    =LET(adat1;A1;
    adat2;A2;
    evek;DÁTUMTÓLIG(adat1;adat2;"Y");
    napok;DÁTUMTÓLIG(DÁTUM(ÉV(adat1)+evek;HÓNAP(adat1);NAP(adat1));adat2;"D");
    evek&" ev"&IF(napok;" "&napok&" nap";""))

    üdv

  • Mutt

    senior tag

    válasz andreas49 #54565 üzenetére

    Szia,

    Visszanézve a problémát a gond, hogy dátumokkal dolgozol, de az eredményed nem dátum, hanem a dátumok különbsége, így a formázás nem biztos hogy jó.

    1) Azonban kipróbálhatod cella vagy SZÖVEG függvényben ezt a formázást: "? ?/365"
    Az eredmény a fenti adatoknál ez lesz: "19 193/365", vagyis 19 év és 193 nap 365-ból.
    Ha zavar a végén a "/365" rész, akkor kell egy hosszabb képlet.

    2) LET-nél szerintem az a gond, hogy az első két sorban olyan változók vannak, amelyeknél a pontos cellákat kell megadnod ahol az adataid vannak. A #hiányzik arra utal, hogy olyan cellákra hivatkozik ahol nincs adat.

    Vagyis ha I2-ben van az 1999/01/01 és a másik dátumot L2 alapján találod meg, akkor így indul a képlet (aláhúzást tettem hogy feltünő legyen):
    =LET(adat1;I2;
    adat2;XKERES(L2;ALAP!$AA:$AA;ALAP!$AF:$AF); ....

    A LET-es képletet ha másolod, akkor a nem fixált cellahivatkozások (ahol nincs dollár jel) módosulnak, ezért célszerű a fixálni amit lehet.
    =LET(adat1;$I2;
    adat2;XKERES($L2;Alap!$AA:$AA;Alap!$AF:$AF);
    atalakit;LAMBDA(x;DÁTUM(BAL(x;4);KÖZÉP(x;5;2);JOBB(x;2)));
    eredmeny;(atalakit(adat1)-atalakit(adat2))/365;
    evek;INT(eredmeny);
    napok;(eredmeny-evek)*365;
    evek&" év"&HA(napok;" "&napok&" nap";""))

    Az újabb Excelben a fenti hosszú képletből csinálhatunk egy saját függvényt a LAMBDA segítségével, ez talán zavaró lehet csak akkor írom ide ha akarod és egyedül nem tudod megcsinálni.

    3) Ha nem akarsz LET-ezni akkor itt a csúnya képlet. 2x számolunk ki mindent, de először csak az éveket tartjuk meg (INT - egészrész), másodiknak pédig a tizedesrészt a napokhoz (MARADÉK). Itt ami még fontos, hogy a szökőévek miatt a 365-ös osztás nem elég pontos, 365.25-el 400 évig jók leszünk.
    =SZÖVEGÖSSZEFŰZÉS(" ";TRUE;INT((DÁTUM(BAL($I2;4);KÖZÉP($I2;5;2);JOBB($I2;2))-DÁTUM(BAL(XKERES(L2;Alap!AA:AA;Alap!AF:AF);4);KÖZÉP(XKERES(L2;Alap!AA:AA;Alap!AF:AF);5;2);JOBB(XKERES(L2;Alap!AA:AA;Alap!AF:AF);2)))/365.25);"év";KEREKÍTÉS(MARADÉK((DÁTUM(BAL($I2;4);KÖZÉP($I2;5;2);JOBB($I2;2))-DÁTUM(BAL(XKERES(L2;Alap!AA:AA;Alap!AF:AF);4);KÖZÉP(XKERES(L2;Alap!AA:AA;Alap!AF:AF);5;2);JOBB(XKERES(L2;Alap!AA:AA;Alap!AF:AF);2)))/365.25;1)*365.25;0);"nap")
    üdv

  • Mutt

    senior tag

    Hasznos opciót adtak a legújabb Excelhez, egyelőre csak a beta tesztelőknek érhető el.

    Mostantól a kimutatások/pivot automatikusan frissülhetnek amikor a forrásadatban változás van, ha ez engedélyezve van (alapból be van kapcsolva).
    Módosítani kimutatásonként a beállításoknál az Adatok fülön lehet megtenni, vagy alapértelmezetten a Fájl -> Adatok -> Alapértelmezett elrendezés szerkesztése -> Kimutatás beállításai alatt lehet.
    Sajna adatmodellt használó kimutatásokra nem érvényes ez a beállítás.

  • Mutt

    senior tag

    válasz Mutt #54559 üzenetére

    ChatGPT-val és Copilot-tal is rápróbálkoztam a problémára.
    Ez volt az inputom:
    i have an Excel table, in the first column of each row you can find the product name. the next two columns contain a quantity and an unit price, the other next 2 columns contain another quantity and unit price. there could be up-to 5 quantity and unit price pairs in the row, sometimes there is only 1 quantity and price pair. I would like to rearrange this data into a columnar format, where the first column contains the product name, the second a quantity and the third a price. where there are more quantity and unit price pairs they should be in a new row

    Mindkettő előbb Power Query-t, majd VBA-t javasolt. A megoldások teljesen azonosak, szövegezésben térnek csak el.

    1) PQ-esetén egy Unpivot/Elemiértékre bontás után egy oszlop felosztás és majd egy Pivot/Kinyerés. M-kódot nem adtak, de a lépéseket megadták. Itt talán abba tudnék belekötni, hogy igazán kezdőknek kicsivel több infót lehetett volna adni az oszlop felosztásnál. Azonban előny, hogy minden lépés a szerkeszőben egérkattintással elérhető.

    Az M-kód pedig ez lett:
    let
        Forrás = Excel.CurrentWorkbook(){[Name="Táblázat1"]}[Content],
        #"Többi oszlop elemi értékekre bontva" = Table.UnpivotOtherColumns(Forrás, {"Part Number"}, "Attribútum", "Érték"),
        #"Oszlop felosztása pozíció alapján" = Table.SplitColumn(#"Többi oszlop elemi értékekre bontva", "Attribútum", Splitter.SplitTextByPositions({0, 1}, false), {"Attribútum.1", "Attribútum.2"}),
        #"Oszlop elforgatva" = Table.Pivot(#"Oszlop felosztása pozíció alapján", List.Distinct(#"Oszlop felosztása pozíció alapján"[Attribútum.1]), "Attribútum.1", "Érték", List.Sum),
        #"Oszlopok eltávolítva" = Table.RemoveColumns(#"Oszlop elforgatva",{"Attribútum.2"})
    in
        #"Oszlopok eltávolítva"

    Előtte azért én is megcsináltam az M-kódomat, de én megint más logikát használtam.
    Én azt akartam, hogy a mennyiség és ár párok együtt maradjanak, de az újabb párok új sorokba kerüljenek. Ehhez a List.Split függvényt használom.

    Az én M-kódom ez lett:
    let
        Forrás = Excel.CurrentWorkbook(){[Name="Táblázat1"]}[Content],
        #"Sorok csoportosítva" = Table.Group(Forrás, {"Part Number"}, {{"Adatok", each List.Split(
        List.RemoveNulls(
            List.Skip(
                    Table.ToRows(_){0}
            , 1)
        ) , 2)}}),
        #"Kibontott Adatok" = Table.ExpandListColumn(#"Sorok csoportosítva", "Adatok"),
        #"Kinyert értékek" = Table.TransformColumns(#"Kibontott Adatok", {"Adatok", each Text.Combine(List.Transform(_, Text.From), ":"), type text}),
        #"Oszlop felosztása elválasztó alapján" = Table.SplitColumn(#"Kinyert értékek", "Adatok", Splitter.SplitTextByEachDelimiter({":"}, QuoteStyle.Csv, false), {"Scale Qty", "Scale Price"}),
        #"Típus módosítva1" = Table.TransformColumnTypes(#"Oszlop felosztása elválasztó alapján",{{"Scale Qty", Int64.Type}, {"Scale Price", type number}})
    in
        #"Típus módosítva1"

    Ennek a kódnak a lényegi része csak kézi bevitellel érhető el, mivel nincs olyan menűpont a PQ szerkesztőben ahol pár általam használt függvény elérhető lenne. Egymásba ágyazott függvények vannak, ugrás tábla - record - lista között; ez talán túlsok.

    Végeredmény: az AI jobban teljesített szerintem mint én. Tisztább, elemi lépésekből álló kódot adott. Míg én itt is túlbonyolítottam.

    2) VBA megoldás, a kód hiba nélkül le fut első alkalommal, de sajna egyik sem nézi hogy adott névvel létezik-e már munkalap, így másodjára elhasal. A ChatGPT kicsit hagyományosabb előbb létrehozza az összes változót, míg a Copilot feladatonként/taskonként megy végig (pl. adatokat tartalmazó munkalap "rögzítése" és változói, majd az eredményeket tartalmazó lap létrehozása és változói) és gyorsan előtte definiálja a változót és dolgozik is vele azonnal.

    Copilot kódja:
    Sub RearrangeData()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("Sheet1") ' Adjust sheet name as needed
        
        Dim lastRow As Long, i As Long, colOffset As Long
        Dim destRow As Long
        destRow = 2 ' Start from row 2 on output sheet
        Dim output As Worksheet
        Set output = ThisWorkbook.Sheets.Add
        output.Name = "Reformatted"
        output.Cells(1, 1).Value = "Product Name"
        output.Cells(1, 2).Value = "Quantity"
        output.Cells(1, 3).Value = "Price"
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        For i = 2 To lastRow
            For colOffset = 0 To 4 ' Up to 5 quantity-price pairs
                If ws.Cells(i, 2 + colOffset * 2).Value <> "" Then
                    output.Cells(destRow, 1).Value = ws.Cells(i, 1).Value
                    output.Cells(destRow, 2).Value = ws.Cells(i, 2 + colOffset * 2).Value
                    output.Cells(destRow, 3).Value = ws.Cells(i, 3 + colOffset * 2).Value
                    destRow = destRow + 1
                End If
            Next colOffset
        Next i
    End Sub

    Végeredmény: a kód műkődik, lehetne finomítani hibakezeléssel és with - end with párosokkal.

    3) A ChatGPT javasolt képletet is, a Copilot alapból nem (kérésre adott, What Excel formulas can I use for this task?).
    A képletek INDEX - MÓDUS/MOD - SOR/ROW kombinációjával operálnak, már a másodiktól fejfájást kaptam.

    A ChatGPT (első sor) és Copilot (második) ezt javasolja pl. a mennyiségek kikeresésére (új munkalapon B2 cellába kell írni az útmutató szerint).
    =IFERROR(INDEX(Sheet1!$B$2:$K$100, INT((ROW()-2)/5)+1, (MOD(ROW()-2,5)*2)+1), "")
    =        INDEX(Sheet1!$B$2:$K$100, INT((ROW()-1)/5)+1, MOD(ROW()-1,5)*2+1)

    ChatGPT előnye, hogy hibakezelést is végez. Illetve a végén a MOD(ROW ... részben van plusz zárójel, ami kell ha tényleg B2-ből indul a képlet. B1 esetén a Copilot eredménye helyes.

    Végeredmény: Ahogy látszik itt van már hibalehetőség, ami elég nehezen nyomozható ki. Itt a másik gond, hogy fixen 5 elemenként ugrik a képlet, de a mintánkban van olyan eset ahol nincs 5 adat-párunk, itt 0-kat kapunk amit majd kézzel szűrni kell.

    4) ChatGPT javasolt dinamikus képletet (LET - LAMBDA - MAP), Copilot nem (kérésre ő is adott: can you show me solution with dynamic array formulas (like LET - LAMBDA - MAP)? )

    Itt egyértelműen a ChatGPT győzőtt. Az első kódja egyből működött:

    =LET(
        data;A2:K7;
        products; INDEX(data;;1);
        pairs; DROP(data;;1);
        rows; ROWS(products);
        maxPairs; COLUMNS(pairs)/2;
        total; rows * maxPairs;
        rowIndex; SEQUENCE(total);
        prodRow; INDEX(products; INT((rowIndex - 1)/maxPairs) + 1);
        qCol; INDEX(pairs; INT((rowIndex - 1)/maxPairs) + 1; (MOD(rowIndex - 1; maxPairs) * 2) + 1);
        pCol; INDEX(pairs; INT((rowIndex - 1)/maxPairs) + 1; (MOD(rowIndex - 1; maxPairs) * 2) + 2);
        FILTER(HSTACK(prodRow; qCol; pCol); qCol <> "")
    )

    A Copilot olyan képletet adott, amiben eleve hiba van és a függvény paraméterek sincsenek a helyükön. Ez a sor tiszta katyvasz:
    HSTACK(IF(qty="";SEQUENCE(ROWS(qty);1;;#REF!);prod); qty; price);

    Kértem javítást, elmagyaráztam neki hogy rosszul gondolja a paraméter átadásokat, de 2 újabb rossz változat után feladtam a harcot vele.
    Ez az utolsó változata, ami nagyon hibás.
    =LET(
        data; A2:K7;
        products; INDEX(data;;1);
        details; DROP(data;;1);
        numRows; ROWS(data);
        qtyCols; CHOOSE({1;3;5;7;9};1;3;5;7;9);
        priceCols; CHOOSE({2;4;6;8;10};2;4;6;8;10);
        getRow; LAMBDA(r;
            LET(
                prod; INDEX(products; r);
                qtys; INDEX(details; r; qtyCols);
                prices; INDEX(details; r; priceCols);
                valid; FILTER(HSTACK(prod; qtys; prices); qtys<>"")
            )
        );
        final; MAP(SEQUENCE(numRows); getRow);
        VSTACK({"Product";"Quantity";"Price"}; final)
    )

    Végeredmény: ChatGPT a nyerő, mivel 1 db függvénnyel megoldotta amit én 2-vel értem el.

    Összeségében műkődik az AI segítség, ebben a feladatban tudott volna segíteni hiszen nem volt olyan bonyolult, talán legközelebb is hasznos lesz.

    üdv

  • Mutt

    senior tag

    válasz Dr. Mózes #54329 üzenetére

    Szia,

    Szokni kell a Power Pivot-ot. Ezek szerint csak az volt a gond, hogy a képlet nem volt teljes. Én többnyire el kezdem gépelni a függvény vagy tábla/mező nevet és kiválasztom a listából egy TAB-ot nyomva.

    Amire figyelni kell, hogy Power Pivot-ban a függvények csak angol nyelven vannak.
    Sok munkalap függvénynek megvan a DAX-os változata, de eltérően műkődnek.

    Nem tudom, hogy az UDEMY-s oktatás csak Power Pivotról (és DAX-ról) szól-e vagy más Power tool is említve van (főleg Power Query, esetleg Power Automate), de a DAX nehéz.

    üdv

  • Mutt

    senior tag

    válasz Dr. Mózes #54320 üzenetére

    Szia,

    Power Query-ben nincs DATEDIFF, ott a Duration függvények használhatóak. Ezekben DateTime és Date adattípusok használhatóak. pl. =Duration.Days([End]-[Start])

    A dátumok számként vannak tárolva, a regionális beállítás csak az év/hó/nap/óra/perc/másodperc helyes sorrendjének megadására szolgál. Ha sikeresen feldolgozta az értéket, akkor onnantól már számként műkődik.

    Azt írtad, hogy amerikai dátumokat dolgoztatsz fel magyar Excelben ott meg kellene adnod az USA beállítást, hogy helyes értékek legyenek.

    DATEDIFF (magyar Excelben DÁTUMTÓLIG) egy rejtett munkafüzet képlet, amelynél az első paraméter a kezdő, a második a végdátum. A harmadik pedig hogy milyen egységben (eltelt napok, hónapok, évek stb) jelenítse meg a két dátum különbségét. Itt annyi kavarás van, hogy magyar Excelben is az angol rövidítéseket ("d", "m", "y") kell használni.

    Power Pivot-ban a DATEDIFF már a DAX-ot használja. Ott a hibaüzeneted más hibára utal.
    Tippre az lehet a gond, hogy van olyan dátumod ami 1900 előtti.

    Excel munkalapon az ilyen dátumok szövegek. Ha ezt közvetlenül töltöd be Power Pivotba, akkor nem minden sorod lesz dátum típus amire kiakad a DATEDIFF.
    Egy ISNUMBER([dátum oszlopod]) megadja hol van hiba.

    Power Pivotba Power Query-vel célszerű adatokat betölteni, ilyenkor már nem él az 1 millió soros limit (ami egy munkalapon lehet). Dátumoknál több évszázadot is vissza lehet ott már menni gond nélkül. Power Pivot/Power Query Krisztus utáni 100. évtől felfelé műkődik (persze 1582 előtt sok értelme nincs).

    A másik tippem az lehet, hogy a [YEAR] és a [Mai nap] közötti éveket akarod, csakhogy a YEAR nekem szövegnek tűnik (balra van rendezve) és mégha szám lenne akkor se lenne jó, több dolog miatt. Ha ez kell akkor a számított oszlop, csak ennyi =YEAR([Mai nap])-[YEAR] 

    üdv

  • Mutt

    senior tag

    válasz Silious #54262 üzenetére

    Szia,

    Excel 2016-tól létezik a KÉPLETSZÖVEG (FORMULATEXT) függvény illetve még használható a Képletek -> Képlet vizsgálat -> Képletek mutatása (Alt és pont a shortcut).

    Üdv

  • Mutt

    senior tag

    válasz Geryson #54257 üzenetére

    Szia,

    MS365-ben van neked CSOPORTOSÍTÁS.ALAP.SZERINT (GROUPBY) függvényed is amit kipróbálhatsz.

    T1-ben a képletnek próbáld ki ezt: =CSOPORTOSÍTÁS.ALAP.SZERINT(F:F;K:K;SZUM;3)

    üdv

  • Mutt

    senior tag

    válasz -=MrLF=- #54254 üzenetére

    Szia,

    Ez a táblázat miatt van, amikor a lapon lévő adatok csoportosítva vannak. Az egyik adatot tartalmazó cellában legyél, majd a Beszurás menüben a Táblázatot válaszd.

    Excel 2003-tól létezik, a régi fájlformátum azonban nem teljesen támogatja.

    Sok előnye van.

    Üdv

  • Mutt

    senior tag

    válasz föccer #54237 üzenetére

    Szia,

    Nem kell két dictionary, hogy tudd melyik receptből mennyi van. A kulcs (key), mellett van az item tulajdonság is. A receptDict teljesen felesleges.

        ' Receptszámok összegyűjtése és számlálása
      Set receptCount = CreateObject("Scripting.Dictionary")
        osszesMinta = 0
        
        For i = 2 To lastRow
            If alapadatok.Cells(i, 1).Value = valasztottUzem Then
                receptSzam = alapadatok.Cells(i, 2).Value
                osszesMinta = osszesMinta + 1
              If Not receptCount.Exists(receptSzam) Then
                   receptCount.Add receptSzam, 1
                Else
                   receptCount(receptSzam) = receptCount(receptSzam) + 1
                End If
            End If
        Next i

    üdv

  • Mutt

    senior tag

    Sziasztok,

    A Microsoft 1 évvel ezelőtt egy új függvényt mutatott be, amellyel kimutatást (pivot) lehet készíteni. Magyarul KIMUTATÁS.ALAP.SZERINT (angolul PIVOTBY) a függvény neve.

    Nálam a kimutatás gyakran van használva (pár éve áttértem Power Pivot-ra a normál helyett), de eddig még nem próbáltam ki az új függvényt.

    Tegnap egy kicsit játszottam vele és ezen tapasztalatot akarom megosztani veletek egy 130 ezer és 77 oszlopot tartalmazó adatosoron, ez kicsivel több min 10 millió cella, ez egy 37 MB-os XLSX fájlban van (aki teheti az sok adat esetén használjon inkább XLSB formátumot, mert ugyanez csak 10 MB, hátránya max annyi hogy lehet hogy más programok/rendszerek nem támogatják ezt a formátumot, illetve ha megsérül a fájl, akkor nagyobb az esély adatvesztésre).

    Az új függvény (továbbiakban PIVOTBY) előnyei:
    1) automatikusan frissül az eredmény ha az adatsoron változás van,
    Itt nem vettem észre lassulást, gyorsan megkapjuk az eredményt (5 éves laptop 16 GB ram és i7-9850H CPU, Windows és Office is 64 bites).
    2) Több összesítő (aggregátor) függvénye van mint egy standard Pivotnak, vannak olyanok amiket csak Power Pivot-tal lehetett eddig elérni (pl. szöveg összefűzés) és LAMBDA függvényt is tudunk írni.
    3) nincs pivot cache (kimutatás forrásadatok/gyorsítótár) ami növeli a fájl méretét.
    A 37 MB-os fájl normál Pivottal 46 MB lett, Power Pivottal 47 MB, mig PIVOTBY-al maradt 37 MB.

    Szerintem ezzel végére is értem az előnyöknek, a hátrány viszont bőven van.
    1) A függvénynek 11 paramétere van, ebből 4 kötelező, de a valóságban kb. még 3-at (összegek/részösszegek mutatása, sorbarendezés, szűrő) célszerű használni.
    Egy alap pivot is túl bonyolult (a sortörésekkel próbáltam az olvashatóságot segíteni).

    2) Őrült képletek kellenek egyes esetekben , amiket a pivotban simán el tudtunk érni.
    pl. nem csak összeget, hanem átlagot is akarunk számolni ugyanarra a mezőre.

    3) Nincs formázás, így nekünk kell mindent csinálni. Ami azért kihívás, mert ez egy spill/terülő képlet, mindig annyi sort/oszlopot fog elfoglalni amire szükség van. Ha azt akarjuk hogy a totál sor/oszlop értékek máshogy nézzenek ki, akkor feltételes formázásokat kell használnunk. Ez sok idő tud lenni.

    4) Szűrő/szeletelő használata sem olyan egyszerű. (A mintában a BYROW sor a G1 cellában lévő év szerinti szűrést végzi el.)

    Egy kis összegzés:
    Egyszerűbb dolgokra lehet használni a PIVOTBY-t, de jelenlegi formájában még távol van egy normál PIVOT-tól. Vállalati környezetben én még kerülném/kerülöm.

    üdv

  • Mutt

    senior tag

    válasz Pakliman #54199 üzenetére

    Szia,

    Két megoldást tudok javasolni:
    1. A Click eseményeket beteszed egy saját subroutinba és azonnal meghívod ahogy a vezérlőt (választó gombot) létrehoztad.

    Sub RunClick(obj As Object)
        Dim frm As MSForms.UserForm
        
        Set frm = obj.Parent
        
        With frm
            Select Case obj.Name
                Case "opbXYZ1"
                    .Label1.Caption = obj.Name & ": " & obj.Value
                Case "opbXYZ2"
                    frm.BackColor = 13882323
                    MsgBox "hello world"
                Case "opbXYZ3"
                    frm.BackColor = 14481663
            End Select
            
        End With
    End Sub

    A Select Case-el csak bemutattam hogy eltérő ágakat tudsz létrehozni.

    2. Megvárod, hogy a vezérlő létrejöjjön és csak utánna változtatod meg az értékét.
    A kódodon csak minimálisan változtattam (tartalmazza az 1-es lehetőséget is), a végén van a 2-es opció. Ott véletlenszerűen megváltoztatom az egyik vezérlő értékét, ekkor már le fog futni a Change esemény-

    Private Sub CommandButton1_Click()
        Dim ctl_OpB As MSForms.OptionButton
        Dim i As Long
        
        ReDim opbArray(1 To 3)
        
        For i = 1 To 3
          Set ctl_OpB = Me.Controls.Add("Forms.OptionButton.1", "opbXYZ" & i, False)
          
          With ctl_OpB
              .Left = 100
              .Top = 150 + (i * 20)
              .Width = 100
              .Caption = "opb_" & CStr(i)
              .Visible = True
          End With
      
        'egyik megoldás, hogy létrehozáskor elindítod a saját kódod
          Call RunClick(ctl_OpB)
      
          Set opbArray(i).OptionButton = ctl_OpB
        Next i
        Set ctl_OpB = Nothing
        
        'másik megoldás, hogy létrehozás után változtatod meg az értékét
        Dim r As Double
        Randomize
        r = Int(Rnd * 3) + 1
        
        opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.Value
    End Sub

    A class module-ban csak ennyi van:

    Public WithEvents OptionButton As MSForms.OptionButton
    Private Sub OptionButton_Change()
        Dim frm As MSForms.UserForm
        
        Set frm = OptionButton.Parent
        
        With frm
            .Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.Value
        End With
    End Sub

    Próbáld ki.

    üdv

  • Mutt

    senior tag

    válasz Fferi50 #54172 üzenetére

    Sziasztok,

    Én nem szoktam használni, de lehet tartományokat jelszavaztatni.
    Mark ebben a videóban bemutatja, kb. 2:40-től kezdődik. Ezzel lehet eltérő "jogosultságokat" létrehozni. A videó végén azért elhangzik, hogy az Excel jelszavas védelmére építkezni nem szabad.

    üdv

  • Mutt

    senior tag

    válasz #54157 üzenetére

    Szia,

    Szerintem itt fontos tisztázni azt, hogy amit a Personal.xlsb "Workbook_Open" eseményébe teszel, akkor az csak egyszer fog lefutni, amikor az Excel indulásakor az egyéni makrófüzet a háttérben megnyílik.

    Azt akarod, hogy minden Excel fájl megnyitásakor legyen vmi ellenőrzés és azt ahogy tetted egy Class Module-al lehet megtenni.

    Próbáld ki:
    1. Personal.xlsb-ben legyen egy class module, a neve fontos clsApp legyen (ha más akkor a másik modulban kell módosítani). A tartalma pedig ez:
    Public WithEvents AppEvents As Application
    Private Sub AppEvents_WorkbookOpen(ByVal wb As Excel.Workbook)
      Call OpenEvent(wb)
    End Sub
    Private Sub AppEvents_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean)
        Call BeforeClose(wb, Cancel)
    End Sub

    Ahogy látható két workbook eventhez (open és a beforeclose) rendeljük a saját kódunkat.

    2. A Personal.xlsb-ben legyen egy normál modul amibe az alábbi kódok kellenek:
    Dim AppObject As New clsApp

    Sub Init()
    'ezt az egyéni makrófüzet Open eseményében fogjuk meghívni
        Set AppObject.AppEvents = Application
    End Sub

    Sub OpenEvent(wb As Workbook)
        'ez az egyéni Workbook_Open eseményünk ahova tesszük a saját kódot
        
      'a megnyitott fájl ellenőrzése (a példában ha M-el kezdődik a neve)
        If wb.Name Like "M*" Then
            'hozzáadjuk a kedvenc makrónkat az eszköztárhoz
            Call AddNewMenuItem
        End If

    End Sub

    3. A Personal.xlsb ThisWorkbook eseményeibe pedig tegyük ezt be:
    Private Sub Workbook_Open()
        Call Init
    End Sub

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Call DeleteControls(True)
    End Sub

    Vagyis amikor elindítjuk az Excel-t, akkor az "Init" kódban megadott sor lefut, ami annyit tesz, hogy egy objektumot hoz létre ami tartalmazza az Excelben megnyitott fájlokat.
    A másik pedig ha bezártuk az Excel-t teljesen, akkor előtte töröljük a saját menűt.

    4. Az egyéni parancs eszköztárra (QAT) kihelyezése.
    Gyorselérési eszköztárra nem raktam még kóddal ki gombot, de a https://jkp-ads.com/rdb/win/s2/win004.htm oldalon találtam egy hasznos add-int, aminek a kódja szerint ez könnyen megy, de nekem nem jött össze. Az addin ettől még szuper, ha van sok saját makród, akkor ezzel tudod rendszerezni és elérni QAT-ról.

    Ami ment az egy új menű az eszköztáron. Én régen ezt használtam, MS365-ben most is megy.

    Szóval van a normál modulban még 2 program, ami felteszi illetve leveszi a saját makródat.

    Ami felteszi az így néz ki:
    Private Sub AddNewMenuItem()
        
        'töröljük az esetleg létező saját menűt
        DeleteControls
        Dim CmdBar As CommandBar
        Dim CmdBarMenuItem As CommandBarControl
        Set CmdBar = Application.CommandBars("Worksheet Menu Bar")
        'Add a new menu item
        Set CmdBarMenuItem = CmdBar.Controls(CmdBar.Controls.Count - 1).Controls.Add
        
        'Set the properties for the new control
        With CmdBarMenuItem
            .Caption = "Saját Makró1"
            .OnAction = "'" & ThisWorkbook.Name & "'!Kedvencem"
            .Tag = C_TAG
        End With
    End Sub

    Ehhez van egy C_TAG állandó a modul elején definiálva:
    Private Const C_TAG = "Makrocska"   'C_TAG legyen egyedi név

    Illetve fent a kódban az OnAction végén van a makró neve (esetemben "Kedvencem"),
    ami ennyit tartalmaz csak:
    Sub Kedvencem()
        MsgBox "Palacsinta", vbOKOnly
    End Sub

    Ami leveszi az pedig ez:
    Sub DeleteControls(Optional tuti As Boolean = False)
        Dim Ctrl As CommandBarControl
        On Error Resume Next
        Set Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)
        Do Until Ctrl Is Nothing
            Ctrl.Delete
            Set Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)
        Loop
    End Sub

    A fenti kódokkal el tudtam érni, amit szerettél volna:
    1. Akár jelszavas fájlok esetén is (csak a megfelelő jelszó ismeretében) fut le az open esemény...
    2. ami a kritériumoknak megfelelően (a példámban csak az nézem hogy a fájl neve M-el kezdődik-e vagy sem) kirak egy makrót az eszköztárra...
    3. az Excel bezárásakor pedig leveszi a dolgokat.

    Próbáld ki, ha még kell.
    A kódok alapja a Walkenbach VBA könyve (17-es fejezet). Régi (az újabbak sem hinném hogy rosszabbak), de még mindig nagyon jó. Én csak ajánlani tudom angolul tudóknak.

    Két fontos dolog:
    1) Saját makrók esetén fontos tudni jól használni a Thisworkbook és Activeworkbook-ot.
    2) Én inkább fixen kiraknám a makrót a QAT-ra és a makrót készíteném fel arra, hogy ha a fájl nem felel meg a feltételeknek akkor ne csináljon vele semmit.

    üdv

  • Mutt

    senior tag

    válasz föccer #54221 üzenetére

    Szia,

    Átmenetileg ki is lehet kapcsolni, hogy Enter után másik cellába lépjen.
    Pipa ki "Az enter lenyomására ..." opciónál.

  • Mutt

    senior tag

    válasz #54139 üzenetére

    Szia,

    ...azt kéne elérni, hogy a visible sorok legyenek szép zebra mintásak...

    Látom közben VBA-n indultál el, ahol használod a SUBTOTAL (RÉSZÖSSZEG) függvényt ami a megoldás kulcsa.

    Itt van az én VBA és Excel tábla nélküli, feltételes formázást használó megoldásom:

    A képlet pedig: =MOD(SUBTOTAL(3;$A$5:$A5);2)
    Magyar Exelben: =MARADÉK(RÉSZÖSSZEG(3;$A$5:$A5);2)

    A lényeg, hogy a SUBTOTAL-ban egy alulról nyitott tartomány (csak a kezdő cella van rögzítve, a vége növekszik, ahogy másolódik a képlet) van megadva.

    üdv

  • Mutt

    senior tag

    válasz aviator #54131 üzenetére

    Szia,

    Tudnál egy képet mutatni a treeviewról?
    Csak megjelenítésre van vagy onnan kiválasztanak?

    Üdv

  • Mutt

    senior tag

    válasz jackal79 #54126 üzenetére

    Szia,

    Az én javaslatomban a szerszámok elé beszúrtam egy oszlopot, ahova fel lehet sorolni a karbantartási napok nevét (pl. K,P)


    A C2-ben a képlet a mintámban (vigyázz a vegyes hivatkozásokra, egyszer az első sort kell rögzíteni, másszor pedig az első oszlopot): =HA(SZÁM(SZÖVEG.KERES(SZÖVEG(C$1;"nnn");$A2));"X";"")

    A képlet az első sorban lévő dátumból a SZÖVEG függvénnyel a nap nevét meghatározza, majd megkeresi hogy az első oszlopban szerepel-e a név. Találat esetén jön az X.

    üdv

  • Mutt

    senior tag

    válasz meke11 #54118 üzenetére

    Szia,

    A videóban a trendvonal együtthatóit kézzel rögzítik, de lehet képlettel számoltatni.
    A LIN.ILL (angolul LINEST) függvényt lehet használni. Alapból lineáris illesztést végez, de meg lehet adni neki hogy másikkal számoljon (esetedben logaritmikus). Ha megvannak az együtthatók, akkor már csak képletbe kell tenni őket.

    A képen angol Excelben látod a dolgokat.

    Az E2-ben van a meredekség A képlete magyarul:
    =INDEX(LIN.ILL(B2:B10;LN(A2:A10));1)
    A metszéspont képlete (E3)
    =INDEX(LIN.ILL(B2:B10;LN(A2:A10));2)

    Ezek tömbképletek, Excel 2021 előtt Ctrl-Shift-Enter (CSE) kell hozzájuk.
    Ezek után az E5/F5/G5-be tettem az értékekeket, amikhez keressük a szemcseméretet.
    Ennek a képlete: =KITEVŐ((E5-$E$3)/$E$2)

    Ha Excel 2024/MS365-ön vagy, akkor a fentiek helyett az egészet egy LET/LAMBDA függvénybe lehet elhelyezni (CSE sem kell).
    E7-ben a mindent helyettesítő képlet:
    =LET(
    egyutthatok;LIN.ILL($B$2:$B$10;LN($A$2:$A$10));
    y;E5;
    KITEVŐ((y-INDEX(egyutthatok;2))/INDEX(egyutthatok;1))
    )

    üdv

  • Mutt

    senior tag

    válasz Lajos.P #54102 üzenetére

    Szia,

    Nem írtál verzió számot, de a korábban kapott pont lecserélése helyett ítt egy saját függvény, amelyet Excel2024 vagy MS365-ben a névkezelőben tudsz létrehozni.

    Névnek SZÁMOK -at adtam meg.
    A képlet pedig: =LAMBDA(r;SZÖVEGÖSSZEFŰZÉS("";IGAZ;HA(SZÁM(SZÖVEG.KERES(KÖZÉP(r;SORSZÁMLISTA(HOSSZ(r));1);"0123456789"));KÖZÉP(r;SORSZÁMLISTA(HOSSZ(r));1);""))*1)

    üdv

  • Mutt

    senior tag

    válasz lappy #54094 üzenetére

    Szia,


    1) Legyen táblázatban az adat (példámban bal fent), mert ekkor tudsz szeletelőket (slicers) használni.
    2) Ezek után a SZŰRŐ (FILTER) függvényt lehet használni a RÉSZÖSSZEG (SUBTOTAL)-al.
    A részösszeg olyan függvény, amely képes a rejtett sorokat (szűréskor ez történik) megkülönböztetni a többitől.

    A képlet az én példámban: =SZŰRŐ(Táblázat1[[Név]:[Kor]];BYROW(Táblázat1[Név];LAMBDA(sor;RÉSZÖSSZEG(3;sor)));"Nincs adat")

    Remélem ez alapján el tudsz indulni.

    üdv

  • Mutt

    senior tag

    válasz Fferi50 #54086 üzenetére

    ...A sheet 1en ott van a H oszlopban (H2 - H607 ez mar ki van toltve minden szobahoz) a szoba tipus, az I oszlopban (I2 - I607 ha a szoba el van adva) pedig a heti ar. ....
    Mondjuk eladunk egy standard bronz szobat, akkor beirjuk az I oszlopba az arat sheet 1en...

    Én ebből inkább egy DARABHATÖBB/COUNTIFS-re gondolok.
    =DARABHATÖBB(MasterSheet!$H:$H;$B17;MasterSheet!$I:$I;">0")

  • Mutt

    senior tag

    válasz karlkani #54071 üzenetére

    Szia,

    Próbáld meg így:
    ActiveSheet.Shapes.Item(1).Top = Rows(user).Top

    Azonban ha van fejléced, akkor én inkább javsolnám, hogy
    1. Rögzítsd a fejlécet
    2. Helyezd el a fejlécsorban a gombot.

    üdv

  • Mutt

    senior tag

    válasz Wolfskin #54060 üzenetére

    Szia,

    Nagyon régi Exceled van, ezért a legjobb megoldás ott a Kimutatás (angolul Pivot) amit a Beszúrás menű alatt lehet megtalálni. Érdemes Youtube-on rákeresni (egy példa), hogyan lehet készíteni/használni.

    Mivel szeretnél ismétlődésmentes értéket ezért a régi Excel-ben az adatsorodhoz kellene egy új segédoszlopot adni.

    Az én mintám ilyen:

    Ezek után az adatokon állva a Beszúrás -> Kimutatás opciót használva a BRAND-et húzd a Sorok részbe az SKU-t pedig az Értékek-be. Ha minden jól megy, akkor ehhez hasonló lesz az eredményed:

    A kimutatás NEM frissül magától, ha a mögöttes adatsorban változás van, akkor frissíteni kell. Legegyszerűbb, ha a kimutatásba belekattintasz és jobb egérgombbal a Frissítést választod.

    A KIMUTATÁSADATOT.VESZ függvényt nem javasolom, mert csak már létező kimutatás adatait tudja csak kiolvasni. Neked nem erre van szükséged.

    Ha ténlyeg függvényekkel akarod megoldani a problémát, akkor:
    1. kell egy lista ami a BRAND-eket tartalmazza ismétlődés nélkül. Ez Excel 2021 előtt tömb-képlettel lehet elérni. pl. így
    2. Ezek után a DARABTELI-vel lehet megszámolni, hogy az eredeti adatsorban hányszor szerepel az 1-es lépésben kilistázott márkákat.

    üdv

  • Mutt

    senior tag

    válasz HollyBoni #54048 üzenetére

    Szia,

    1) Jogosultságok hiányá lehet: Tudsz arról a gépről a mappába másolni?
    Ha igen, akkor nevezd át a fájlt. Próbáld a problémás gépről megnyitni.
    2) Kapcsold ki a viruskeresőt a gépen.
    3) A próblémás gépen indítsd csökkentett módban az Excelt. Ha ekkor gond nélkül meg tudod nyitni/menteni a fájlt akkor egy addon okozza a gondot. Office telepítés módosítása és helyreállítás vagy letiltod az összes addont (Fájl-Beállítások-Bővitmények alatt) és egyesével aktiválod a szükségeseket amíg elő nem jön a hiba.
    4) Adatvédelmi központban vedd fel a mappát megbízható helynek. Illetve itt nézd meg a fájlblokkolás beállítást (nekem mentésnél nincs pipa sehol, megnyitásnál pár van)

    Üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #54042 üzenetére

    Szia,

    Erre a részre hadd válaszoljak:
    "2. szvsz meg nem az a megoldás, hogy elkezdem "kiherélni" a régi Excel-eket és a régi, gyakran használt, és hasznos függvényeket meg eltüntetem.."

    Az Excelben máig használhatóak 1995 előtti dolgok, aka. Excel4 makrók vagy ott van a híres elrejtett DÁTUMTÓLIG/DATEDIFF.
    Nem tűnnek el dolgok, ha az Excel elfogadja a képletet, akkor az használható marad évtizedekkel később is.
    Az általam javasolt magyar változat bemásolható az általad használt Excelbe de hibás, mivel ott más a függvény neve, de ha a helyes, natív függvényt használod a képletben akkor onnantól bármelyik más támogatott Excelben megnyitva (DARABHA / DARABTELI esetén Excel 2003-tól indulva) a fájlt menni fog. A szerkesztőlécen lehet hogy változni fog a függvény neve verziónként de teljesíteni fogja a dolgát.

    1-2 éve már talán leírtam, hogy szerintem nem jó irányba megy az Excel. Függvények tucatjai kerülnek bele, van aminek talán értelme sincs (pl. MAP). Office Scripts éppen 6 éves múlt, el is felejtettem ahogy mindenki más. Python integrálva, de inkább ne lenne.

    üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #54031 üzenetére

    Szia,

    Ezek szerint nálad telepíteni kell ezt a függvényt, hadd segítsek benne.
    A MS365/Excel2024-ben a Névkezelőben (Képletek menű) a Névnek add meg hogy DARABTELI.
    Hivatkozásnak pedig: =LAMBDA(tartomány;kritérium;DARABHA(tartomány;kritérium))


    Innentől már neked is műkődni fog.

    Természetesen hibáztam, mert talán Excel 2016-tól (ekkor jöttek be a *HATÖBB függvények és 2010-ben még tuti DARABTELI) már DARABHA a függvény magyar neve.
    Sajnos minden általam használt fordító oldal a régi nevet tartotta meg, elkezdtem írogatni nekik, hogy javítsák a hibát.

    Amit még elfelejtettem írni, hogy ez tömbképlet. Excel 2021 előtti felhasználóknak Ctrl-Shift-Enter-t (CSE) kell használni.

    üdv

  • Mutt

    senior tag

    válasz royal828 #54010 üzenetére

    Szia és Mézes üdvözlet Merqreenek is,

    Szerintem elavult az MS Project, egy project csapatmunkából és kommunikációból áll. Ezt évekkel ezelőtt nem tudta, ha azóta igen akkor elnézést az egész kommentért.

    Nálunk a Smartsheet.com megy, havi 8 dollár/szerkesztő nem vihet csődbe egy céget. Szerintem könnyen kezelhető, mivel online ezért csapatmunkára kiváló. Lehet feladatok kiosztani, csatolmányokat feltölteni stb.

    A Monday.com nagyon reklámozza magát és van teljesen ingyenes változata. Nem használtam így nem tudok mit mondani róla.

    Üdv

  • Mutt

    senior tag

    válasz ny.janos #53684 üzenetére

    Szia,

    Megnéztem a fájlt és zavaró, hogy a sorrend változik egyszerű műveletek után, de ez nem hiba, hanem a rendszer műkődésének "terméke". Már 2018-ban is panaszkodtak erre ahogy most keresgéltem és azóta nincs változás. Ahogy korábban beszéltünk róla, ha fontos a sorrend, akkor az utolsó lépés(ek)ben kell elintézni.

    Az okosok szerint ez azért történhet meg, mert az optimalizáció jegyében a Power Query nem mindig abban a sorrendben hajtja végre az átalakításokat mint ahogy a lépések/a felhasználói logika adja.

    A legtöbben a Table.Buffer-t (ami a memóriába teszi az adott lépés eredményét, ezzel felgyorsítva az elérését az adatoknak később) javasolják. A puffereléshez elő kell állítani a kész eredményt, nem fog tudni menetközben kavarni.

    A mintádban az utolsó kibontás előtti lépés került memóriába és tényleg utána nem változik a sorrend. Ha hamarabb teszem RAMba az adatokat, akkor már megint van kavarás.

    Még egy dolgot módosítottam, hogy te is szokd/gyakorold a tábla kibontást másik módon. A 13. lépésed a "Mérkőzés indexszámmal" táblák kibontása/egyesítése. Ezt a GUI-ról könnyen el lehet végezni, de 2 problémája van:
    - fixen rögzíti az oszlop neveket amikkel dolgozni fog és
    - elveszíted az oszlopok adattítpusát
    Láthatod hogy egyik korábbi oszlopnak sincsen típusa.

    Helyette lehet használni a Table.Combine-t.
    A teljes M-kód:

    let
        Forrás = Excel.CurrentWorkbook(){[Name="Eredmenyek"]}[Content],
        #"Típus módosítva" = Table.TransformColumnTypes(Forrás,{{"Forduló száma", Int64.Type}, {"Versenyző sorszám", Int64.Type}, {"Mérkőzés száma", Int64.Type}, {"Hazai/vendég", type text}, {"Versenyző", type text}, {"Csapat", type text}, {"Teli 1-25", Int64.Type}, {"Össz 1-50", Int64.Type}, {"Teli 51-75", Int64.Type}, {"Össz 51-100", Int64.Type}}),
        #"Sorok szűrve" = Table.SelectRows(#"Típus módosítva", each ([#"Össz 51-100"] <> null)),
        #"Érték felülírva" = Table.ReplaceValue(#"Sorok szűrve",null,0,Replacer.ReplaceValue,{"Teli 1-25", "Össz 1-50", "Teli 51-75", "Össz 51-100"}),
        #"Összeadás beszúrva" = Table.AddColumn(#"Érték felülírva", "Teli", each [#"Teli 1-25"] + [#"Teli 51-75"], Int64.Type),
        #"Összeadás beszúrva1" = Table.AddColumn(#"Összeadás beszúrva", "Összesen", each [#"Össz 1-50"] + [#"Össz 51-100"], Int64.Type),
        #"Kivonás eredménye beszúrva" = Table.AddColumn(#"Összeadás beszúrva1", "Tarolás", each [Összesen] - [Teli], Int64.Type),
        #"Oszlopok eltávolítva" = Table.RemoveColumns(#"Kivonás eredménye beszúrva",{"Teli 1-25", "Össz 1-50", "Teli 51-75", "Össz 51-100", "Teli"}),
        #"Sorok rendezve" = Table.Sort(#"Oszlopok eltávolítva",{{"Forduló száma", Order.Ascending}, {"Mérkőzés száma", Order.Ascending}, {"Összesen", Order.Descending}, {"Tarolás", Order.Descending}}),
        #"Sorok csoportosítva" = Table.Group(#"Sorok rendezve", {"Forduló száma", "Mérkőzés száma"}, {{"Mérkőzés", each _, type table [Forduló száma=number, Versenyző sorszám=number, Mérkőzés száma=number, #"Hazai/vendég"=text, Versenyző=text, Csapat=text, #"Teli 1-25"=nullable number, #"Össz 1-50"=nullable number, #"Teli 51-75"=nullable number, #"Össz 51-100"=number, Csere=any]}}),
        #"Egyéni oszlop hozzáadva" = Table.AddColumn(#"Sorok csoportosítva", "Mérkőzés indexszámmal", each Table.AddIndexColumn([Mérkőzés], "Index", 1, 1, Int64.Type)),
        #"Többi oszlop eltávolítva" = Table.SelectColumns(#"Egyéni oszlop hozzáadva",{"Mérkőzés indexszámmal"}),
        Combine = Table.Combine(#"Többi oszlop eltávolítva"[Mérkőzés indexszámmal]),
        #"Feltételes oszlop hozzáadva" = Table.AddColumn(Combine, "Egyéni pont", each if [Index] <= 4 then 1 else 0),
        #"Egyesített lekérdezések" = Table.NestedJoin(#"Feltételes oszlop hozzáadva", {"Versenyző sorszám", "Forduló száma", "Mérkőzés száma"}, Manualis_info, {"Versenyző sorszám", "Forduló száma", "Mérkőzés száma"}, "Manualis_info", JoinKind.LeftOuter),
        Buffer = Table.Buffer(#"Egyesített lekérdezések"),
        #"Kibontott Manualis_info" = Table.ExpandTableColumn(Buffer, "Manualis_info", {"Manuális információ"}, {"Manuális információ"})
    in
        #"Kibontott Manualis_info"

    üdv

  • Mutt

    senior tag

    Kb. 2 hónapja jelentették be, nálam az insider változatban a héten jelent meg, hogy VBA nélkül is ki lehessen emelni az aktív sort/oszlopot. A Nézet menűben Fókuszcella nevet kell keresni. Talán hamarosan több MS365 változatban is meg fog jelenni.

  • Mutt

    senior tag

    válasz andreas49 #53636 üzenetére

    Szia,

    Valószínű hosszú kötőjelek vannak a napok között.
    A kódban a 26-28-as sorokat erre cserélve tudjuk kezelni őket. A többi rész változatlan.

    Case "0" To "9", "-", Chr(150)  'hosszú kötõjel kezelése
    If karakter = Chr(150) Then karakter = "-"
        nap = nap & karakter

  • Mutt

    senior tag

    válasz andreas49 #53631 üzenetére

    Szia,

    Az aktuális munkalapon próbálja meg átalakítani a dátumokat a kijelölt cellákban.

    Sub DatumAlakit()
        Dim adatok As Range, adat As Range
        Dim lapnev As String
        Dim honap As String, nap As String, eredmeny As String
        Dim magyarHonap, angolHonap
        Dim c As Long, karakter As String * 1
            
        angolHonap = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
        magyarHonap = Array("jan#", "feb#", "már#", "ápr#", "máj#", "jún#", "jûl#", "aug#", "szept#", "okt#", "nov#", "dec#")
        lapnev = Trim(ActiveSheet.Name)
        Set adatok = Intersect(ActiveSheet.UsedRange, Selection)
        
        For Each adat In adatok
            nap = ""
            honap = ""
            eredmeny = adat
            
            'csak akkor fusson le ha még nincs évszám
            If InStr(1, adat, lapnev) = 0 Then
                
                'karakternként végigmegyünk a cella tartalmán
                For c = 1 To Len(adat)
                    'ha szám van akkor a nap tömbbe tesszük, ha betû a hónap tömbbe
                    karakter = Mid(adat, c, 1)
                    Select Case UCase(karakter)
                        Case "0" To "9", "-"
                            nap = nap & karakter
                        Case "A" To "Z"
                            honap = honap & karakter
                    End Select
                Next c
                
            End If
            
            'angol hónap nevek magyarra cserélése
            For c = 0 To UBound(angolHonap)
                honap = Replace(honap, angolHonap(c), magyarHonap(c), Compare:=vbTextCompare)
            Next c
            
            'végeredmény összerakása
            Dim honapok, napok
            If Len(honap) > 0 And Len(nap) > 0 Then
            
                honapok = Split(Left(honap, Len(honap) - 1), "#")
                'ha van hónap akkor használjuk
                If IsArray(honapok) Then
                
                    If UBound(honapok) > 0 Then
                        'ha több hónap van, akkor több nap is kell
                        napok = Split(nap, "-")
                    
                        eredmeny = lapnev & ". " & Replace(honapok(0), "#", "") & ". " & napok(0) & " - " _
                                                 & Replace(honapok(1), "#", "") & ". " & napok(1)
                    
                    Else
                        eredmeny = lapnev & ". " & Replace(honapok(0), "#", "") & ". " & nap
                    End If
                
                End If
            End If
            
            'adat.Offset(, 1) = eredmeny        'teszteléshez ezt a sort aktiváld, a következõd kommenteld be
            adat = eredmeny
        Next adat
    End Sub

    Nem tudom, hogy mennyire megy a te adatsorodon. Érdemes előbb egy teszt fájlban kipróbálni.

    üdv

  • Mutt

    senior tag

    válasz ny.janos #53610 üzenetére

    Szia,

    BCTI videója hasznos volt nekem is, a lényegét tudtam eddig Marco Russo-tól, de itt jobban ki lett fejtve.

    ...Van egyáltalán összefüggés az adatmodellbe töltés és a sorbarendezés között?..
    Van. Amikor adatmodell-be teszük az adatokat, akkor egyben a hatákonyság növelése miatt tömörítve lesznek. Az oszlopokat külön-külön tárolja (tabular format) és tömöríti a Vertipaq engine.
    A videóban a tömörítés típusait is elmagyarázzák, de a lényeg az hogy az ismétlődések csak egyszer kerülnek letárolásra és ha sok ismétlődés van akkor nagyot lehet itt nyerni.

    A sorbarendezésre viszont ez a tömörítés károsan fog hatni, mivel elvesztjük az "egyedi értékek" tárolásakor a sorrendet. Ami azért nem gond amikor dolgozunk az adatmodellel, mert a képletek/kapcsolatok nem sorrend szerint dolgoznak hanem tartalom/érték alapján (pl. lényegtelen hogy amikor megszámoljuk vagy összeadjuk az értékeket, akkor azok növekvő vagy csökkenő sorban vannak, az eredmény ígyis-úgyis ugyanaz). A videóban 9:10 körül ugyanezt mondják.

    A videóban az eredeti problémára/kérdésre a megoldás szerintem az, hogy amikor a Vertipaq rendszer újra összerakja a tömörített táblákból az eredményt, akkor azzal a táblával kezd ahol a legkevesebb egyedi érték volt és rakja mellé az egyre több értékeket tartalmazó táblákat. Az ottani példában valószínű a régió (Region) volt a legkevesebb elemű (talán 4 db) , aztán a jön a termék (product) és utánna az állam (state) és így tovább.

    A sorbarendezés termeszetesen fontos dolog nekünk embereknek, így kell és használjuk is, de csak ott ahol van értelme. Vagyis:
    1. a végső eredmény (CSAK Excel munkalapra töltés esete ez, Power BI esetén vizualizációk esetén teljesen felesleges) előállításakor az utolsó lépésben,
    2. olyan köztes lépéseknél amikor fontos a sorrend, pl. egy olyan csoportosítás előtt amikor nem csak összegzünk hanem az összes adatot is beletesszük a csoportosításba és abból mondjuk a legelső sort akarjuk kiemelni/tovább vinni. pl. a fenti videóban ha tudni szeretnénk termékenként az utolsó államot ahol eladtuk azt, akkor ha dátum szerint csökkenő sorba rendezünk, majd termék alapján csoportosítunk akkor a belső táblában az első rekord a legrissebb eladás adatait fogja tartalmazni termékenként.

    Amivel furcsasággal találkozom az hogy adatmodellbe töltéskor nem csak a sorok, de az oszlopok sorrendjét is elveszítem. Céges fájlban van kb. 400 ezer sor és vagy 60 oszlop, de Kimutatás/Pivot kibontásakor mindig ABC sorrendben jönnek az oszlopok.

    üdv

  • Mutt

    senior tag

    válasz KaliJoe #53580 üzenetére

    Szia,

    Tömb képletről van szó, de az újabb Excel verziókban (szerintem 2021es verziótól) már nem kell a Ctrl+Shift+Enter.

    A képletben a {1/2/3/4/5} arra "kényszeríti" az INDEX függvényt, hogy egyszerre több oszlopot adjon vissza (alapból csak 1et fog). Gépeld be a kapcsos zárójelet, de nem kell CSE-t nyomnod. (Ha így is sem megy, akkor azért próbáld ki hogy belül gépeled a kapcsoszárójelet és a végén nyomsz CSEt.)

    Egy hiba van a képletedben, a SOR(INDiREKT után A1 kell, nem A2. Az a rész valójában nem az A-oszlopról és az adatairól szól, hanem egy bevett szokás hogy egyesével növekvő számokat (1, 2, 3 stb) állítsunk elő. Későbbi Excelben erre már a SORSZÁMLISTA függvény van erre. Ha A2-vel indul, akkor az adathalmaz első sorát ki fogod hagyni.

    Még annyi, hogy lehet nem volt szerencsés a második valtozót "Sorok"-nak hívni, amikor van ilyen függvény Excelben. Két helyen írd át mondjuk ""osszsor"-ra.

    Üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53578 üzenetére

    Szia,

    Egyelőre még kevés dolog van Power Queryben, ami korábbi változatokban nem elérhető.
    Ilyenek a fuzzy search, vagy adatok sorokba bontása.

    Ami már problémásabb azok az adat kapcsolatok hiánya egy korábbi Excel verzióban vagy akár ugyanazon verzió Pro és Home veziója között. Bővebben itten.

    üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53569 üzenetére

    Legyen akkor elválasztójel (ha úgy gondolkodunk, hogy a 24 számot osztjuk fel 3 csoportra).

    Felraktam a 2016-os verziómat, és nem ismerte fel a SZÖVEGÖSSZEFŰZÉST frissítés után sem. Rosszul emlékeztem akkor. Én két linket szoktam nézni, ha nem a memóriámra hagyatkozom:
    https://hu.excel-translator.de/fuggveny/
    Excel Microsoft Support Page

    Miért nem lehet üresre "" cserélni (kivágni) azt a karaktert szóköz helyett?
    Ez esetben egybe fognak folyni a számok és nem lehet tudni, hogy ha több mint 24 szám van, akkor hol végződik az első bankszámlaszám és hol kezdődik a következő. Ha csak 1 bankszámlaszám lehet, akkor üres a jobb megoldás.

    Ha vki MS365 Insider-t használ, annak pedig már van REGEXP is függvényben: A képlet: =REGEXKIVONÁS(A1;"\d{8}-?\d{8}-?(\d{8})?";1)

    VBA-ban már régóta lehet REGEXP-et használni, referenciák között engedélyezni kell a "Microsoft VBScript Regular Expressions 5.5" osztályt. Aztán lehet használni:
    Function BankSzamlak(cella As Range, minta As String) As Variant
        Dim regExp As New regExp
        Dim talalat
        Dim eredmeny, c As Long
        
        With regExp
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = minta
        End With
        
        If regExp.Test(cella) Then
            Set talalat = regExp.Execute(cella)
            ReDim eredmeny(talalat.Count - 1)
            
            For c = 0 To UBound(eredmeny)
                eredmeny(c) = talalat(c).Value
            Next c
        Else
            eredmeny = "(nincs adat)"
        End If
        
        BankSzamlak = eredmeny
    End Function

    üdv

  • Mutt

    senior tag

    válasz bela85 #53564 üzenetére

    Szia,

    Jöttek már jó megoldások, én csak pár plusz dolgot, de nem a végeredményt mutatom.

    Excel 2016-ban van SZÖVEGÖSSZEFŰZÉS (TEXTJOIN), amit tudunk használni ahhoz hogy a vegyes adatsorból csak a számokat kinyerjük.

    B2-képlete: =KIMETSZ(SZÖVEGÖSSZEFŰZÉS("";0;HA(SZÁM(--KÖZÉP(A2;SOR(INDIREKT("A1:A"&HOSSZ(A2)));1))+(KÖZÉP(A2;SOR(INDIREKT("A1:A"&HOSSZ(A2)));1)="-");KÖZÉP(A2;SOR(INDIREKT("A1:A"&HOSSZ(A2)));1);" ")))

    A képlet lényege, hogy a cella tartalmán egyesével végigmegy és ahol számot vagy gondolatjelet lát azokat megtartja, a többit szóközre cseréli. A szövegösszefűzés az egészet egybeírja. Mivel lesznek elől, középen és hátul felesleges szóközök ezeket a KIMETSZ-el eltávolítjuk illetve középen pedig egyre csökkentjük.

    Aki MS365-ös verziót használ, annak van már REDUCE függvénye, ami tudja ezt egyszerűsíteni. A képlet C2-ben:
    =KIMETSZ(REDUCE("";SORSZÁMLISTA(HOSSZ(A2));
    LAMBDA(s;c;
    s&HA(SZÁM(--KÖZÉP(A2;c;1))+(KÖZÉP(A2;c;1)="-");KÖZÉP(A2;c;1);" "))))

    üdv

  • Mutt

    senior tag

    válasz ny.janos #53561 üzenetére

    Szia,

    Egy trükk, hogyan tudod a számokat kinyerni egy vegyes adatsorból.

    Az M-kód pedig:
    let
        Forrás = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Added Custom" = Table.AddColumn(Forrás, "Számok", 
        each
            Text.Trim(
                List.Accumulate(Text.ToList([Adat]), 
                "", 
                (s, c) => if Text.Contains("0123456789- ", c) then s & c else s)
            )
        , type text)
    in
        #"Added Custom"

    Ezzel a kódodban kb. 10 lépést (kb. Érték felülírva - Oszlopok eltávolítva3 részt) tudsz megspórolni.

    üdv

  • Mutt

    senior tag

    válasz Fferi50 #53527 üzenetére

    KaliJoe,

    Feladtad a leckét, én is inkább már makrós megoldás (vagy akár Power Query) felé tendálnák.
    Fferi adott makrót, én korábban egy MS365-ös képletet, de most egy Excel 2021-ben is működő(?) képlet jön, csúnya lesz!

    =LET(
    adatok;INDIREKT("A2:E20");
    sorok;SOROK(adatok);
    adatsor;INDEX(adatok;SOR(INDIREKT("A1:A"&sorok));{1/2/3/4/5});
    a;--INDEX(adatsor;0;1);
    b;--INDEX(adatsor;0;2);
    c;--INDEX(adatsor;0;3);
    d;--INDEX(adatsor;0;4);
    e;--INDEX(adatsor;0;5);
    SZUM(((a=H2)+(b=H2)+(c=H2)+(d=H2)+(e=H2))*
    ((a=I2)+(b=I2)+(c=I2)+(d=I2)+(e=I2))*
    ((a=J2)+(b=J2)+(c=J2)+(d=J2)+(e=J2)))
    )

    A K2-es cellában van a képlet, ami húzható lefelé. A LET utáni első változó ("adatok") tartományát neked kell módosítani. Az "adatsor" változó képletének a végén van egy felsorolás ("{1/2/3/4/5}"), ez angol Windows-os gépre telepített Excelben "{1,2,3,4,5}" -re javítandó.

    Hogyan műkődik a képlet?
    Próbálja az Excel 2021-ben még nem létező BYROW függvényt helyettesíteni. A tartomány minden sorát egyesével vizsgálja. A sorban található 5 számot külön változókba teszi (a, b, c stb) és megnézi, hogy ezek vmelyike egyezik-e a H2-ben, majd az I2-ben és a J2-ben lévő számokkal. Ahol van egyezés mindhárom keresett értékkel, ott 1 lesz az eredmény a többinél 0. Ezt minden soron megcsinálja és szummáz a végeredményhez.

    A sortörések a képlet könnyebb olvashatóságát célozzák, nincs egyéb jelentőségük.

    FireSoul/FFeri,

    Köszönöm a segítséget. Ha sorrend számítana, akkor csak makróval tudnám a megoldást elképzelni. A korábbi példámban lustaság miatt nem voltak növekvő sorrendben a számok.

    üdv

  • Mutt

    senior tag

    válasz KaliJoe #53516 üzenetére

    Szia,

    Amikor több öszlopban keresed az értéket (vagyis DARABHATÖBB(A:E;H2) esetén), akkor soronként mindegyik oszlopra van egy eredmény a találatokról (pl. {IGAZ,HAMIS,HAMIS,HAMIS,HAMIS}).

    Ha megadod a többi keresési értékeket, akkor pedig minden keresési értékre szintén visszakapod az oszloponkénti eredményt. Vagyis az 5 oszlop és 3 keresési érték alapján lesz 15 eredmény soronként.

    A függvény ezen mátrixnak a produktumát adja vissza, amely MINDIG 0 lesz ha eltérő értékeket keresel, mert egy cellában egyszerre csak 1 db szám lehet, amely vmelyik keresendő számmal egyezik vagy sem, de egyszerre mindhárom keresendő számmal nem egyezhet.

    Itt egy minta ami talán érthetőbbé teszi mint amit fent írtam:

    Bal oldalon A-E-oszlopok (szürke háttér) ahol keresünk. Sárga amit keresünk.
    Alatta pedig egy eredmény, hogy az A-E oszlop adott sorában megtaláltuk-e a keresendő számot. Ahol 1 ott igen, ahol 0 ott nem volt egyezés (bal oldalt zölddel ezek be is színezve). Ahogy látszik az első sorban a 3-as szám meg van az első oszlopban, a 10-es szám nincs sehol, a 12-es pedig a harmadik oszlopban van. Az első oszlopban van egy találat és kettő hiány, ennek a szorzata 0. A második oszlopban mindenhol 0 van, eredmény 0. A harmadik hasonló mint az első 1 talalát ellen van kettő hiány, megint 0 és így tovább.

    Ami neked kell, hogy mindegyik feltétel 1 találatot adjon vissza (lényegtelen hogy a számot a sor melyik oszlopában találjuk meg, az számít hogy van-e vagy sincs.
    Vagyis az 1,0,0,0,0 helyett 1 vagy a 0,0,0,0,0 helyett egy 0 kell. Ezt SZUM-al lehet megcsinálni. Ezt láthatod lent, narancssárga helyeken már 1 db szám van.

    Neked azon sorok kellenek, ahol soronként mindenhol 1 van. Ezt egy szorzással lehet elérni, a K4-es cella képlete =H4*I4*J4. Majd ezt a K oszlopot összegezve megkapod a végeredményt. Vagy 1 lépésben SZORZATÖSSZEG, amelyet az L4-be látsz és aminek a képlete: =SZORZATÖSSZEG(H4:H7;I4:I7;J4:J7)

    Ha MS365-ön vagy, akkor viszont lehet egyszerűsíteni a BYROW függvénnyel, amely soronként végigmegy az adatokon:

    A képlet: =SZUM(--BYROW(A2:E20;LAMBDA(r;(DARABHA(r;$H$2)+DARABHA(r;$I$2)+DARABHA(r;$J$2))=3)))

    Más:
    Szerintem érdemes lenne a Névkezelőben a INDIREKT("A2:E" & Öhsz;IGAZ) -nak egy nevet adni (pl. adatok) és onnantól már minden képleted egyszerűsíthető.

    üdv

  • Mutt

    senior tag

    válasz KaliJoe #53505 üzenetére

    Szia,

    Nem írtál Excel verziót, de Excel 2021 vagy frissebben vagy, akkor van EGYEDI (UNIQUE) és akár SORBA.RENDEZ (SORT) függvényed.

    Ez esetben =ÖSSZESÍT(14;6;EGYEDI(U20:U85 );{1;2;3}
    vagy =INDEX(SORBA.RENDEZ(EGYEDI(U20:U85);1;-1);{1;2;3})

    MS365 változat esetén pedig TAKE (jelenlegi fordítása ÁTHELYEZ is van):
    =ÁTHELYEZ(SORBA.RENDEZ(EGYEDI(U20:U85);1;-1);3)

    üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53502 üzenetére

    Szia,

    A bug helyes linkje ez.
    A fejlesztői csapathoz továbbkerül a probléma, meglátjuk hogy mikor lesz belőle vmi.
    A korábbi Power Query sorbarendezési problémára még semmit sem mondtak.

    üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53499 üzenetére

    Szia,

    Bugot találtál, bejelentettem itt.

    Az én teoriám az, hogy az S betű egy foglalt szó, amit elsődlegesen az aktuális sort jelenti. Ha átkapcsolsz S1O1 (sor-oszlop) hivatkozásra, akkor a képlet bevitele során egyből kijelöli az aktuális sort. O esetén pedig az oszlopot.

    Excel 2010-ben is megvan a hiba, de annyira kevesen használják ezt a függvényt, hogy te vetted észre egyedül. Korábban T-t használtam, ez esetben pl. HIBÁS(T("USA"))

    VBA-val be lehet vinni a függvényt, és ha más nyelven használjuk akkor ott sincs ezzel gond.

    üdv

  • Mutt

    senior tag

    válasz Peterhappy #53493 üzenetére

    Remek. Féltem, hogy az én mintám egy nagyon egyszerűsített változat és nem biztos hogy egyben lehet átültetni a te példádra, de akkor sikerült.

  • Mutt

    senior tag

    válasz Troy. #53494 üzenetére

    Szia,

    HA(feltétel;1;2) kell akkor neked. A feltétel lehet a korábban megadott ÉS függvény.

    Ha az is jó, hogy az igaz 1 és a hamis 0, akkor tegyél két minuszjelet a használt képlet elé.

    Amivel adós maradtam, hogy miért ad HAMIS eredményt az "IGAZ <= 1,4", ha alapból az igaz értéke 1 és 1 kisebb mint 1,4?
    a) A HAMI/IGAZ egy logikai adattípus, az 1,4 pedig egy szám típus.
    b) Eltérő adattípusokat összehasonlítani nem lehet, ezért HAMIS eredményt ad az Excel.

    Azonban az Excel próbál meg segíteni és amikor műveleteket (szorzás, összeadás stb.) végzünk eltérő adattípusokon akkor megpróbálja őket egységes típussá konvertálni (coerce). Az "IGAZ+0" ezért 1-et fog visszadni.

    üdv

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53492 üzenetére

    Szia,

    Igazad van, magyarban S az N függvény.
    Mivel feltételes formázás képleteként fogjuk használni, így az eredeti cella értékét nem változtatja, az eredeti kérdezőnek pedig segíthet eligazodni a többszáz feltételes formázás között ha használja.

    Azonban az sem lenne gond, ha a szöveges cellában lévő értéket számmá alakítja a nullával való hozzáadás, mert az egyedi számformátumok csak számokon műkődnek, szövegként tárolt számokra nincsenek hatással.

    Pár formátumot felvittem:

    üdv

  • Mutt

    senior tag

    válasz Troy. #53489 üzenetére

    Ha olyan formátumban adod meg, ahogy fent akkor az alábbi történik.
    Balról jobbra haladva próbálja meg értelmezni a képletet.
    1. Előbb a 0,9 <= A1 fut le, eredménye IGAZ.
    2. Ezt az eredményt viszi tovább, vagyis IGAZ <= 1,4 , amire HAMIS az eredmény.

    Megoldás ÉS vagy szorzás használata.
    ÉS(0,9<=A1;A1<=1,4) vagy (0,9<=A1)*(A1<=1,4)

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53479 üzenetére

    Szia,

    Esetleg LET nélkül:
    =N("Nemzetközi DE")+(HOSSZ(A1)=12)*(BAL(A1;2)="49")

    Itt az elején egy kommentet helyeztünk el, hogy a szabály mit akar érvényesíteni.
    A képlet második fele pedig csinálja az ellenőrzést hossz és kezdő karakterek alapján.

    üdv

  • Mutt

    senior tag

    válasz Mutt #53477 üzenetére

    Mivel kicsit zavart ezért itt a javítás.

    Sub FormatNumbers()
        Dim s As Range, sel As Range
        Dim r As Variant
        Dim szinek As Variant
        
        'megadott formátumokat memóriába töltjük
        'ha más a tábla neve akkor a tFormats helyére a helyes kerüljön
        arrFormats = ActiveSheet.ListObjects("tFormats").DataBodyRange.Value
            
        Set sel = Intersect(Selection, ActiveSheet.UsedRange)
        
        If Not sel Is Nothing Then
            
            'kijelölt adatokon végigmegyünk
            For Each s In sel
                r = FindFormat(s.Value)
            
                If IsArray(r) Then
                    'a cél cella formázását levesszük
                    s.ClearFormats
                    
                    'beállítjuk a formátumot
                    s.NumberFormat = r(1)
                    
                    'ha van színezünk
                    If r(2) <> "" Then
                        szinek = Split(r(2), ",")
                        If UBound(szinek) = 2 Then s.Interior.Color = RGB(szinek(0), szinek(1), szinek(2))
                    End If
                    
                End If
            Next s
            
        End If
    End Sub

    Akit érdekel a hibám a "For Each" sorban volt, ahol továbbra is a Selection (a felhasználó által kijelölt tartományt) használtam. Ha egy teljes oszlopot jelöl ki a felhasználó, akkor mind az 1 millió soron próbál végig menni a makró, ami lassú lesz. Ezért van a kódban előtte egy INTERSECT, amit elfelejtettem használni.

    üdv

  • Mutt

    senior tag

    válasz Owlet #53480 üzenetére

    Szia,

    ...munkafüzet online térben közös használattal lesz feltöltve... ez a részt mit jelent? Sharepoint/OneDrive vagy a shared folder?

    A weben (Sharepoint/OneDrive) a VBA nem műkődik, helyette van az Office Script (csak olyan munkahelyi licensz esetén ahol ezt az admin engedélyezte). Office Scriptben nincs lehetőség aktuális felhasználó beazonosítására, amit ki lehet próbálni hogy felugró ablakban bekérni a felhasználót és azzal tovább menni.

    Ha shared folderben van a fájl, akkor műkődik a VBA, de nagy az esély ilyenkor az adatvesztésre/hibás fájlra.

    Alternatív lehetőségek:
    1) Esetleg amit lehetne tenni, hogy mindenkinek külön fájlja van és Power Query-vel egyesíteni lehet őket.
    2) Microsoft Forms használata (ha van licensz).
    3) Harmadik opció ha mindegyik felhasználó tud emailt küldeni, akkor küldhetnek egy emailt (pl. elég ha a tárgyba beleteszik honnan dolgoznak, a többi jön a feladóból és email dátumából). Ezt lehet Power Query-vel vagy azonnal Power Automate-el összesíteni egy fájlba (utóbbi megint licensztől függ).

    üdv

  • Mutt

    senior tag

    válasz Mutt #53477 üzenetére

    Egy kis hibát látok a makróban. Egész oszlopon nem javasolt futtatni. Ha kell majd javítom.

  • Mutt

    senior tag

    válasz KaliJoe #53475 üzenetére

    Szia,

    Az én megoldásom azon alapszik, hogy van egy táblázat amely tartalmaz pár adatot ami alapján meg lehet találni, hogy melyik formátumot kell használni.
    Mutatom.

    Jobb oldalt van a táblázat, amiben a telefonszám első pár karaktere van megadva (lehet dzsóker karaktert - kérdőjel most csak - is használni). Aztán van hossz is, hogy az altípusokat meg lehessen különböztetni (biztosra mentem és tartományt lehet megadni).
    Majd jön a kívánt számformátum, itt követni kell az Excel speciális számformátum szabályait. Meg lehet adni, hogy milyen háttérszíne legyen a cellának (három szám 0-255 között, vesszővel felsorolva a vörös-zöld-kék alapszínekhez). A komment pedig segít eligazodni a káoszban.

    A táblázatban fontos a sorrend. Ha több lehetőség is van akkor is az első találatot fogja használni a makró.

    Ezek után a makró:

    Option Explicit
    Dim arrFormats

    Sub FormatNumbers()
        Dim s As Range
        Dim r As Variant
        Dim szinek As Variant
        
        'megadott formátumokat memóriába töltjük
        'ha más a tábla neve akkor a tFormats helyére a helyes kerüljön
        arrFormats = ActiveSheet.ListObjects("tFormats").DataBodyRange.Value
            
        Set s = Intersect(Selection, ActiveSheet.UsedRange)
        
        If Not s Is Nothing Then
            
            'kijelölt adatokon végigmegyünk
            For Each s In Selection
                r = FindFormat(s.Value)
            
                If IsArray(r) Then
                    'a cél cella formázását levesszük
                  s.ClearFormats
                    
                    'beállítjuk a formátumot
                  s.NumberFormat = r(1)
                    
                    'ha van színezünk
                    If r(2) <> "" Then
                        szinek = Split(r(2), ",")
                      If UBound(szinek) = 2 Then s.Interior.Color = RGB(szinek(0), szinek(1), szinek(2))
                    End If
                    
                End If
            Next s
            
        End If
    End Sub
    Function FindFormat(p As String) As Variant
        Dim i As Long
        Dim pFormat(1 To 2)     'formátum és színkód
        Dim pKezdo As String
        Dim pHossz As Long
        
        pHossz = Len(p)
        FindFormat = ""
        
        If pHossz = 0 Then Exit Function
        
      'végigmegyünk a létező formátumokon
        For i = 1 To UBound(arrFormats)
            pKezdo = ""
            
            'hossz alapján keresünk egyezést
            If arrFormats(i, 2) >= pHossz And arrFormats(i, 3) <= pHossz Then
                
                pKezdo = arrFormats(i, 1)
                
                'kezdõ karakterek alapján keresünk egyezést
                If Left(p, Len(pKezdo)) Like pKezdo Then
                    
                    'ha van egyezés akkor elmentjük és kilépünk a ciklusból
                    pFormat(1) = arrFormats(i, 4)
                    pFormat(2) = arrFormats(i, 5)
                    FindFormat = pFormat
                    Exit For

                End If
                
            End If
        Next i
        
    End Function

    Csak a kijelölt cellák formátumát változtatja meg! Vagyis előbb jelöljük ki a cellákat/oszlopokat és utána futassuk (Alt+F8-at nyomva vagy egy gombot kitéve).

  • Mutt

    senior tag

    válasz Fire/SOUL/CD #53469 üzenetére

    Szia,

    Nem hinném, hogy valaha is lehet majd direktben hivatkozni tömb elemeire a frontendben. INDEX-et lehet addig is használni.

    Üdv

  • Mutt

    senior tag

    válasz andreas49 #53462 üzenetére

    Szia,

    Itt az én megoldásom MS365-ös függvényekkel, segédoszlop nélkül. Feltételeztem hogy csökkenő sorrend érdekel, ha nem akkor a -1-eket a rendezésben 1-re kell cserélni.

    C2-nek a képlete (tördelés csak a könnyebb olvashatóság miatt):
    =LET(
    adat;INDIREKT("A2:B7");
    lista;RENDEZÉS.ALAP.SZERINT(adat;INDEX(adat;0;1);-1;INDEX(adat;0;2);-1);
    XHOL.VAN(A2&"-"&B2;INDEX(lista;0;1)&"-"&INDEX(lista;0;2)))

    Egy másik változat pedig SZŰRŐ-t használva (ez van a D-oszlopban):
    =LET(
    adat;INDIREKT("A2:B7");
    lista;VÍZSZ.HALMOZÁS(RENDEZÉS.ALAP.SZERINT(adat;INDEX(adat;0;1);-1;INDEX(adat;0;2);-1);SORSZÁMLISTA(SOROK(adat)));
    a;INDEX(lista;0;1);
    b;INDEX(lista;0;2);
    c;INDEX(lista;0;3);
    SZŰRŐ(c;(a=A2)*(b=B2)))

    Mindkét esetben a LET utáni első változó deklaráció azért van, hogy csak ott kelljen változtatnod a tartományt.

    üdv

  • Mutt

    senior tag

    válasz Peterhappy #53456 üzenetére

    Szia,

    Nem kell plusz dolog, csak Excel 2010 vagy frissebb, amiben van Power Pivot (PP).

    1. Amikor Kimutatást (Pivotot) készítesz, akkor pipáld be az "Adatmodellbe töltés" opciót.

    2. Kezdőknek az egyszerűbb - de nem hatékonyabb megoldás - pedig hogy az adatmodellben létrehozunk egy új mezőt, ahova berakjuk a megfelelő előjelet. Ehhez aktiválni kell a Power Pivot menüt, amit a Fejlesztő/Developer fülön a COM Addins alatt lehet megtenni.
    Ezek után a Power Pivot menüben a Kezelés/Manage gombra kattintva feljön az PP szerkesztő. Az utolsó, "Add Column" oszlopot kijelölve és felette a szerkesztőlécben megadhatjuk az alábbi képletet (a mintám szerint ha "kiadás" van a típus oszlopban akkor -1-el szorozzuk meg az Érték oszlopban található számot): =if(Range[Típus]="kiadás";-1;1)*Range[Érték]

    Az oszlop fejlécére kattintva adhatsz nevet az oszlopnak.
    Ha így viszed be a képletet: eredmény:=if(Range[Típus]="kiadás";-1;1)*Range[Érték], akkor a kettőspont előtti elnevezést kapja az oszlop. Bezárhatod a PP szerkesztő ablakot és visszajutsz az Excelbe.

    3. Ezek után a kimutatásban használd az új oszlopot az érték mezőben.

    A hatékonyabb, de nehezebben érthető megoldás egy új érték/measure hozzáadása az adatmodellhez. A PP a DAX nyelvet használja, ami angol függvényeket használ. Egy részük hasonlít az Excel függvényekhez, de többnyire máshogy működnek.

    Lépések a profi megoldáshoz:
    1. Ugyanaz mint a fenti 1-es.
    2. Ha akarod aktiváld a Power Pivot menűt, mint ahogy fent említettem. Nem kötelező.
    3. Kezd el összerakni a kimutatást, de kimutatás mezőknél jobb klikk a táblázaton (mintámban Range a neve) és válaszd az "Érték hozzáadása/Add measure" opciót. (Ha van már Power Pivot menüd, akkor azon belül a második gomb a "Measure", amivel ugyanezt lehet csinálni.

    Az ablakot vhogy így töltsd ki:

    Én az "eredmény" nevet adtam neki, a képlete ez (ha kell magyarázat szólj):
    =SUM(Range[Érték])-2*CALCULATE(SUM(Range[Érték]);Range[Típus]="kiadás")
    Alul beállítottam hogy Ft-ként tizedesek nélkül írja ki automatikusan.

    4. Ezt az új értéket, húzd be a kimutatás értékrészébe.

    Készen vagyunk.
    A Power Pivot mindkét esetben automatikusan használni fogja a képletet az új adatokon.

    Ps.
    A két megoldás között a különbség, hogy az első minden sor esetén lefuttatja a képletet (az adatok betöltésekor) és létrehoz egy új oszlopot. Ez lassítja a betöltést és több memóriát foglal. Észrevenni a mai gépeken milliós sorok esetén lehet csak. A második egy explicit függvény, ami csak a pivotban látható adatsorokon fut le (pl. ha együtt vannak a tavalyi és idei mozgások, de a pivotban szűrtél az ideiévre akkor csak 2024-es adatoknál számol a képlet).

  • Mutt

    senior tag

    válasz 3DFan #53451 üzenetére

    Szia,

    Alt+F11-re bejön a makró szerkesztő. Bal oldalon ki kell választanod a füzetedet, majd az Insert | Module menüpontokkal új modult kapsz, ami a bal oldalon látszik, és ki van jelölve. A jobb oldali nagy üres mezőbe kell bemásolni a fórumon kapott makrót. Visszalépve a füzetbe az Alt+F8 előhoz egy párbeszéd ablakot, itt tudod kiválasztani és indítani a makrót.

    Az indítás előtt hozzlétre egy Summary nevű lapot a munkafüzetben.
    Futtatás után amikor mentesz, akkor fel fog dobni egy üzenetet, hogy makróbarátként célszerű menteni különben elveszik a makró. Érdemes nem makróbarátként menteni, mert nem kell neked folyamatosan ez a makró.

    A fenti lépéseket mindkét fájlon külön-külön kell megtenned és utána a két fájl Summary lapját tudod összehasonlítani.

    üdv

  • Mutt

    senior tag

    válasz eszgé100 #53449 üzenetére

    Szia,

    Tudnál egy mintát mutatni, hogy miből mit kéne varázsolni?

    A FILTER vagy AGGREGATE függvénnyel tudunk azonos találatok közül szelektálni, de kevés a fenti infó.

    Pl. ez a lapon lévő utolsó sorból ad vissza eredményt a feltételek szerint: =LET(r,FILTER([dateTime],([SerialNumber]=[@SerialNumber])*ISNUMBER(SEARCH([boltID],"PROGRAMNAME"))),INDEX(r,COUNT(r)))

  • Mutt

    senior tag

    válasz ReSeTer #53438 üzenetére

    Szia,

    32-bites Officet telepítsetek. Nem fogod hátrányát észrevenni, de ha nagyon kell akkor van Large Address Aware patch ami tud segíteni hogy a 32-bites programok 2GB-nál több memóriát lássanak/használjanak 64-bites környezetben.

    Ha szükséges a jelszavas kód megtekintése, akkor van rá megoldás.
    Excel off the grid megmutatja őket, van kész letölthető fájlja is ami segít neked.

    üdv

  • Mutt

    senior tag

    válasz föccer #53441 üzenetére

    Szia,

    A képletben 2 helyen van pontosvessző még, cseréld le sima vesszőre őket.

    Mégha nagy adatsorod is van érdemes lenne memóriába (egy tömbbe) tölteni és azzal dolgozni, majd ha kell (form bezárásakor legkésőbb) kiiírni a munkalapra.

    üdv

  • Mutt

    senior tag

    válasz föccer #53439 üzenetére

    Szia,

    Formula2 tulajdonságot használd mostantól. Az új függvények csak ott támogatottak.

    Üdv

  • Mutt

    senior tag

    válasz modflow #53394 üzenetére

    Szia,

    Itt egy VBA kód amivel egy "Summary" elnevezésű lapra ki tudod íratni, hogy a munkafüzet lapjain milyen képletek találhatóak. Ha lefuttatod mindkét fájlon, akkor össze tudod hasonlítani a listákat.

    Sub ListCellswithFormulas()
        Dim ws As Worksheet
        Dim rngFormulas As Range
        Dim wsReport As Worksheet
        Dim a As Long, c As Long
        Dim out As Long
        
        Set wsReport = ThisWorkbook.Worksheets("Summary")
       
        out = 2
        
        With wsReport
            .Range("A1") = "Lap"
            .Range("B1") = "Cella"
            .Range("C1") = "Képlet"
        
            For Each ws In ThisWorkbook.Worksheets
                On Error Resume Next
                Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas, 23)
                On Error GoTo 0
        
                If Not rngFormulas Is Nothing Then
                    For a = 1 To rngFormulas.Areas.Count
                        For c = 1 To rngFormulas.Areas(a).Count
                            .Cells(out, "A") = ws.Name
                            .Cells(out, "B") = rngFormulas.Areas(a).Item(c).Address
                            .Cells(out, "C") = "'" & rngFormulas.Areas(a).Item(c).Formula2
                            out = out + 1
                        Next c
                    Next a
                    
                    Set rngFormulas = Nothing
                End If
            Next ws
        End With
    End Sub

    üdv

  • Mutt

    senior tag

    válasz szürke #53393 üzenetére

    Szia,

    Power Query elsődleges célja adatok (akár külső forrásból, mint pl. weblap vagy egy adatbazis) átalakítása és feldolgozása. Excel 2016-tól az Excel része, Excel 2010/2013-hoz külön tölthető le.

    Érdemes Youtube-on videokat nézni róla, ha még nem ismered.
    Mike Girvin (excelisfun) csatornáját tudom javasolni.

    Linkeltem korábban:
    52669
    52723

    üdv

  • Mutt

    senior tag

    válasz #77257183 #53400 üzenetére

    Szia,

    Itt az én makrós változatom.

    Option Explicit
    Dim fibonacci(1000) As Variant  'megtalált fibonacci számok listája

    Sub Valaszt()
        Dim c As Long
        Dim r As Double
        Dim pozicio As Long
        'Rnd() függvénynek kell, különben nem lesz igazán véletlenszám
        Randomize
            
        '1-es poziciótól indulunk
        pozicio = 1
            
        With ActiveSheet
            'fejléc a füzetre
            .Range("A1") = "Lépés"
            .Range("B1") = "Pozíció"
            .Range("C1") = "Véletlen szám"
            .Range("D1") = "Fibonacci szám"
            
            '100 lépéses ciklus
            For c = 1 To 100
                r = Rnd()
        
                'fel-le lépkedünk a listában
                If r < 0.5 Then
                    pozicio = pozicio + 1
                Else
                    If pozicio > 2 Then
                        pozicio = pozicio - 2
                    Else
                        pozicio = 1
                    End If
                End If
            
            'kiírtajuk a kapott eredeményeket
            .Cells(c + 1, "A") = c
            .Cells(c + 1, "B") = pozicio
            .Cells(c + 1, "C") = r
            .Cells(c + 1, "D") = FibonacciNum(pozicio)
            
            Next c
        End With
    End Sub
    'rekurzív fibonacci szám generátor
    Function FibonacciNum(n As Long)
        
        If Not IsEmpty(fibonacci(n)) Then
            FibonacciNum = fibonacci(n)
            Exit Function
        End If
        
        If n = 0 Then
            FibonacciNum = 0
            fibonacci(0) = 0
            Exit Function
        End If
        
        If n = 1 Then
            FibonacciNum = 1
            fibonacci(1) = 1
            Exit Function
        End If
        
        FibonacciNum = FibonacciNum(n - 1) + FibonacciNum(n - 2)
        fibonacci(n) = FibonacciNum
    End Function

    üdv

  • Mutt

    senior tag

    válasz szürke #53373 üzenetére

    Szia,

    Delila adott egy makrót, ami az előfordulásokat listázza az összegzés munkalapra.
    Hasonlót lehet Power Query-vel is csinálni, de vannak megkötések:
    1. Előbb mented kell a fájlt, a nem mentett adatokat nem fogja látni (kivétel ha a fájlban táblázatokban vannak az adatok).
    2. A lekérdezést kézzel kell frissíteni (lehet automatikus frissítést is beállítani adott percenként).
    3. Nem fog szinezni, csak a listát adja vissza.

    A teljes M-kód:
    let
        Forrás = Excel.Workbook(File.Contents("C:\Users\szila\OneDrive\Desktop\53373.xlsm"), null, true),
        #"Sorok szűrve" = Table.SelectRows(Forrás, each [Kind] = "Sheet" and [Item] <> "Összegzés"),
        #"Egyéni oszlop hozzáadva" = Table.AddColumn(#"Sorok szűrve", "Adatok", each Table.AddIndexColumn([Data], "Sor", 1, 1)),
        #"Többi oszlop eltávolítva" = Table.SelectColumns(#"Egyéni oszlop hozzáadva",{"Name", "Adatok"}),
        Fejlécek = Table.ColumnNames(Table.Combine(#"Többi oszlop eltávolítva"[Adatok])),
        ÚjFejlécek = List.Transform(Fejlécek, each Text.Replace(_, "Column", "")),
        #"Kibontott Adatok" = Table.ExpandTableColumn(#"Többi oszlop eltávolítva", "Adatok", Fejlécek, ÚjFejlécek),
        #"Oszlopok egyesítve" = Table.CombineColumns(Table.TransformColumnTypes(#"Kibontott Adatok", {{"Sor", type text}}, "hu-HU"),{"Name", "Sor"},Combiner.CombineTextByDelimiter(":Sor", QuoteStyle.None),"CellaID"),
        #"Többi oszlop elemi értékekre bontva" = Table.UnpivotOtherColumns(#"Oszlopok egyesítve", {"CellaID"}, "Oszlop", "Érték"),
        #"Egyéni oszlop hozzáadva2" = Table.AddColumn(#"Többi oszlop elemi értékekre bontva", "FormázottÉrték", each try Text.Lower(Text.Clean(Text.Trim([Érték]))) otherwise [Érték]),
        #"Oszlopok egyesítve1" = Table.CombineColumns(#"Egyéni oszlop hozzáadva2",{"CellaID", "Oszlop"},Combiner.CombineTextByDelimiter(":Oszlop", QuoteStyle.None),"Cella"),
        #"Sorok csoportosítva" = Table.Group(#"Oszlopok egyesítve1", {"FormázottÉrték"}, {{"Előfordulás", each Table.RowCount(_), Int64.Type}, {"Adatok", each _, type table [Cella=text, Érték=text]}}),
        #"Sorok rendezve" = Table.Sort(#"Sorok csoportosítva",{{"Előfordulás", Order.Descending}}),
        #"Egyéni oszlop hozzáadva1" = Table.AddColumn(#"Sorok rendezve", "Hely", each Text.Combine([Adatok][Cella], ", "), type text)
    in
        #"Egyéni oszlop hozzáadva1"

    Ahol a fájl elérhetőségét a Forrás sorban meg kell adnod. Legegyszerűbb a PQ szerkesztőben a Kezdőlap -> Adatforrás beállításai alatt.

    A kis és nagybetűket azonosnak vettem, ha ez nem kell akkor a "Sorok csoportosítva" sorban a "FormázottÉrtéket" cseréld le "Érték"-re.

    üdv

  • Mutt

    senior tag

    válasz Traxx #53385 üzenetére

    Szia,

    Többiek válasza mellett itt az én változatom:
    =HA(B3="Igen";"A";HA(C3="Igen";"B";"OK"))
    =HAELSŐIGAZ(B3="Igen";"A";C3="Igen";"B";1;"OK")

    üdv

  • Mutt

    senior tag

    válasz BullZeye #53368 üzenetére

    Szia,

    Hogy tanuljuk/szokjuk az új függvényeket, MS365-ben ezt is lehet használni:
    =MAKEARRAY(;KEREK.FEL(A2/1000;0);LAMBDA(r;c;MIN(1000;A2-(c-1)*1000)))


    Üdv

  • Mutt

    senior tag

    válasz PistiSan #53358 üzenetére

    Szia,

    "...1000-es számoknál egy szóköz kerüljön be..."
    Power Query-ben nincs formázás, csak adattípusokat tudsz megadni. Amint betöltötted Excelbe ott tudod a formázást beállítani. Ha nagyon kell "számformátum", akkor szöveggé alakítva lehet formázni.
    pl.
    Number.ToText(23234, "N2", "hu-HU")

    üdv

  • Mutt

    senior tag

    válasz alfa20 #53339 üzenetére

    Szia,

    Ha még aktuális, akkor itt vannak az én tippeim (KOCKA függvényben kezdő vagyok).
    1. Power Query-ben amikor a kapcsolati betöltést választod, akkor legyen bepipálva az adatmodellhez hozzáadás.
    2. Power Pivot fülön hozz létre egy mértéket (measure-t).

    3. A képleted: =KOCKA.ÉRTÉK("ThisWorkbookDataModel";"[Measures].[result]";"[tbGfk].[GFK].&["&A2&"]")

    üdv

  • Mutt

    senior tag

    válasz tgumis #53275 üzenetére

    Szia,

    Az én változatom, ami Excel 2016-tól megy, ötvözi a korábban kapott két megoldást (A1-ben van az input):

    =SZÖVEGÖSSZEFŰZÉS("",IGAZ,HAHIBA(KÖZÉP("tuvwxyz{|}",KÖZÉP(A1,SOR(INDIREKT("A1:A"&HOSSZ(A1))),1)+1,1)," "))

    üdv

  • Mutt

    senior tag

    válasz Mutt #53255 üzenetére

    A megadott válasz nem jó, így inkább csak demóként egy új függvényről érdemes megnézni.

  • Mutt

    senior tag

    válasz gycs02 #53251 üzenetére

    Szia,

    Az én válaszom csak kb. 1 év múlva lesz hasznos, de azért bedobom most.
    Az Excel tesztverziókban (insider változat) jópár újabb függvény van bevezetés/ismertetés alatt. Az egyik ilyen a PIVOTBY (magyarul KIMUTATÁS.ALAP.SZERINT), amellyel függvénnyel állítható elő egy kimutatás.

    Alapból egy ilyet fog létrehozni:

    Ebben a képletben 4. paraméter (fent a DARAB2) a számítási függvény saját képletekkel is helyettesíthető. Az eredeti kérésben egy 1-est szeretnél látni, ezt egy saját képlettel el lehet érni: LAMBDA(a;ELŐJEL(DARAB2(a)))


    Nekünk csak az első és harmadik oszlopra van szükségünk, amelyet a CHOOSECOLS (magyarul OSZLOPVÁLASZTÁS) függvénnyel lehet megtenni.
    A végső képlet: =OSZLOPVÁLASZTÁS(KIMUTATÁS.ALAP.SZERINT(C1:C12;D1:D12;D1:D12;LAMBDA(a;ELŐJEL(DARAB2(a)));0;0;1);1;3)

    üdv

  • Mutt

    senior tag

    válasz ny.janos #53237 üzenetére

    Szia,

    Tegnap küldtem hibajelentést a Microsoftnak, hogy Excel Power Query-ben nem műkődik jól a sorbarendezés ékezetes betűk esetén. Meglátjuk, hogy mikor lesz belőle vmi.

    Amivel próbálkoztam és háthat segítség neked:
    1. Power BI Desktop-ban jó a rendezés, M-kód teljesen azonos. Pár perc alatt megvagy ott vele.
    2. Ha átmenetileg lecseréljük az ékezetes betűket az ékezetesmentes változatukkal és úgy rendezünk, akkor jobb eredményünk lesz, de ez sem tökéletes.
    Ezt simán a GUI-val is meg lehet csinálni többlépéssel, de itt egy list-et tartalmazó változat.

    Van két segédlistám, ABCIn és ABCOut tartalmazza az ékezetes betüket és azok ékezetmentes változatát. Az M-kódjuk:
    = {"á", "é", "í", "ó", "ö", "ő", "ú", "ü", "ű"}
    = {"a", "e", "i", "o", "o", "o", "u", "u", "u"}

    Az Excel lapról jön a lista, amihez egy új oszlopot adtam amelynek a képlete:
    =Text.Combine(
        List.Transform(Text.ToList(Text.Lower([Nevek])), 
        each try ABCOut{List.PositionOf(ABCIn, _)} otherwise _)
      )

    A képlet legelőször kisbetűsre alakítja az eredeti szöveget, majd betűnként felszabdalva listába teszi. Ezen a listán végigmegyünk és ott ahol ékezetes betűt találunk lecseréljük a megfelelőre, a többi értéket nem változtatjuk. A végén az egészet összefűzzük.

    Az új oszlop alapján sorbarendezünk, utána törölhető az oszlop.

    A teljes M-kód:
    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Added Custom" = Table.AddColumn(Source, "Sorrendhez", each Text.Combine(
        List.Transform(Text.ToList(Text.Lower([Nevek])), 
        each try ABCOut{List.PositionOf(ABCIn, _)} otherwise _)
      )
    ),
        #"Sorted Rows" = Table.Sort(#"Added Custom",{{"Sorrendhez", Order.Ascending}}),
        #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Sorrendhez"})
    in
      #"Removed Columns"


    üdv

  • Mutt

    senior tag

    válasz detroitrw #53229 üzenetére

    Szia,

    Ha nem néztem el vmit akkor ez műkődhet:

    =INDEX('C T'!$A$1:$CQ$775;1;HOL.VAN(20;INDEX('C T'!$A$1:$CQ$775;HOL.VAN($B$1;'C T'!$A$1:$A$775;0);0);1))

    Ha MS365-ön vagy, akkor ez esetleg:

    =INDEX('C T'!$A$1:$CQ$775;1;HOL.VAN(20;SZŰRŐ('C T'!$A$1:$CQ$775;'C T'!$A$1:$A$775=$B$1);1))

    üdv

  • Mutt

    senior tag

    válasz ablutor #53210 üzenetére

    Szia,

    Nézegess Youtube-on videokat kimutatás/pivot készítésről (pl. ezek közül) és percek alatt át tudod alakítani a könyvlistát lemezlistára.

    Ahogy már említettük a kimutatás a listád fejlécét használja azonosítóknak (ezért nem is lehet azonos névvel több oszlop ugyanazon a lapon a kimutatáshoz). Ha átírod, akkor egy pivot frissítés után új mezőnek fogja az Excel értelmezni és csak annyi a dolgod hogy a tervezőben a megfelelő helyre (valószínű a sorok/rows részbe) kell húznod.

    Ha gond lenne küldd el nekünk magánba a fájlt és "rendbe" tesszük.

    üdv

  • Mutt

    senior tag

    válasz repvez #53212 üzenetére

    Szia,

    Powermap-et a Fejlesztő (Developers) fülön a COM Add-in alatt tudot aktiválni, de az elmúlt 2 évben az Excelben a térkép funkciók egyre rosszabbak.

    Javasolnám inkább helyette az ingyenes Power BI Desktop-ot (https://www.microsoft.com/en-us/power-platform/products/power-bi/desktop).

    üdv

  • Mutt

    senior tag

    válasz Yutani #53162 üzenetére

    Szia,

    Jól sejtem hogy kimutatást/összegzést akarsz csinálni a különböző cégekre és csak az adatokat akarod behúzni könnyedé, hogy a kész formulák kiadják az eredményt?

    Ha igen, akkor szerintem próbáljuk meg Power Query-vel megoldani, ha a fájlok felépítése hasonló.
    Két lekérdezést tudok most elképzelni:
    1. Mappából a lehetséges fájlnevek kilistázása.
    2. A kiválasztott fájlon adatátalakítás szükség szerint.

    üdv

  • Mutt

    senior tag

    válasz ablutor #53156 üzenetére

    Szia,

    Ha tudsz mutatni 1-2 képet a mostani fájlról, főleg az első munkalapról (ott van a struktrúra) és egy másikról (ott szerintem csak Pivotok/Kimutatások vannak) az tudna segíteni nekünk.

    Érzésem szerint van az első munkalapon egy Excel táblád (valószínű színes rácsos, amin ha álsz akkor a Table design menűsorban tudsz más színűvé tenni). És a többi munkalap pedig kimutatásokat tartalmaz (pl. évszám szerint rendezve az adatokat vagy egy másikon szerzők szerint rendezve).

    Ez esetben ami gondot okoz, hogy az első munkalapon lévő oszlopoknevek (többnyire az elsősor tartalma) kulcsok, amik alapján tud dolgozni a Pivot. Ha átírod, akkor egy refresh során azon oszlopok amelyek neve megváltozott elfognak a kimutatásból tünni (rosszabb esetben a frissítés hibával leáll). A megoldás fapados:
    ezeket a pivotokat újra le kell gyártani, de kb. a második után már rutin lesz ha nézed közben az eredeti/működő változatot.

    Javaslatok. Legyen egy backup a működő fájlról. Kezd el módosítani az első munkalapon az oszlopok nevét, adj hozzá/törölj ha kell. Legyen minden oszlopban vmilyen adat (nem kell minden sorban, csak legyen minta majd). Menj a következő lapra kattints bele az egyik Pivotba, fent a menűsor végén lesz két új elem (Pivot és Pivot Design talán). Az elsőben van a vége felé hogy bekapcsolhasd, hogy milyen mezőkkel dolgozik a Pivot.
    (Vagy akár használhatod a makrót a https://www.contextures.com/excel-vba-pivot-table-field-list.html#allptpf oldalról.)

    Ha nyomsz egy frissítést, akkor el fognak a rows/columns/values esetleg filter részből tűnni az átnevezett oszlopok. Egyszerűen csak fentről húzd be az újabb névvel őket.

    Nézzük meg ezzel mire jutunk.

    üdv

  • Mutt

    senior tag

    válasz gborisz #53158 üzenetére

    Szia,

    Megnéztem a fájlt és csak egy apró probléma van vele. A harmadik lépés nem az előtte lévőre, hanem a legelsőre (a Forrás nevűre) hivatkozik, ahol még nem történt meg típuskonverzió.

    Csak annyit kell csinálnod, hogy a szerkesztőlécben a Table.RenameColumns utáni "Forrás"-t, ami az első lépés neve lecseréled a másodikkal. Mivel annak a nevében van szóköz, ezért hashtaggel (#) kell kezdened és utána zárójelekben megadnod a lépés nevét, vagyis #"Típus módosítva" kell.

    A Power Query makrószerűen dolgozik, az egymás után megadott lépéseket hajtja végre. Általában az újabb lépés bemenete az előző kimenete. Alapból minden függvény első paramétere az előző lépés neve, de itt lehetséges hogy nem mindig az előző lépés eredményét használjuk fel a következőben.

    Tipikus példa szokott lenni amikor sok adat esetén a Table.Buffer-el memóriába tesszük az eredmény táblát és késöbbi lépésekben erre hivatkozunk vissza.

    Egy másik fontos tudnivaló inkább csak az M-kódban látszik, ami
    let -el kezdődik (kivével ha UDF-et csináltunk) és in-el végződik. Az in után megadott lépés neve lesz az eredmény, amely nem kötelező hogy az utolsó lépésé legyen. (Perverz módon meglehet adni az első, többnyire Forrás/Source nevű lépést is.)
    Ez többnyire teszteléskor/fejlesztéskor hasznos, amikor a további átalakítások bizonytalanok. Ha vki ilyenben gondolkodik, akkor jobb megoldás a lekérdezés duplikálása hivatkozással (reference), ami az eredeti lekérdezés eredményéből indul ki.

    üdv

  • Mutt

    senior tag

    válasz eszgé100 #53148 üzenetére

    Szia

    Az M-kód rendben van. Érdemes lenne inkább a legvégére tenned a sorbarendezést, mert join-kibontás után is változhat a sorrend.

    üdv

Új hozzászólás Aktív témák