Hirdetés
- sh4d0w: Kalózkodás. Kalózkodás?
- GoodSpeed: Kell-e manapság egérpad vagy sem?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Olcsó USB WiFi AC adapter
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- bambano: Bambanő háza tája
- Hieronymus: Kalózkodás. Kalózkodás? hozzászólás
-
LOGOUT
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Mutt
senior tag
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 teszedRemé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
helyettIf 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
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
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
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:
letForrá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:
letForrá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 WorksheetSet ws = ThisWorkbook.Sheets("Sheet1") ' Adjust sheet name as neededDim lastRow As Long, i As Long, colOffset As LongDim destRow As LongdestRow = 2 ' Start from row 2 on output sheetDim output As WorksheetSet output = ThisWorkbook.Sheets.Addoutput.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).RowFor i = 2 To lastRowFor colOffset = 0 To 4 ' Up to 5 quantity-price pairsIf ws.Cells(i, 2 + colOffset * 2).Value <> "" Thenoutput.Cells(destRow, 1).Value = ws.Cells(i, 1).Valueoutput.Cells(destRow, 2).Value = ws.Cells(i, 2 + colOffset * 2).Valueoutput.Cells(destRow, 3).Value = ws.Cells(i, 3 + colOffset * 2).ValuedestRow = destRow + 1End IfNext colOffsetNext iEnd SubVé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
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
-
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ásaSet receptCount = CreateObject("Scripting.Dictionary")osszesMinta = 0For i = 2 To lastRowIf alapadatok.Cells(i, 1).Value = valasztottUzem ThenreceptSzam = alapadatok.Cells(i, 2).ValueosszesMinta = osszesMinta + 1If Not receptCount.Exists(receptSzam) ThenreceptCount.Add receptSzam, 1ElsereceptCount(receptSzam) = receptCount(receptSzam) + 1End IfEnd IfNext 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.UserFormSet frm = obj.ParentWith frmSelect Case obj.NameCase "opbXYZ1".Label1.Caption = obj.Name & ": " & obj.ValueCase "opbXYZ2"frm.BackColor = 13882323MsgBox "hello world"Case "opbXYZ3"frm.BackColor = 14481663End SelectEnd WithEnd 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.OptionButtonDim i As LongReDim opbArray(1 To 3)For i = 1 To 3Set 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 = TrueEnd With'egyik megoldás, hogy létrehozáskor elindítod a saját kódodCall RunClick(ctl_OpB)Set opbArray(i).OptionButton = ctl_OpBNext iSet ctl_OpB = Nothing'másik megoldás, hogy létrehozás után változtatod meg az értékétDim r As DoubleRandomizer = Int(Rnd * 3) + 1opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.ValueEnd SubA class module-ban csak ennyi van:
Public WithEvents OptionButton As MSForms.OptionButtonPrivate Sub OptionButton_Change()Dim frm As MSForms.UserFormSet frm = OptionButton.ParentWith frm.Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.ValueEnd WithEnd SubPró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
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 ApplicationPrivate Sub AppEvents_WorkbookOpen(ByVal wb As Excel.Workbook)Call OpenEvent(wb)End SubPrivate Sub AppEvents_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean)Call BeforeClose(wb, Cancel)End SubAhogy 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 clsAppSub Init()'ezt az egyéni makrófüzet Open eseményében fogjuk meghívniSet AppObject.AppEvents = ApplicationEnd SubSub 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árhozCall AddNewMenuItemEnd IfEnd Sub3. A Personal.xlsb ThisWorkbook eseményeibe pedig tegyük ezt be:
Private Sub Workbook_Open()Call InitEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)Call DeleteControls(True)End SubVagyis 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űtDeleteControlsDim CmdBar As CommandBarDim CmdBarMenuItem As CommandBarControlSet CmdBar = Application.CommandBars("Worksheet Menu Bar")'Add a new menu itemSet CmdBarMenuItem = CmdBar.Controls(CmdBar.Controls.Count - 1).Controls.Add'Set the properties for the new controlWith CmdBarMenuItem.Caption = "Saját Makró1".OnAction = "'" & ThisWorkbook.Name & "'!Kedvencem".Tag = C_TAGEnd WithEnd SubEhhez van egy C_TAG állandó a modul elején definiálva:
Private Const C_TAG = "Makrocska" 'C_TAG legyen egyedi névIlletve fent a kódban az OnAction végén van a makró neve (esetemben "Kedvencem"),
ami ennyit tartalmaz csak:Sub Kedvencem()MsgBox "Palacsinta", vbOKOnlyEnd SubAmi leveszi az pedig ez:
Sub DeleteControls(Optional tuti As Boolean = False)Dim Ctrl As CommandBarControlOn Error Resume NextSet Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)Do Until Ctrl Is NothingCtrl.DeleteSet Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)LoopEnd SubA 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
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
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
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
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:letForrá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
-
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 RangeDim lapnev As StringDim honap As String, nap As String, eredmeny As StringDim magyarHonap, angolHonapDim c As Long, karakter As String * 1angolHonap = 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 adatoknap = ""honap = ""eredmeny = adat'csak akkor fusson le ha még nincs évszámIf InStr(1, adat, lapnev) = 0 Then'karakternként végigmegyünk a cella tartalmánFor c = 1 To Len(adat)'ha szám van akkor a nap tömbbe tesszük, ha betû a hónap tömbbekarakter = Mid(adat, c, 1)Select Case UCase(karakter)Case "0" To "9", "-"nap = nap & karakterCase "A" To "Z"honap = honap & karakterEnd SelectNext cEnd If'angol hónap nevek magyarra cseréléseFor c = 0 To UBound(angolHonap)honap = Replace(honap, angolHonap(c), magyarHonap(c), Compare:=vbTextCompare)Next c'végeredmény összerakásaDim honapok, napokIf Len(honap) > 0 And Len(nap) > 0 Thenhonapok = Split(Left(honap, Len(honap) - 1), "#")'ha van hónap akkor használjukIf IsArray(honapok) ThenIf UBound(honapok) > 0 Then'ha több hónap van, akkor több nap is kellnapok = Split(nap, "-")eredmeny = lapnev & ". " & Replace(honapok(0), "#", "") & ". " & napok(0) & " - " _& Replace(honapok(1), "#", "") & ". " & napok(1)Elseeredmeny = lapnev & ". " & Replace(honapok(0), "#", "") & ". " & napEnd IfEnd IfEnd If'adat.Offset(, 1) = eredmeny 'teszteléshez ezt a sort aktiváld, a következõd kommenteld beadat = eredmenyNext adatEnd SubNem 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 PageMié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 VariantDim regExp As New regExpDim talalatDim eredmeny, c As LongWith regExp.Global = True.MultiLine = True.IgnoreCase = False.Pattern = mintaEnd WithIf regExp.Test(cella) ThenSet talalat = regExp.Execute(cella)ReDim eredmeny(talalat.Count - 1)For c = 0 To UBound(eredmeny)eredmeny(c) = talalat(c).ValueNext cElseeredmeny = "(nincs adat)"End IfBankSzamlak = eredmenyEnd 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:letForrás = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],#"Added Custom" = Table.AddColumn(Forrás, "Számok",eachText.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
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
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
Mivel kicsit zavart ezért itt a javítás.
Sub FormatNumbers()Dim s As Range, sel As RangeDim r As VariantDim 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önarrFormats = ActiveSheet.ListObjects("tFormats").DataBodyRange.ValueSet sel = Intersect(Selection, ActiveSheet.UsedRange)If Not sel Is Nothing Then'kijelölt adatokon végigmegyünkFor Each s In selr = FindFormat(s.Value)If IsArray(r) Then'a cél cella formázását levesszüks.ClearFormats'beállítjuk a formátumots.NumberFormat = r(1)'ha van színezünkIf r(2) <> "" Thenszinek = Split(r(2), ",")If UBound(szinek) = 2 Then s.Interior.Color = RGB(szinek(0), szinek(1), szinek(2))End IfEnd IfNext sEnd IfEnd SubAkit é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
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
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 ExplicitDim arrFormatsSub FormatNumbers()Dim s As RangeDim r As VariantDim 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önarrFormats = ActiveSheet.ListObjects("tFormats").DataBodyRange.ValueSet s = Intersect(Selection, ActiveSheet.UsedRange)If Not s Is Nothing Then'kijelölt adatokon végigmegyünkFor Each s In Selectionr = FindFormat(s.Value)If IsArray(r) Then'a cél cella formázását levesszüks.ClearFormats'beállítjuk a formátumots.NumberFormat = r(1)'ha van színezünkIf r(2) <> "" Thenszinek = Split(r(2), ",")If UBound(szinek) = 2 Then s.Interior.Color = RGB(szinek(0), szinek(1), szinek(2))End IfEnd IfNext sEnd IfEnd SubFunction FindFormat(p As String) As VariantDim i As LongDim pFormat(1 To 2) 'formátum és színkódDim pKezdo As StringDim pHossz As LongpHossz = Len(p)FindFormat = ""If pHossz = 0 Then Exit Function'végigmegyünk a létező formátumokonFor i = 1 To UBound(arrFormats)pKezdo = ""'hossz alapján keresünk egyezéstIf arrFormats(i, 2) >= pHossz And arrFormats(i, 3) <= pHossz ThenpKezdo = arrFormats(i, 1)'kezdõ karakterek alapján keresünk egyezéstIf Left(p, Len(pKezdo)) Like pKezdo Then'ha van egyezés akkor elmentjük és kilépünk a ciklusbólpFormat(1) = arrFormats(i, 4)pFormat(2) = arrFormats(i, 5)FindFormat = pFormatExit ForEnd IfEnd IfNext iEnd FunctionCsak 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
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
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 WorksheetDim rngFormulas As RangeDim wsReport As WorksheetDim a As Long, c As LongDim out As LongSet wsReport = ThisWorkbook.Worksheets("Summary")out = 2With wsReport.Range("A1") = "Lap".Range("B1") = "Cella".Range("C1") = "Képlet"For Each ws In ThisWorkbook.WorksheetsOn Error Resume NextSet rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas, 23)On Error GoTo 0If Not rngFormulas Is Nothing ThenFor a = 1 To rngFormulas.Areas.CountFor 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).Formula2out = out + 1Next cNext aSet rngFormulas = NothingEnd IfNext wsEnd WithEnd 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
Fire/SOUL/CD
#53392
üzenetére
Zéró válasz.
A frissítési jegyzékben sem látok ilyet. -
Mutt
senior tag
válasz
#77257183
#53400
üzenetére
Szia,
Itt az én makrós változatom.
Option ExplicitDim fibonacci(1000) As Variant 'megtalált fibonacci számok listájaSub Valaszt()Dim c As LongDim r As DoubleDim pozicio As Long'Rnd() függvénynek kell, különben nem lesz igazán véletlenszámRandomize'1-es poziciótól indulunkpozicio = 1With 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 ciklusFor c = 1 To 100r = Rnd()'fel-le lépkedünk a listábanIf r < 0.5 Thenpozicio = pozicio + 1ElseIf pozicio > 2 Thenpozicio = pozicio - 2Elsepozicio = 1End IfEnd 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 cEnd WithEnd Sub'rekurzív fibonacci szám generátorFunction FibonacciNum(n As Long)If Not IsEmpty(fibonacci(n)) ThenFibonacciNum = fibonacci(n)Exit FunctionEnd IfIf n = 0 ThenFibonacciNum = 0fibonacci(0) = 0Exit FunctionEnd IfIf n = 1 ThenFibonacciNum = 1fibonacci(1) = 1Exit FunctionEnd IfFibonacciNum = FibonacciNum(n - 1) + FibonacciNum(n - 2)fibonacci(n) = FibonacciNumEnd 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:letForrá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
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
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
Új hozzászólás Aktív témák
- DELL PowerEdge R630 rack szerver - 2xE5-2650v3 (20 mag / 40 szál, 2.3/3.0GHz), 32GB RAM, 55992Ft+ÁFA
- Bomba ár! HP ProBook 650 G5 - i5-8265U I 8GB I 256GB SSD I 15,6" FHD I Cam I W11 I Garancia!
- HIBÁTLAN iPhone 15 Pro 128GB Natural -1 ÉV GARANCIA - Kártyafüggetlen, MS3501, 90% Akkumulátor
- LG 27MR400 - 27" IPS LED - 1920x1080 FHD - 100hz 5ms - AMD FreeSync - Villódzásmentes
- HIBÁTLAN iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3093, 91% Akkumulátor
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest







A képlet: 









üdv



