Hirdetés
- Graphics: Telefonvásárlási kálváriám....avagy clickbait cím: Horror a hardveraprón
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Elektromos rásegítésű kerékpárok
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- gerner1
- Gurulunk, WAZE?!
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
-
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
válasz
Misi_D
#49483
üzenetére
Szia,
A héten tanultam, hogy Pivot-ban a sor értékeket át lehet nevezni. Állj rá az "(üres)" cellára és fent a szerkesztő lécben (vagy F2-vel helyben) írd át egy szóközre az értéket.
Visszacsinálni ezt trükkös, de kb. 10-et visszaolvasva látsz tőlem egy makrós megoldást, illetve az eredeti kérdezőtől egy másikat.
üdv.
-
-
Mutt
senior tag
válasz
Misi_D
#45222
üzenetére
Szia,
Ezt próbáld ki.
1. Fájl importálása Power Query-be.
2. Majd csoportosítás és a keresd meg id-nként a ciklusszámláló maximumát.
3. Most jön egy furcsa lépés, de így a legyegyszerűbb. Szóval lekérdezések egyesítése és ott válaszd ki a táblát kétszer és add meg hogy az id és a ciklusszámláló alapján keressen belső egyezést.
4. Jön a második furcsa lépés, de ehhez M-kódot kell módosítani. A szerkesztő lécen vmi ilyen kód lesz:
Ahol a #"Sorok csoportosítva" egy hivatkozás egy korábbi lépésre aminek egy tábla az eredménye. Power Query-ben nem kötelező a közvetlen előző lépésre hivatkozni, lehet bármelyik korábbira hivatkozni. Nekünk pedig az a lépés kell ami még az eredeti (nem csoportosított adatsort) tartalmazza. Az én esetmben ezt a lépést "Típus módosítva"-nak hívják. Még egy módosítás kell, "max" oszlop nincs az eredeti táblázatban hanem ott nekem "counter" van ezt is le kell cserélni.
Ha ezeket javítod akkor ez lesz az eredmény:

5. Most már csak ki kell bontanod a Sorok csoportosítva oszlopot és megkapod kívánt eredményt.
üdv.
Ps. Ha a nagy fájl miatt lassú lenne a feldolgozás, akkor még egy trükk. Lehet puffereltetni egy adott táblát.
Az én esetemben a "Típus módosítva"-t érdemes. Ehhez azt kell csinálni, hogy ezen lépés után beszúrsz egy új lépést (pl. új oszlop hozzáadása). Majd a kapott M-kódot felülírod ezzel: = Table.Buffer(#"Típus módosítva") -
Fferi50
Topikgazda
válasz
Misi_D
#45226
üzenetére
Szia!
Egy lehetőség, logikai szinten leírva:
Az első előfordulást beteszed a munkalap következő sorába. A következő előfordulásnál megkeresed, hol van a munkalapon, megnézed a másik változó értéke milyen, ha nagyobb, akkor kicseréled a sort az újra, ha nem, akkor hagyod békében.
Ezt csinálod végig a fájlon.
Előny, hogy akkor is használható, ha a csv fájlban nem sorban vannak az ID-k.
A munkalapon kereshetsz a Range.Find metódussal vagy kereső függvényekkel egyaránt.
A beolvasásnál a kinput változóban a teljes sor kerül. Ebből neked kell meghatározni, hol az id és a számodra szükséges változó adata. Ha tudod, hogy hanyadik oszlopban van, akkor pl. használhatod a Split függvényt, amelyik a megadott határoló (pl. pontosvessző - ; - ) szerint egy tömbbe transzformálja a szöveget. A tömb indexe 0-val indul. Innen már meg tudod kapni a keresett adatokat.
Egy példa:Sub beolvaso()Dim utja As String, fnev As String, kinput As String, fc As Byte, cl As Range, bejott, holvan As Rangeutja = "C:\Users\user\Documents"fnev = "\xxx.csv"fc = FreeFile()Open utja & fnev For Input As #fcSet cl = ActiveSheet.Cells(1, 1) 'az aktív munkalap első cellájába kerül az első adat'ha nem ide szeretnéd, akkor változtasd meg a Cells paramétereitDo While Not EOF(fc)Line Input #fc, kinputbejott = Split(kinput, ";") 'egy tömbbe transzformáljuk a bejött adatot'megkeressük az azonosítót az első oszlopban. Ha nem ide tetted, akkor írd át az oszlop számát'ha nem az input első adata az ID akkor bejott(0) paraméterét írd át a megfelelő oszlopraSet holvan = ActiveSheet.Columns(1).Find(what:=bejott(0), LookIn:=xlValues, lookat:=xlWhole)If holvan Is Nothing Then 'ha még nincs, akkor bejegyezzük az első szabad sorba'cl.Value = kinput 'ez a sor egy cellába tenné a teljes inputotRange(cl, cl.Offset(0, UBound(bejott))).Value = bejott ' így viszont külön cellába kerülnek az értékekSet cl = cl.Offset(1, 0) 'ez lesz a következő üres sor első cellájaElseIf holvan.Offset(0, 2).Value < bejott(2) Then 'ha a változó nem a második az adatok között, akkor'mindkét 2-est írd át megfelelőre - az offset és a tömb paramétere is 0-tól indul.Range(holvan, holvan.Offset(0, UBound(bejott))).Value = bejott 'kicseréljük az újraEnd If'MsgBox kinputEnd IfLoopClose #fcMsgBox "Az input kész!"End SubRemélem, sikerül.
Üdv. -
Fferi50
Topikgazda
válasz
Misi_D
#45224
üzenetére
Szia!
Excelben van lehetőség arra is, hogy egy fájlt direkt eléréssel nyiss meg és olvass be. Így megoldható, hogy csak azt a rekordot tedd be a munkalapra, amelyikre szükséged van.
Itt a példa:Sub beolvaso()Dim utja As String, fnev As String, kinput As String, fc As Byteutja = "C:\Users\user\Documents"fnev = "\xxx.csv"fc = FreeFile()Open utja & fnev For Input As #fc ' file megnyitásaDo While Not EOF(fc)Line Input #fc, kinput 'egy teljes sor beolvasása a fájlbólMsgBox kinput 'itt megnézheted, mit olvastál be, ennek a helyére ill. ez után jöhet feldolgozásLoopClose #fc ' fájl bezárásaEnd Sub
Ez csak a fájlművelet, természetesen az excel munkalap kezelését is meg kell oldanod előtte illetve közben.
Remélem hasznos lesz neked.
Itt találsz a Line Input-ról súgót, illetve innen megtalálod a direkt fájlkezelés példáit is. [link]
Üdv. -
Delila_1
veterán
-
Fferi50
Topikgazda
válasz
Misi_D
#42744
üzenetére
Szia!
Használhatod hozzá a Solvert. A napi értékesítések mellé felveszel két segédoszlopot. Az egyikbe 0 és 1 kerül, a másikba az értékesítés és a mellette levő 1/0 szorzata. Ennek az összegét kell célértékként megadnod. Változóként pedig a 0/1-es oszlopot. Továbbá korlátozni kell ennek az oszlopnak a felvehető értékeit 0 és 1-re.Üdv.
Új hozzászólás Aktív témák
Hirdetés
- Graphics: Telefonvásárlási kálváriám....avagy clickbait cím: Horror a hardveraprón
- Hogyan verte le egy telefon chip az egész laptop ipart? – x86 vs ARM
- BestBuy topik
- Tőzsde és gazdaság
- Packeta
- Shield TV-t csinált a Shieldből az NVIDIA
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Xiaomi 17 - még mindig tart
- PlayStation 5
- Autós topik
- További aktív témák...
- PC Game Pass előfizetés
- Játékkulcsok olcsón: Steam, Uplay, GoG, EA, Xbox stb.
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Game Pass Ultimate előfizetések 3 - 36 hónapig azonnali kézbesítéssel! 13 hónap ultimate - 50.000 ft
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Mini Pc HP ProDesk 600 G4 / EliteDesk 800 G5 // 6-9. gen // i3 / i5
- Lenovo Thinkcentre M720s SFF,i3-8100,8GBDDR4,256GB NVMe SSD,WIN11
- iPhone 13 128GB 89% (1év Garancia)
- Prémium minőségű HOFI üvegfóliák Tech Protect tokok és 20W Adapterek iPhone 13 14 15 16 17 szériához
- iPhone 15 Pro Max 256GB 100% (1év Garancia)- ÚJ EREDETI AKKUMULÁTOR - AKCIÓ
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

Fferi50