- Android alkalmazások - szoftver kibeszélő topik
- iPhone topik
- One mobilszolgáltatások
- Telekom mobilszolgáltatások
- Nem várt platformon a OnePlus Nord 5
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Google Pixel topik
- Samsung Galaxy Watch7 - kötelező kör
- Samsung Galaxy A34 - plus size modell
- Samsung Galaxy XCover7 Pro - burokban született One UI
-
Mobilarena
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
dm1970 #52967 üzenetére
Szia,
Több HA esetén átláthatóbb megoldást add Excel 2019-től a HAELSŐIGAZ (angolul IFS) függvény.
A példaként mutatot képletet így lehet átültetni:
=HAELSŐIGAZ(BAL(A6;1)="k";"kék";JOBB(A6;3)="tét";"betét";NEM(HIBÁS(SZÖVEG.KERES("zö";A6)>0));"zöld";JOBB(A6;2)="ll";"toll";1;"")
A képlet végén lévő 1;"" rész arra szolgál, hogyha a korábbi feltételek egyike sem teljesült, akkor ez fog és ilyenkor a üres cellát ad eredményül.
üdv
-
Fferi50
Topikgazda
válasz
dm1970 #52969 üzenetére
Szia!
"miért nem lép tovább a ha függvény a hamis ágra?"
A hiba miatt nem tud tovább lépni, a hibát ki kell kerülni, erre jó a HIBÁS függvény a HA függvénnyel kombinálva:=HA(BAL(A6;1)="k";"kék";HA(JOBB(A6;3)="tét";"betét";HA(HIBÁS(SZÖVEG.KERES("zö";A6));HA(JOBB(A6;2)="ll";"toll";"");"zöld")))
Ezzel a képlettel már nem lesz hibás értéked, valamilyen szót, esetleg üres cellát fogsz kapni eredményként.
Ugyanakkor nem értem, mi a célod ezzel. Arról volt szó, hogy mérési egységet kell meghatározni.... A kulcs szavakat szeretnéd megkapni képlettel ehhez? Vagy valami más a célod?
A kulcs szavak sokkal egyszerűbben meghatározhatók direktben, a képletes meghatározáshoz szabályokat kell felállítani és betartani.
A példádban pl. hol szín jelenik meg, hol tárgy (betét, toll). Ez mire lesz jó?
Következetlenségre nem lehet képletet készíteni.
Mi a gond az általam javasolt megoldással?
Légy szíves mutass legalább egy konkrét példát - mi a kiindulási érték és mi legyen a végeredmény. A közbenső lépések nem kellenek, az majd a megoldásnál kiderül.
Üdv.
Ps. Szerintem a kulcs szavak összegyűjtését nem tudod megspórolni, azok birtokában viszont sokkal egyszerűbb a megoldás. -
válasz
dm1970 #52969 üzenetére
Mint írtam, ez a fajta megközelítésed teljesen rossz...
Mi lenne azzal a +2 szín bevezetésével, amiről írtam?
Megmondom: exponenciálisan nőne meg a képlet hossza (ez még a kisebb gond), de egyúttal a bonyolultsága is, nagyon könnyen lehetne hibázni benne, +egy újabb szó bevezetésével lehetne az egészet újra írni... (betét toll kék esetén sem működik most sem)Szóval ezt a megközelítést -szvsz- engedd el...
VBA makróban írt függvény leegyszerűsítené a dolgot, mert univerzális lenne, azaz mindegy hány színt deklarálsz (persze csak 1-t tartalmazhat 1 adott cella(példádban ez látszódik)), mindegy hány szót tartalmaz az adott cella (szóközzel elválasztva) stb stb, a függvényt nem kell módosítani hozzá.UI: Mondjuk a tényleges táblát jó lenne látni, hátha akkor még van remény...
-
válasz
dm1970 #52967 üzenetére
Ja, hát így már egész más a dolog...
Makróval egyszerűen megoldható, hogy képlettel is, azon még cizellálni kell...
A példádban a színek határoznak meg mindent, a szabály egyszerű:
Ha az adott cellában az 1. szó az egyik szín (1.-3. sor) vagy a 3. szó (5. sor) az egyik szín, akkor az adott színt kell megjeleníteni.
Ha az adott cellában a 2. szó az egyik szín (4. sor), akkor az azt követő szót kell megjeleníteni. Ez az, ami a 6. sorban nem működik, mert ott tollnak kellene megjelennie.Az a megközelítés, amit használni szeretnél, nem jó (JOBB/BAL függvények), hisz ha bekerülne csak 2+ szín (pl. fekete és fehér), már ezzel is teljes káosz lenne a képlet.
De mint írtam, még cizellálok rajta, hogy képlettel meg lehet-e oldani(nem biztos), de szeretem a fejtörőket.
-
Fferi50
Topikgazda
válasz
dm1970 #52960 üzenetére
Szia!
Honnan tudja a képlet, amennyiben nem talál almát, keressen körtét, ha azt sem, akkor ivólét és így tovább?
Jó lenne látni a forrásodat, milyen adatok vannak benne (persze ne a titkosat, csak hasonló formátumút).
Az eddigiek alapján a javaslatom:
Egy táblázatba kiszedném az előforduló termékeket és melléjük a mértékegységet. Ezután csinálnék egy segédoszlopot, ahová kiszedném a termék neveket. Utána már gyerekjáték FKERES függvénnyel megtalálni a szükséges értéket.
Az AB oszlopban van a terméklista, C oszlopban a termékek nevei, a D oszlopban van az, amit a segédoszlopban látni kell.
Az E1 cella képlete jól látszik és húzható lefelé.
Még nézek másik lehetséges megoldást - segédoszlop nélkülit... de ezzel szerintem el tudsz indulni.
Üdv. -
-
válasz
dm1970 #52960 üzenetére
Ha nagyon sok különböző tételed van (pl. 50 féle gyümölcs, meg 80 féle ivólé, meg még lesz jó pár tétel, amit meg pl. literre mérnek), akkor ez a megközelítés felejtős, mármint, hogy 1 cellába, 1 képlettel megoldható lenne. Bizonyos keretek közt megoldható, csak egy kilométer hosszú képlet lesz.
-
Fferi50
Topikgazda
válasz
dm1970 #52930 üzenetére
Szia!
"az excellben ott marad a kijelölés. Az meg gondolom nem megoldható, hogy késleltessem a makró futását."
A kijelölés "eltüntetésére" írd be ezt a sort: Applicaton.CutCopyMode=False a másolás és várakoztatás után.
A makró futását, várakoztatását pl. az Application.Wait paranccsal tudod megoldani.
[link]
Üdv. -
Mutt
senior tag
válasz
dm1970 #52922 üzenetére
Szia,
Nem fog a copy-paste menni.
Excelben van Application.SendKeys "^V" illetve GUI-ban session.findById("wnd[0]").sendVKey V78.
Mindkettőnek az kell. hogy előtte a focus a beviteli mezőn legyen.
Nekem egyik módszerrel sem jött össze.Az hogy a vágólap vátlozik nem kellene, hogy gond legyen. Ha tudsz több infót/példát adni, akkor megnézem.
üdv
-
Mutt
senior tag
válasz
dm1970 #52660 üzenetére
Szia,
SAP GUI beállításoknál kapcsold ki a Notifcation-öket és nem kell többet okéznod.
A makrókat alapból tiltja a rendszer, de lehet engedélyezni őket Excelben a Fájl->Beállítások/Options->Adatvédelmi központ/Trust Center->Adatvédelmi központ beállítása/Trust Center Settings gomb alatt.
Nézd meg a makróbeállításokat és a megbízható helyeket.
üdv
-
Mutt
senior tag
válasz
dm1970 #52644 üzenetére
Szia,
Ahogy olvasom az erdeti kérdést, ha csak letöltesz egy riportot és OK-t kell nyomni, akkor még1xübb a dolog, mert akkor nem kell For-Next ciklus. A VBS szkritpet bemásolod egy VBA modulba, az Application-t mindenhol lecseréled SAPApplication-re.
A felugró ablakban (a wnd szám mondja meg melyik ablakban kell dolgozni, 0 az alap és 1-esével növekszik minden felugró ablakkal) OK-t (a btn utáni szám 0-szokott lenni OK-ra, de ezt a Script Tracker meg tudja mutatni) így lehet nyomni:
session.findById("wnd[1]/tbar[0]/btn[0]").press
üdv
-
Mutt
senior tag
válasz
dm1970 #52644 üzenetére
Szia,
Van programozási tapasztalatod (For - Next ciklus)?
Én MM/FI modulokban dolgozom, onnan tudok példát mutatni.
Egy komplex változat fent van a GitHub-on.
Illetve YT-on Varga Csongor videói is tudnak segíteni.Mielőtt tovább megyünk, pár tanács!
1. Óvatosan a szkriptekkel, mert nagy kárt tudsz okozni!
2. Ha nincs teszt környezeted, ahol tudod ellenőrízni a szkriptet, akkor nagyon legyél körültekintő.
3. A SAP bonyolult, a SAP szkript mégrosszabb. Előbb kérdezz vkit.
4. Használd a Scripting Trackert (letölthető innen), hogy kiderítsd melyik mező miről szól.Itt egy Móricka példa. MM02-es tranzakcióval a 93062409-es anyagnak a material group-ját LEDG101-re írtam át. A script ez lett:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "mm02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "93062409" 'ez az anyagszám
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").caretPosition = 8
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").text = "LEDG101" 'ennek a mezőnek az értékét akarom módosítani vmire
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").setFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").caretPosition = 7
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[0]").sendVKey 0A példámban a szkriptet szeretném lefuttatni másik anyagszámokon (19-es sor) és akár más értéket megadni (24-es sor)
1. Excelben egy lapon megadom hogy mely anyagoknak milyen új értéket akarok megadni
pl.
2. Kell egy For - Next ciklus ami ezen végigmegy.
VBA Editorban egy új modulban ez például az A-oszlopban lévő értéket kiírja.Sub minta()
With ActiveSheet
lastrow = .Range("A" & Rows.Count).End(xlUp).Row
For c = 2 To lastrow
Debug.Print .Range("A" & c)
Next c
End With
End Sub3. Most már csak a SAP scriptet kell ide tenni. Az első 14 sor a SAP-hoz kapcsolódást csinálja, ezt elég egyszer megtenni. Vagyis ez a For-Next elé kerül. A többi lépés pedig bele a For-Next-be.
Annyi javítás kell, hogy az "Application" Excelben már foglalt, így más kell helyette használni pl. "SAPApplication".4. Nekem két változó értékem van az A és B-oszlopban, amit szeretném ha a szkript használna.
A lenti sornak a végén a fix anyagszám helyett kell nekem az A-oszlop értéke.session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "93062409"
A helyes kód a fenti helyett ez lesz:
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = .Range("A" & c)
A
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").text = "LEDG101"
sor helyett pedig ezsession.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").Text = .Range("B" & c)
5. Érdemes egy visszajelzést is adni, hogy melyik sorban járunk és ha kell akkor meg is tudjuk szakítani a futtatást. Ezért a "Next c" elé kerüljön be ez.
DoEvents
.Range("C" & c) = "Kész"6. Rakj ki egy gombot és rendeld hozzá a makrót. Érdemes tesztelni 1-2 kombináción, ha van teszt environment akkor azon, ha nincs akkor a mentést sort kommenteld ki először.
A teljes minta kód:
Sub minta()
If Not IsObject(SAPApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = SAPApplication.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject SAPApplication, "on"
End If
With ActiveSheet
lastrow = .Range("A" & Rows.Count).End(xlUp).Row
For c = 2 To lastrow
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "mm02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = .Range("A" & c)
session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").caretPosition = 8
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").Text = .Range("B" & c)
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").SetFocus
session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MATKL").caretPosition = 7
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[0]").sendVKey 0
DoEvents
.Range("C" & c) = "Kész"
Next c
End With
End SubEzzel készen is vagy, de azért sok mindent lehet rajta fejleszteni mint például
- vannak felesleges sorok (általában a caretPosition-osok ilyenek)
- nincs semmilyen hibaellenőrzés (pl. nincs jogosultságod vmihez, nem jó érték van az inputban)
- nem annyira jó az első kliens első sessionjéhez csatlakozni, lehet hogy éppen másra használod.Ha kell segítség akkor dobd fel ide/keress meg.
üdv
-
Delila_1
veterán
válasz
dm1970 #52013 üzenetére
Könnyedén készíthetsz egyéni nézeteket.
Elrejted, amit kell, utána a Nézet | Munkafüzetnézetek | Egyéni nézetek ablakban Hozzáadás, és ellátod egy névvel.
Másik elrejtések, hozzáadás.
Ugyanitt ki tudod választani az éppen szükséges nézetet.Az Egyéni nézetek ikonon jobb klikk, hozzá tudod adni a gyorselérési eszköztárhoz. Akkor még nem is kell keresgélned a menüszalagon.
-
Fferi50
Topikgazda
válasz
dm1970 #41783 üzenetére
Szia!
Nem kell makrózni.
Az nem baj, ha a beíráskor az A oszlopban #Hiányzik hiba jelentkezik.
Amikor befejezted a beírásokat, akkor kell a B:E oszlopokat átmásolni az I2 cellába. Ezután a Menüszalagon az Adatok - Rendez gombra, majd az OK-ra kattintva kialakul a végeredmény.
(és eltűnnek a hibák)
Üdv. -
Delila_1
veterán
válasz
dm1970 #41781 üzenetére
Feltöltöttem
Használati utasítás a fájlban. -
Capella
senior tag
válasz
dm1970 #41724 üzenetére
Vagy még az, hogy megnyitod az érintett érvényes fájlokat. Ezután az összes hivatkozott munkalapot ideiglenesen áthelyezed a problémás munkafüzetbe.
Ezután az érvényes fájlhivatkozásoknak el kell tűnnie. Most ismét rákeresel az .xls-re, és már csak a problémás, megváltozottaknak kellene benne maradnia a listában.Fájl átnevezés, .xls helyett .xlsx-be, .xlsm-be mentés, mentés másként, ha nincs minden érinett fájl megnyitva,hiba esetén automatikus mentés (version1) is okozhat ilyen problémát.
Az érdekes, hogy a fájlbeli hivatkozásokat nem piszkáltad. -
Fferi50
Topikgazda
válasz
dm1970 #41724 üzenetére
Szia!
Nézz rá a névkezelőre. Ott is lehetnek elrejtve külső hivatkozások, amelyek nem jelennek meg a listában.
Azért az a 2000 hivatkozás gondolom nem 2000 fájlra vonatkozik.
Ha a névkezelő nem hoz eredményt, akkor mégis azokat kell átnézned. A keresésnél kérjél listát. (Ctrl + F Listába mind gomb.)Üdv.
-
Mutt
senior tag
válasz
dm1970 #41543 üzenetére
Szia,
Jöttek már tömbfüggvényes változatok, de itt van pár változat sima függvénnyel:
=SZORZATÖSSZEG((HOSSZ(A1:G1)>0)*($A$8:$G$8))
=HAHIBA(HOL.VAN(SOKSZOR("Z";255);A1:G1);HOL.VAN(2^99;A1:G1))
=KERES(2;1/(A1:G1<>"");$A$8:$G$8)
Az elsőnél hibás lesz az eredmény, ha egy soron belül több találat is lehetséges.
A másik kettőnél pedig nem a legelső találatot adja vissza, hanem a legutolsót így megint hibás lehet az eredmény ha egy soron belül több találat van.üdv
-
Louro
őstag
válasz
dm1970 #41543 üzenetére
Szia,
lehet tömbfüggvénnyel oldanám meg.
A képlet így nézne ki:
=MATCH(FALSE;ISBLANK(A1:H1);0)
Majd nem Enter, hanem CTRL+Shift+Enter. Ezt a képletet pedig lefelé tudod másolniHa magyarul kell, akkor
=HOL.VAN(HAMIS;ÜRES(A1:H1);0)Tök mindegy mivel van feltöltve, visszadja, hogy hol van az első feltöltött cella a sorban.
A VKERES-sel szerintem az volt a baj, hogy eleve megadtál neki egy segédoszlopot a 8. sorban. Na meg a H oszlopban nem tudom mi az a szám, de ahhoz közelítő értéket keres. Mivel nem adtad meg az utolsó paramétert, megközelítő számot keres. Mivel betű van ott, ezért kaptál hibát. A korábbi megoldás elég nyakatekert megoldás volt (számomra).
-
Fferi50
Topikgazda
válasz
dm1970 #38896 üzenetére
Szia!
Sajnos nem látok igazán direkt képletes megoldást.
Viszont a keres-cserél képletekben szerintem elég gyorsan működik, nem kell kézzel átírni az egészet.
Vagy ugyanaz makróval:Range("D1").Formula = Left([a1].Formula, InStr([a1].Formula, "[")) & [i1].Value & Mid([a1].Formula, InStr([a1].Formula, "]"))
Ez a sor a D1 cellába beírja az A1 cellában levő képletet, módosítva az I1 cellában levő fájlnévre.A makrót beírhatod pl. a munkalap Change eseménykezelőjébe.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then 'ha az a1 cella v?ltozott
Range("D1").Formula = Left([a1].Formula, InStr([a1].Formula, "[")) & [i1].Value & Mid([a1].Formula, InStr([a1].Formula, "]"))
End If
End SubValahányszor az A1 cella értékét módosítod, a D1 cella képlete módosulni fog.
Ez persze csak elindító gondolatnak jó, a pontos paramétereket neked kell kiókumulálni.
Természetesen ha a fájlnevekben van szabályosság, azt lehet a makróban is kezelni.Üdv.
-
Fferi50
Topikgazda
válasz
dm1970 #38887 üzenetére
Szia!
Az Indirekt függvény használható, de a komplett értéket kell az adott cellába írni, nem elég a munkafüzet neve. Ráadásul csak akkor ad megfelelő eredményt, ha a forrás munkafüzet nyitva van.
Tehát az A1 cella értéke ''C:\Dokumentumok\[xxx.xlsx]Munka1'!$E$7:$AI$7)
Figyelem, egyenlőségjel nélkül, egy aposztróffal bevezetve (aposztróf jelzi, hogy szövegről van szó.
Viszont xxx illetve utána yyy munkafüzetnek nyitva kell lennie. Bezárt munkafüzetre Indirekt függvénnyel hivatkozva hibaüzenetet kapsz.Üdv.
Új hozzászólás Aktív témák
Hirdetés
- One otthoni szolgáltatások (TV, internet, telefon)
- sziku69: Fűzzük össze a szavakat :)
- PlayStation 5
- Android alkalmazások - szoftver kibeszélő topik
- Sony MILC fényképezőgépcsalád
- Elektromos cigaretta 🔞
- Konzolokról KULTURÁLT módon
- iPhone topik
- Stellar Blade
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- További aktív témák...
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Új, bontatlan World of Warcraft gyűjtői kiadások
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- Assassin's Creed Shadows Collector's Edition PC
- Bomba ár! MacBook AIR 13" 2018 - i5-8210Y I 16GB I 512SSD I OS X Sonoma I Cam I Gari!
- Akciós Windows 10 / 11 Pro OEM Licenc Kulcs 100% eredeti, jogtiszta!
- BESZÁMÍTÁS! Gigabyte H610M i5 12400F 32GB DDR4 512GB SSD Intel ARC A770 16GB Rampage SHIVA 650W
- ÁRGARANCIA!Épített KomPhone Ryzen 7 9800X3D 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- AKCÓÓÓ!!! Panasonic CF-XZ6 AIO all-in-one laptop tablet 2k touch i5-7300u speciális ütésálló
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest