Hirdetés
- Azonnali VGA-s kérdések órája
- HiFi műszaki szemmel - sztereó hangrendszerek
- Ez a tágas mikrotorony már faberakással is választható
- Androidos tablet topic
- Milyen hangkártyát vegyek?
- Milyen TV-t vegyek?
- Harcba és Rómába vezet az új AMD Software
- Bambu Lab 3D nyomtatók
- A Sony megmutatja milyen monitor illik a PlayStation 5-höz
- Canon MILC: EOS R és M topik
-
PROHARDVER!
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,
Kösz a pontosítást. Félreértelmeztem a dolgot, a makró ez esetben egyszerűbb mivel az első oszlopban van egy azonosító rész (a pont előtti), ami alapján egybe kell tenni az adatokat.
A run-time error-t azért kapod, mert a makró úgy működik hogy előbb kijelölöd egérrel azt a részt ahol a bemeneti adatok vannak és utána indítod el.
A
Set adatsor = Intersect(Selection, ActiveSheet.UsedRange)részben a Selection jelenti az általad kijelölt tartományt, az Activesheet... pedig az összes tartományt jelenti ahol van adat. Ha fix helyen van a bementi adatod (pl. B1-es cellától indulva lefelé),
akkorSet adatsor = Range("B1").CurrentRegionműkődik.Option ExplicitSub Transzponalas()Dim adatsor As RangeDim adatok()'tegyük a kijelölt bemeneti adatokat egy tömbbeSet adatsor = Intersect(Selection, ActiveSheet.UsedRange)adatok = adatsor'kérdezzük meg hova kerüljön az eredményDim cel As RangeSet cel = Application.InputBox(Prompt:="Add meg hova kerüljön az eredmény!", Title:="Információ", Type:=8).Range("A1")'nézzük meg nem írjuk-e felül a bemeneti tartománytIf Not Intersect(adatsor, cel) Is Nothing ThenCall MsgBox(Prompt:="A cél terület beleér a bemenő adatokat tartalmazó tartományba", Buttons:=vbOKOnly, Title:="Hiba")Exit SubEnd If'ebbe a tömbbe fogjuk gyűjteni az eredménytDim kimenet()ReDim kimenet(1 To 2)Dim x As LongDim azonosito As String, fsplitDim v_sor As Longv_sor = 0With cel.ParentFor x = 1 To UBound(adatok, 1)'a legelőször látott értékeket eltároljukIf x = 1 Thenkimenet(1) = adatok(x, 1)kimenet(2) = adatok(x, 2)'szakasz azonosító meghatározása referenciáhozfsplit = Split(kimenet(1), ".")azonosito = fsplit(0)Else'aktuális sorban keressük meg a szakasz azonosítótfsplit = Split(adatok(x, 1), ".")'ha azonos mint az előző, akkor'1) hozzáadjuk a kimeneti tömbhöz az értékeketIf fsplit(0) = azonosito ThenReDim Preserve kimenet(1 To UBound(kimenet) + 2)kimenet(UBound(kimenet) - 1) = adatok(x, 1)kimenet(UBound(kimenet) - 0) = adatok(x, 2)Else'ha nem azonos a szakasz azonosító, akkor'1) kiírjuk a "kimenet"-et'2) növeljük a sorszámot ahova az eredményeket tesszük'3) töröljük a "kimenet" tartalmát'4) elmentjük az új szakasz azonosítótcel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetv_sor = v_sor + 1ReDim kimenet(1 To 2)kimenet(1) = adatok(x, 1)kimenet(2) = adatok(x, 2)azonosito = fsplit(0)End IfEnd IfNext x'ha a ciklus végén maradt vmi a tömbben írjuk kiIf kimenet(1) <> "" Thencel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetEnd IfEnd WithEnd SubMS365-ben vannak újabb függvények, amelyek tudnak segíteni.
A képlet:=LET(adatok;A1:B20;kodok;OSZLOPVÁLASZTÁS(adatok;1);azonositok;EGYEDI(SZÖVEGELŐTTE(kodok;"."));csoportok;REDUCE("";azonositok;LAMBDA(a;c;FÜGG.HALMOZÁS(a;SZÖVEGFELOSZTÁS(SZÖVEGÖSSZEFŰZÉS("|";IGAZ;SZŰRŐ(adatok;SZÖVEGELŐTTE(kodok;".")=c));"|"))));HAHIBA(ELTÁVOLÍT(csoportok;1);""))
Hogyan működik?
1) LET-el változókat lehet a képletben létrehozni és azokkal műveleteket végezni. Az első paraméter a változó neve és utána egy művelet, pl. "adatok" a változó neve és utána a "A1 : B20" a tartomány ahonnan kellenek az adatok. A LET-ben az utolsó paraméter egy művelet, aminek az eredményét kiírja az Excel.
2) Szóval bemeneti adatok első oszlopából csináltam egy listát, amely a pont előtti részeket visszaadja minden sorra ("F1-01", ... "F1-02"), és ebből csak az egyedi értékeket tartottam meg (ez kerül be az "azonositok" változóba).
3) Ezek után a SZŰRŐ függvénnyel az eredeti adatsorból kinyerem az egyik azonosítóhoz tartozó értékeket. Az eredményt egy sorba kell tenni, itt jön az a trükk hogy előbb összefűzzük az elemeket egy cellába olyan elválasztó jellel, ami nincs az adatsorban, majd ezt ugyanezen elválasztó jel szerint feldaraboljuk. Belül van a SZÖVEGÖSSZEFŰZÉS ahol a "|" (pipe) jelet használtam elválasztónak, és kívül van a SZÖVEGFELOSZTÁS szintén pipe-al.
4) A REDUCE függvény segít abban hogy a 3-as lépésben lévő szűrést mindegyik azonosítóval megcsináljam. Mindegyik szűrés eredményét egymásra teszem (függőleges halmozás).
5) Csinosítani kell a végeredményt, mert nem minden sorban lesz ugyanannyi oszlop.üdv
-
Sesy
aktív tag
szia,
bemásoltam a kódot egy modulba, hogy kipróbáljam.
a 8. sorban "adatok = adatsor" Run-time error '13': Type mismatch hibával megállt...
lehet én csináltam valamit rosszul, majd reggel újra próbálkozom
"hogy a második oszlopban ha egy nagyobb számot látunk mint az előző sorban"
ezt nem értem, de lehet, hogy nagyon késő van már...a második oszlopban értékek vannak, amik a az első oszlopban lévő kódokhoz tartoznak.
az első oszlopban van egy szakasznak a jele (F1-01.1) a másodikban pedig a szakasz hossza (4 (méter) )a kód a következő F1 csoportban lévő 01-es sokszög 1 oldala a hozzátartozó érték pedig 4 (méter) és így tovább...
office365 van a benne lévő excel elvileg mindent (is) tud
csak érteni kellene hozzá... -
Mutt
senior tag
Szia,
Késő este ezt hoztam össze neked.
Option ExplicitSub Transzponalas()Dim adatsor As RangeDim adatok()'tegyük a kijelölt bemeneti adatokat egy tömbbeSet adatsor = Intersect(Selection, ActiveSheet.UsedRange)adatok = adatsor'kérdezzük meg hova kerüljön az eredményDim cel As RangeSet cel = Application.InputBox(Prompt:="Add meg hova kerüljön az eredmény!", Title:="Információ", Type:=8).Range("A1")'nézzük meg nem írjuk-e felül a bemeneti tartománytIf Not Intersect(adatsor, cel) Is Nothing ThenCall MsgBox(Prompt:="A cél terület beleér a bemenő adatokat tartalmazó tartományba", Buttons:=vbOKOnly, Title:="Hiba")Exit SubEnd If'ebbe a tömbbe fogjuk gyűjteni az eredménytDim kimenet()ReDim kimenet(1 To 2)Dim x As LongDim utolso_ertek As DoubleDim temp1, temp2Dim v_sor As Longv_sor = 0With cel.ParentFor x = 1 To UBound(adatok, 1)'a legelőször látott értékeket eltároljukIf x = 1 Thenkimenet(1) = adatok(x, 1)utolso_ertek = adatok(x, 2)kimenet(2) = utolso_ertekElse'adjuk hozzá a további értékeket, ehhez terjesszük ki a tömbbötReDim Preserve kimenet(1 To UBound(kimenet) + 2)kimenet(UBound(kimenet) - 1) = adatok(x, 1)kimenet(UBound(kimenet) - 0) = adatok(x, 2)'ha a korábban tároltnál nagyobb értéket látunk, akkor tegyük az alábbiakat'1) levágjuk a "kimenet" utolsó 2 elemét és eltároljuk őket'2) kiírjuk a "kimenet"-et'3) növeljük a sorszámot ahova az eredményeket tesszük'4) töröljük a "kimenet" tartalmát és beletesszük az 1-es lépésben tárolt értékeketIf adatok(x, 2) > utolso_ertek Thentemp1 = kimenet(UBound(kimenet) - 1)temp2 = kimenet(UBound(kimenet) - 0)ReDim Preserve kimenet(1 To UBound(kimenet) - 2)cel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetv_sor = v_sor + 1ReDim kimenet(1 To 2)kimenet(1) = temp1kimenet(2) = temp2utolso_ertek = temp2Elseutolso_ertek = adatok(x, 2)End IfEnd IfNext x'ha a ciklus végén maradt vmi a tömbben írjuk kiIf kimenet(1) <> "" Thencel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetEnd IfEnd WithEnd SubAdtam hozzá megjegyzéseket.
Amit én gondoltam végig, hogy a második oszlopban ha egy nagyobb számot látunk mint az előző sorban, akkor az előző sorig látott dolgokat ki kell írni és egy új sorba kell tenni majd az adatokat amíg megint találunk egy nagyobb számot mint az előző sorban.A kód egy tömbbe elkezdi gyűjteni az adatokat és ha jön a feltétel, akkor a tömb utolsó két elemét kivéve kiírjuk az addigi tartalmat. A tömböt nullázuk az aktuális sorban levő értékeket újra beletesszük és megyünk tovább. Közben mindig elmentjük egy változóba a második oszlop értékét.
A kódban ami haladó VBA dolog:
1) tömbök menetközbeni átméretezése (ReDim)
2) tömbök tartalmának munkalapra kiírása (cel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenet)Szerintem makró nélkül is megoldható a feladat. Power Query vagy az újabb Excel függvényekkel (LET és FÜGG.HALMOZÁS). Próbáljuk meg azt is?
üdv
-
Sesy
aktív tag
Sziasztok,
Most ismerkedem a vba programozással, így hát vannak hiányosságaim...A következőt szeretném megoldani:
Van egy bejövő adatsorom, ami két oszlopból áll, egy kódból és egy hozzá tartozó értékből.
Ezeket kellene átrendezni az ábrán látottak szerint. A bejövő adatok teljesen dinamikusan változnak, de sorban vannak minden esetben.
Én azon az úton indultam el, hogy ha a kód utolsó értéke eléri a maximumot (ez dinamikusan változhat 1-20-ig) és 1-re vált akkor új sorba kell kezdeni az adatok másolását.
Az adatok ebben a formában jönnek ki egy programból és a szerkesztett formában kellene vissza töltenem egy másik táblázatba. Jó lenne nem kézzel másolgatni, mert előfordulhat több 100 sornyi bejövő adat, amibe bele lehet hibázni.Odáig eljutottam, hogy az adatokat beolvassam a megfelelő helyre és a kimenő adatokat vissza illesszem a másik táblázatba egy-egy makró segítségével. Az átalakítással is próbálkoztam, de kevés vagyok hozzá sajnos.
Hálás lennék, ha valaki segítene megoldani a problémát.
Köszönöm:
g.
-
Mutt
senior tag
válasz
Lasersailing
#54730
üzenetére
Két megoldás:
1) Sheets(sob).Cells(3, sob_om).Comment.Text Sheets(sob).Cells(3, sob_om).Comment.Text & vbNewLine & "új megjegyzés"2) Sheets(sob).Cells(3, sob_om).Comment.Text vbNewLine & "új megjegyzés", Len(Sheets(sob).Cells(3, sob_om).Comment.Text)+1
-
Fferi50
Topikgazda
válasz
Lasersailing
#54730
üzenetére
Szia!
Pl.:ktext=Range("A1").Comment.TextRange("A1").Comment.Text Text:=chr(10) & "Új comment", Start:=len(ktext)+1, Overwrite:=False
A := kombinációval a paramétereknek tudunk értéket adni.
Üdv. -
Fferi50
Topikgazda
válasz
Lasersailing
#54728
üzenetére
Szia!
A"Sheets(sob).Cells(3, sob_om).Comment.Text"sorba nem kell egyenlőségjel, szóköz után írhatod a szöveget, amit bele szeretnél tenni, mert az paraméter.
Comment.Text method (Excel) | Microsoft Learn
Üdv. -
Lasersailing
senior tag
Sziasztok,
excel VBA-ban szeretnék comment mezőbe írni adatot, az alábbi sorok segítségével:
If Sheets(sob).Cells(3, sob_om) = Sheets(amopo).Cells(amopo_sm, 4) ThenSheets(sob).Cells(3, sob_om).Comment.Visible = TrueSheets(sob).Cells(3, sob_om).ClearCommentsSheets(sob).Cells(3, sob_om).AddCommentSheets(sob).Cells(3, sob_om).Comment.Text = "Due date: " & Sheets(amopo).Cells(amopo_sm, 7).Value & Chr(10) & "Open item: " & Sheets(amopo).Cells(amopo_sm, 10).ValueEnd IfMagyarán ha az SOB sheet megfelelő cellája megegyezik az AMOPO sheet megfelelő cellájával írja be commentbe a második sheet két cellájának értékét.
A commentet hozzáadja üresen, de amikor a comment értékét szeretném feltölteni hibaüzenetet ad:
"run time error 438, object doesnot support this property or method"
Mit rontok el? -
föccer
nagyúr
PQ és PowerBI is elérhető, de egyiket sem használom igazán. Tudom kellene, de bele ragadtam az excelbe, lehet túlontúl otthonos már nekem. Azóta tudom, könnyűszerrel megtalálhattam volna a választ, ha elmém korlátoltabb, vagy ha képes kiszabadulni a tökéletesség bűvköréből.
-
Mutt
senior tag
válasz
underdark
#54723
üzenetére
Szia,
Kicsit haladóba ment át a válaszom, ha vmi nem világos/pontosítást igényel akkor kérdezz nyugodtan. Akár küldj mintát és belerakjuk a képleteket és onnantól menni fog.
Kell hozzá egy "adatbázis", amely tartalmazza hetente az adatokat.
Vhogy így (a mintát AI generálta!):
Fontos, hogy az adatok egymás alatt legyenek. Csábitónak tűnik, hogy egy sorban van egy zeneszám és a heti lejátszásokat mellé oszlopokba írjuk (pl. E-ben a 40 heti, F-ben a 41 heti és így tovább), de ez a feldolgozást nehezíti meg. Szóval sorokban legyenek az adatok.
Amit lehet ezen még javítani azt adatbázis normalizációnak hívnak. Ebben a példában egy elütési hiba (pl. "Greenday", "Green day", "Green Day" vagy akár "green day") már gondot okozhat. Ezt normalizációval érdemes orvosolni, de most hagyjuk figyelmen kívül.
Ezek után kimutatással lehet eredményt mutatni.

Itt a trükk, hogy nem egyszerű pivot, hanem power pivot-ot használtam, mert van két számításom. Az egyik a legutolsó héthez tartozó lejátszásokat adja meg, a másik pedig az egy héttel korábbiakat.
Ezeket Power Pivot menüben a Measures opció alatt lehet létrehozni:

A képletek (a Power Pivotban csak angol nyelven használhatóak a képletek):=var utolso=CALCULATE(MAX(Range[Hét]);ALL(Range))return CALCULATE(SUM(Range[Hányszor játszották?]);Range[Hét]=utolso)illetve
=var elozo=CALCULATE(MAX(Range[Hét]);ALL(Range))-1return CALCULATE(SUM(Range[Hányszor játszották?]);Range[Hét]=elozo)Ezeket a számokat ha behúzzuk a kimutatásba, akkor megkapjuk hogy melyik számot az utolsó hetekben hányszor játszották.
A rangsort a kimutatásban lehet beállítani. Az "aktuálishét" mezőjénél a második fülön lehet számításokat végezni, itt a rangsort választottam. Ugyanezt a másik héttel megtéve megkapjuk az akkori helyezést. (Angol Excelben vagyok, de hasonló helyen van magyarban is.)
Végül pedig a két rangsort kell összehasonlítani, hol volt előrelépés vagy visszaesést vagy nem volt mozgás. Ehhez a "Mozgás" oszlopban ezt a képletet használtam:=IFS(AND(H4<>"";I4<>"";H4>I4);1;AND(H4<>"";I4<>"";H4<I4);-1;AND(H4<>"";I4<>"";H4=I4);0;1;"")
Végül pedig egy feltételes formázást tettem erre az oszlopra.üdv
-
-
underdark
aktív tag
Sziasztok
Egy saját zenei toplistán dolgozok, egy top 100 zenekar hallgatottság szerint
Szóval igazából az nincs meg a fejemben, hogy tudnám úgy megcsinálni, hogy amikor frissítem magamnak időnként és van változás, akkor azt egy nyíllal mutassa vagy valami hasonló pl ha a 10. feljebb lép
Itt akadok el igazából, hogy nem tudom ezeket a különböző tabellákat pl labdarúgás, zenei chartlistenek hogy készítik a háttérben
Én olyanra gondolok, hogy elsőnek kell egy kiinduló lista, majd egy frissített lista, és minden egyes frissítésnél az előző lesz a alap lista amihez viszonyítom
csak ez így elég fszságnak tűnik, csak van más megoldás is
Köszi!
-
Mutt
senior tag
válasz
-szabi-
#54721
üzenetére
Szia,
Excel verziótól függően ezekkel lehet próbálkozni:
1) Ha a szöveg végén van a pénznem, akkor egyszerűen levágjuk az utolsó pár karaktert (pl. 3-at)=--BAL(A1;HOSSZ(A1)-3)
2) Ha MS365-ön vagy, akkor van reguláris kifejezés is:=--REGEXKIVONÁS(A1;"[0-9]*[ 0-9]*")
3) Ha Office2021 vagy újabbad van, akkor van SORSZÁMLISTA, REDUCE és LET is. Itt két megoldás amik hasonlóan működnek (a szöveg.keresen belül fel vannak sorolva, hogy mely karaktereket tartsuk meg):=--REDUCE("";KÖZÉP(A1;SORSZÁMLISTA(HOSSZ(A1));1);LAMBDA(a;c;a&HA(SZÁM(SZÖVEG.KERES(c;"0123456789,"));c;"")))=LET(karakter;KÖZÉP(A1;SORSZÁMLISTA(HOSSZ(A1));1);--SZÖVEGÖSSZEFŰZÉS("";IGAZ;HA(SZÁM(SZÖVEG.KERES(karakter;"0123456789,"));karakter;"")))4) Excel 2013-tól van villámkitöltés (Kezdőlap - Szerkesztés - Kitöltés - Villámkitöltés) ami ha egymás alatt vannak az értékek, akkor a mellette lévő oszlopban pár példát megadva kitölti a többit.
5) Power Query is járható.
6) Végső megoldás pedig egy UDF (VBA Macro) ha a fentiek nem tetszenek. Ekkor a 2 vagy 3-as opcióban leírtakat valósítjuk meg VBA-ban.
üdv
-
-szabi-
addikt
Weboldalról kimásolt számokat szövegként tárolja a cellákban szóközökkel és pénznemmel.
Mi a legegyszerűbb módja, hogy számmá vagyis pénznemmé alakítsam? -
Mutt
senior tag
válasz
föccer
#54710
üzenetére
Szia,
1) XLSB formátummal elég nagy méret csökkenést lehet elérni. Pl. egy 75 MB xlsx fájl (40 oszlop és 500.000 sor, 75 millió karakter) nekem 22 MB-os lett. Egy hátránya van, ha sérül a fájl (közös megosztásnál ez esélyes lesz), akkor bukta lehet (backup sűrűn),
2) Ketté választanám a feladatokat:
- külön lenne egy fájl (javasolt hogy inkább egy CSV/TXT fájl legyen) ami tartalmazza a logokat (a fenti példa xlsx CSV-ként mentve 72 MB-os lett).
- egy másik ami a riportokat tartalmazza. Power Query-vel be lehet frissíteni és azt mutatni ami kell. Ha csak adatmodellben tárolod az adatokat, akkor ez az Excel nem lesz olyan nagy. A 72 MB-os CSV adatamodellbe téve és egy egyszerű pivottal 19MB-os xlsx fájlt adott. Be lehet állítani, hogy minden megnyitáskor frissüljön a háttérben, így a friss adatok is be fognak kerülni. A CSV/TXT fájlt gyorsabban feldolgozza a PQ mint egy akár kisebb XLSX fájlt!3) El kell engedni az Excel-t adatok tárolására. Kell egy adatbáziskezelő (pl. a MYSQL/MARIADB egy könnyen kezelhető, ingyenes megoldás) az adatokhoz. Ha a a friss logokat nem lehet egyből az adatbázisba rakni, akkor Python-al lehet automatizálni a folyamatot.
Ezek után a vizualizáció: ha kell akkor maradhat az Excel és PQ-val lehet az adatokat lekérdezni. A PQ gyorsabb lesz ez esetben mint a TXT fájlnál.
Ha az Excel-t lehet cserélni, akkor Power BI.
Itt már lesz/lehet "Query folding" ami nagyságrendekkel tudja meggyorsítani a lekérdezést és teljesen interaktívvá lehet tenni az adatokat.üdv
-
Fferi50
Topikgazda
Szia!
Borzasztóan egyszerű??? az oka:
A Thisworkbook mindig azt a munkafüzetet jelenti, amiből a makró elindult. Ha a Personalból indítod az ikonnal, akkor azt. Ha a munkalapra/munkafüzetbe másolod és onnan indítod, akkor pedig az a munkafüzet.
Így aztán - mivel a Personal aktív munkalapján nyilvánvalóan nincsenek adatok, ezért nem is talál semmit.
Megoldás szerintem, hogy a Thisworkbook helyett ActiveWorkbook legyen a hivatkozás.
Üdv. -
lappy
őstag
válasz
Fferi50
#54716
üzenetére
Public Sub OszlopbaTördelésOszloponként()
Dim ws As Worksheet
Dim lastRow As Long
Dim chunkSize As Long
Dim skipCount As Long
Dim i As Long
Dim targetStartRow As Long
Dim pasteRow As Long
Dim pasteCol As Long
Dim dataRow As LongSet ws = ThisWorkbook.ActiveSheet
' Kérdés: hány elemet hagyjon ki
skipCount = Application.InputBox("Hány elemet szeretnél kihagyni az elején?", "Elemek kihagyása", Type:=1)
If skipCount < 0 Then Exit Sub' Kérdés: hány elemet másoljon egy oszlopba
chunkSize = Application.InputBox("Hány elemet szeretnél egy oszlopba másolni?", "Osztás megadása", Type:=1)
If chunkSize <= 0 Then Exit Sub' A oszlop utolsó adat sor
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row' Meghatározzuk, hova kezdje a másolást (ha már volt előző futás)
If Application.WorksheetFunction.CountA(ws.Range("B:ZZ")) = 0 Then
targetStartRow = 1
Else
targetStartRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1
End If' Másolás
dataRow = skipCount + 1
pasteCol = 2 ' B oszlop
pasteRow = targetStartRowDo While dataRow <= lastRow
' Egy oszlop feltöltése chunkSize elemmel
For i = 1 To chunkSize
If dataRow > lastRow Then Exit For
ws.Cells(pasteRow, pasteCol).Value = ws.Cells(dataRow, 1).Value
pasteRow = pasteRow + 1
dataRow = dataRow + 1
Next i' Következő oszlop, vissza a kezdő sorra
pasteCol = pasteCol + 1
pasteRow = targetStartRow
LoopMsgBox "? Kész! Az adatok oszloponként lettek átmásolva."
End Sub
itt a teljes kód és a
Do While dataRow <= lastRow részt hagyja ki -
KAMELOT
titán
Sziasztok!
Egy kis segítség kéne!
Van egy nagy méretű fájlom benne 8000 sor kb.
Néha azt csinálja, hogy amikor mentem akkor RECOVER csinál aztán újraindul a excel és nem menti el!
SAVE----valamit gondolkozik aztán újraindul az Excel vagy cska simán kilép!
Ezt megcsinálom 20-30x aztán megint jó egy darabig......az olyan 5-6x mentés!
Érdekes mert más excel fájlt meg simán ment!
Ez mitől lehet?Köszönöm előre is ha valaki tud segíteni!
Szerk: Feldobott valamit az EXCEL, hogy ez régi formátum.....Na most már jó minden!
Egyszerű dolgok.....nem is figyeltem erre!
-
-
lappy
őstag
personal ban van két darab makró amihez rendeltem 1-1 ikont az egyik lefut a másik nem
viszont ami nem fut le munkalapra bemásolva teljesen jól működik
hol lehet a hiba? -
föccer
nagyúr
Sziasztok!
Szokásos brainstorming.
Egy ~100 MB-os file ami hálózaton van. Van benne log. Ki nyitja meg, hová menti, mit nyomtatott ki, melyik nyomtatón, ilyesmi. Alapértelmezetten mindenkinél be van kapcsolva az autosave, de nem mindenkinek. A fáljt alapvetően bármi nézheti, mert jogosultság korlátozása nincs, ugyan akkor (amolyan KPI jelleggel) látni szeretnék, hogy ki dolgozott rajta. A fájl egy adatgyűjtő/elemző eszköz, ami segíti a felhasználók munkáját, de az usereknek nem kell adatot felvinniuk, csak a rendelkezésre álló adatok között legördíthetőből/kattintással választani. A felhasználók új információt nem adnak be a táblázatba, így alapvetően nem is kell menteniük.
Minden egyes log bejegyzésnél menteni makróból erős lenne, lévén megnyitás/mentés 10-15 másodperc a hálózati elérés függvényében. Ugyan akkor szeretném elkerülni, hogy ha csak simán bezárják mentés nélkül a file-t, akkor a log adatok nincsenek mentve.
Minden egyes log bejegyzésnél egy külső fájlt nyitni, beleírni, menteni megint időigényes és feltűnő, zavaró.
Illetve ott van még az, hogy hogyan viselkedik, hogy ha valami csak olvasásra nyitja meg a fájlt, mert valakinél éppen nyitva van. Ez utóbbira meg végképp semmi ötletem nincs... Úgy érzem tapogatom az excel ilyes téren jelentkező korlátait...
Van valami ötletetek, hogy hogy oldjam meg?
Köszi szépen

fg
-
jjohn
aktív tag
-
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
-
jjohn
aktív tag
Szia!
Mindig vevő vagyok az új dolgokra, xkeres-t még nem használtam.
Pl. nálam ez a képlet csak akkor működik, ha az egyeztetési módot beállítom. Nem értem az okát MS365-öm van.
=XKERES(A2&"";OTJV25!A:A;OTJV25!B:B;"";3)
Állíthatok szöveg formátumot, szám formátumot nem akarja az igazat.Az fkeressel minden hiba nélkül megy.
-
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
-
Fferi50
Topikgazda
válasz
PeLa87
#54702
üzenetére
Szia!
Az Fkeres, Xkeres esetében a keresendő értéknek olyan formátumban kell lenni, mint ami a keresési oszlopban van.
A kép alapján az OVTJ2025 kód oszlopban szövegként tárolt szám van. Így a Keresőfüggvényben a keresendő paraméterként szövegként kell beírnod az értéket. Másik megoldás, hogy a kód oszlopban levő értékeket átalakítod számmá - erre több módszer is van, a hibaüzenetre kattintva is megteheted, kiválasztva ezt az opciót - és akkor számként írhatod be az EV fülre a keresett értéket.
Üdv. -
PeLa87
aktív tag
Sziasztok!

Hogy tudom az OVTJ25 lapról képlet segítségével kiíratni, hogy az EV lapon, ha mondjuk beírom a kódot pl.: 476101 akkor a EV fülön kiírja ugyan ezt nekem a hozzátartozó szöveggel...? Póbáltam fkeres-sel, xkeres-sel, de úgy látszik béna vagyok... :/
-
mindanee
tag
Szia,
nagyon köszi.
Nem értetted félre a problémát

A "c" pontot nem értettem elsőre, kipróbálás után persze rögtön le is esett.
Kicsit azért sajnálom, hogy nem lehet ilyen formátumot összehozni, nem gondoltam volna, hogy pont ezzel érem el az Excel határait.
Köszi még egyszer!
-
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 -
mindanee
tag
Sziasztok,
cellaérték formázásában szeretnék segítséget kérni.
Van egy decimális értékem, pl: 2631,55
Ezt szeretném az alábbi formátumban megjeleníteni: 2631 nap 13:12:00
Jelenleg ezt csak úgy tudom megcsinálni, hogy külön cellában egy fügvénnyel konvertálgatok. Ez a konkrét függvény: =ÖSSZEFŰZ(KEREK.LE(G18;0);" nap ";SZÖVEG(MARADÉK(G18;1);"óó:pp:mm"))
Viszont ezt nem tudom aggregálni, hiszen így már nem szám érték van a cellában.
Van valakinek erre megoldása?
Köszi előre is! -
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 -
Geryson
addikt
Jó reggelt! Szeretnék még egy olyat kérni, hogy ha a cella így néz ki:
42CRMO4-020(QT)
Mi lenne a függvény, ami eredményképpen a QT feliratot hozza ki? Csak ennyit "QT". A forrásnál mindig a végén van és mindig zárójelben. Nagyon köszönöm!
-
Fferi50
Topikgazda
Szia!
Szerintem szöveges cellára sajnos nem lehet ilyen formátumot. Makróval megoldható:Sub idezojelo()Dim cl As RangeFor Each cl In SelectionIf TypeName(cl.Value) = "String" ThenIf Left(cl.Value, 1) <> Chr(34) Thencl.Value = Chr(34) & cl.Value & Chr(34)End IfEnd IfNextEnd Sub
Kijelölöd a cellákat és elindítod a makrót. A szöveg tartalmú cellákba elhelyezi az idézőjeleket, ha már van benne, akkor nem változtatja.
A makrót elhelyezheted egyéni makró füzetben (Personal.xlsb), így minden munkafüzetben használható. Rendelhetsz hozzá gyorsbillentyű kombinációt is.
Ha csak ebben a munkafüzetben használod, a munkafüzetet makróbarátként kell elmentened.
Üdv. -
3DFan
aktív tag
Sziasztok!
Szövegtartalmú cellát szeretnék úgy formázni, hogy a tartalma idézőjelek között jelenjen meg. Milyen formátumkódot használjak hozzá? Köszönettel. -
Fferi50
Topikgazda
válasz
szricsi_0917
#54685
üzenetére
Szia!
Más, Mutt hozzászólása alapján jutott eszembe a következő:
Mi lenne, ha használnád a BackgroundQuery tulajdonságot False -ra állítva. Ekkor minden lekérdezésnél megvárja a VBA a teljes lefutást, ezután megy tovább a következő műveletekre.
Ü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
-
Fferi50
Topikgazda
válasz
szricsi_0917
#54685
üzenetére
Szia!
Én kiíratnám debugba az időpontot, a lekérdezés nevét, állapotát és a stableCount változó értékét minden ciklusban.
Talán kevés neki a 2 mp késleltetés?
Üdv. -
szricsi_0917
tag
Sziasztok
Egy kis segítséget szeretnék kérni vba kódhoz.
A feladat az lenne, hogy 1 vagy több lekérdezés frissítésekor kikapcsolja az automatikus számítást és ha végzett akkor kapcsolja vissza. Ez lehet a fájl megnyításakor vagy megnyított állapotban is.Option ExplicitPrivate Sub Workbook_Open()' Amikor a munkafüzet megnyílik, indítjuk a figyelőtApplication.OnTime Now + TimeSerial(0, 0, 5), "Intelligens_lekerdezes.StartQueryMonitor"End SubPrivate Sub Workbook_Activate()' Ha valamiért még nem futna, indítsuk el a monitortCall Intelligens_lekerdezes.StartQueryMonitorEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)' Bezáráskor leállítjuk a figyelőtCall Intelligens_lekerdezes.StopQueryMonitorEnd SubOption ExplicitPrivate nextCheckTime As DatePrivate wasRunning As BooleanPrivate stableCount As Integer' --- Fő figyelő ---Public Sub QueryMonitor()Dim conn As WorkbookConnectionDim isRunning As BooleanOn Error Resume Next' --- Ellenőrzés: van-e futó Power Query lekérdezés ---For Each conn In ThisWorkbook.ConnectionsIf InStr(1, conn.Name, "Query -", vbTextCompare) > 0 Or _InStr(1, conn.Name, "Lekérdezés -", vbTextCompare) > 0 ThenIf conn.Refreshing ThenisRunning = TrueExit ForEnd IfEnd IfNext conn' --- Ha bármelyik fut, állítsuk manuális számításra ---If isRunning ThenIf Application.Calculation <> xlCalculationManual ThenApplication.Calculation = xlCalculationManualApplication.StatusBar = "Power Query frissítés folyamatban… képletek leállítva."End IfwasRunning = TruestableCount = 0Else' --- Ha nincs futó lekérdezés ---If wasRunning ThenstableCount = stableCount + 1' Legalább 3 egymást követő ciklusig nem fut semmiIf stableCount >= 3 Then' --- Minden kész: üzenet és automatikus számítás visszaállítása ---Application.StatusBar = FalsewasRunning = FalsestableCount = 0MsgBox "Minden lekérdezés elkészült!", vbInformation, "Kész"Application.Calculation = xlCalculationAutomaticEnd IfEnd IfEnd If' --- Újraütemezés 2 mp múlva ---nextCheckTime = Now + TimeSerial(0, 0, 2)Application.OnTime nextCheckTime, "Intelligens_lekerdezes.QueryMonitor"End Sub' --- Indítás (pl. Workbook_Open) ---Public Sub StartQueryMonitor()On Error Resume NextStopQueryMonitor ' Biztonsági leállításwasRunning = FalsestableCount = 0' --- Excel megnyitáskor automatikus számítás kikapcsolása ---Application.Calculation = xlCalculationManualnextCheckTime = Now + TimeSerial(0, 0, 2)Application.OnTime nextCheckTime, "Intelligens_lekerdezes.QueryMonitor"End Sub' --- Leállítás ---Public Sub StopQueryMonitor()On Error Resume NextApplication.OnTime nextCheckTime, "Intelligens_lekerdezes.QueryMonitor", , FalseApplication.StatusBar = FalseEnd SubA probléma mintha nem érzékelné mikor fejeződik be a lekérdezés.
Mi lehet a probléma? -
föccer
nagyúr
Ki kellett próbálnom.

Egy SQL mondatot szoktam összefűzni. Az egyik célszoftverben van lehetőség direkt SQL mondattal való szűrésre. Kicsit szebb. Imádni fogom ezt az operátort, rengeteget fog segíteni.
="RECEPT_ID in ('"&SZÖVEGÖSSZEFŰZÉS("','";1;INDIREKT("B1:B"&DARAB2(B:B)-1))&"','"&INDIREKT("B"&DARAB2(B:B))&"')"="RECEPT_ID in ('"&SZÖVEGÖSSZEFŰZÉS("','";1;B.:.B)&"')" -
föccer
nagyúr
válasz
föccer
#54682
üzenetére
Microsoft® Excel® a Microsoft 365-höz MSO (2502 buildverzió16.0.18526.20546) 64 bites
Ahogy nézem augusztus 12. adták ki. Hoppá, akkor viszont benne kell, hogy legyen amit már jó régen várok, amit Delila írt.
Hehe, benne is van.
Ezt elkezdem beépíteni. Pénteken kaptam meg az új rendszert, eddig nem volt ilyen fícsör. 

-
föccer
nagyúr
PQ-t nem szeretnék behozni. Verziószámot holnap megnézem.
1: ez a koplet egy dinamikus, legördíthető menünek az adatfeltöltését csinálja. 4 különböző oszlopból kell összeszedni az adatokat, ezért van többször ugyan az. LET-et lehetett volna használni, szoktam is, bár most most valami gebasz volt vele (#54655) .
2: szűrő függvény utolsó paramétere jól dolgozik, ha a visszatérési tömb üres. Viszont ha a szűrő kiindulási tömbje üres, akkor hibát ad vissza, nem fut le és nem üres tömbként tér vissza. Ezért kell külön-külön minden oszlop kigyűjtését HAHIBA függvénnyel védenem. A 4 oszlopból 1-2 ami használva van, de előfordul a 3. oszlopban is adat, illetve lehet a 4.ben is. Elképzelhető, hogy a 4, oszlop üres, és akkor az egész képlet érték hibát dobna.
3: ez a csoportosításoso föggvényt nem ismerem, bár férfiasan bevallva O365-öt csak elvétve használom, csak ha itthonról be kell lépnem.
4: napi frissítés van az adatbázisban, ugyan nem sokban, de változnak az alapadatok. Illetve 35 különböző üzem adatai vannak bent és ezek az előszűrők üzem szintű paraméterezéssel vannak kigyűjtve, ergó a mindennapi használat során, üzemváltásoknál is változik a legördíthető lista elemei.
Egyébként csütörtökön van demo bemutatója a cuccnak, holnap rakok fel UI-ról screenshootot.
Köszi, hogy foglalkoztál vele.

föccer
-
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
-
Fferi50
Topikgazda
válasz
makoss
#54678
üzenetére
Szia!
Az első sorba - ahova a napok kerülnek - dátumot írsz. A példádban C1-be 2025.10.01. Ezután cellaformázás, egyéni - magyarban nnn, angolban ddd - a napok egyértelmű kezdőbetűit látod a cellában. Ezután jobbra húzod és a húzással kitöltődik a növekvő dátumokkal.
A cellák értéke dátum marad, de látni a napokat fogod. Kitöltés után beállítod az automatikus oszlopszélességet.
Üdv. -
Geryson
addikt
Sziasztok! Mindig gondom van ezzel, így kérdeznem kell:
11SMN30-30 vagy S355J2-220
Ez, vagy hasonló van egy cellában. Hogyan tudom mindig a kötőjel előtti részt "kinyerni"?
-
föccer
nagyúr
válasz
föccer
#54672
üzenetére
No, amire leírtam végig is gondoltam.
SORBA.RENDEZ(EGYEDI())-vel készítettem egy gyűjtést a receptszámokról és mellé MAXHA-val kikerestem hogy melyik recepthez melyik a legnagyobb verziószám. A kérdéses tömbben soronként kerestem be fkeressel a leganagyobb verrziót, amit simán HA feltétellen ellenőríztem. Így nincs tömbkezelés, illetve csak minimális. Az fkeres azég gyors. A MAXHA pediglen védve van még egy HA(BQ="";"";MAXHA()) feltétellel, így az sem fog feleslegesen keresni ha az előszűrő miatt a 100.000 sor helyett csak néhány ezer sor van a tömbben.Köszönöm a figyelmet

föccer
-
föccer
nagyúr
Sziasztok!
Belefutottam egy kis erőforrás korlátba...
Van egy tömb, ami az üzem nevéből és egy receptszám összefűzéséből jön létre. Ez a BJ (ohhh....
). Az utolsó két karakter a verziószám. Egy receptből minden verzió csak 1x lehet elvileg. Meg kell határoznom, hogy melyik sorban van egy recepthez tartozó utolsó verzió. Természetesen a tömb teljesen dinamikus és össze-vissza vannak benne az adatok, ráadásul a verziók is megelőzhetik egymást, nincs bennük semmiféle sorrendiség.A jelenlegi megoldásom tökéletesen működik. Szétvágom a receptszámot és a verziót. A BM oszlopban egy, a verzió nélküli receptszámra beállított szűrővel és egy MAX-al megkapom, hogy az adott sorban szereplő recepthez mi a legnagyobb receptszám, és ezt hasonlítom a BN-ben össze a sorból kiolvasott verziószámmal.
Viszont a táblázatot 100.000 receptre kell felkészítenem, és hogy is mondjam... A 100.000 db szűrő kissé felzabál minden erőforrást és a 32 GB ram 12 mag mellett is órás időtartamot számol, ami hát nem túl szerencsés.

Van erre valami finomabb, makró nélküli megoldás?
Köszi,


-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Szia!
Új ikont csak a menüszalag szerkesztővel tudsz felvenni... (pl Office RibbonX Editor).
A personal munkafüzetben levő makrót így tudod az egyéni menüszalagra tenni:
A VBA ablakban láthatóvá teszed a Personal.xlsb munkafüzetet: Immediate ablakban Workbooks("Personal.xlsb").Windows(1).Visible=True
Ezután átváltasz a Munkalap ablakra (maradsz a Personal munkafüzetben!) - majd Fájl - Beállítások - Menüszalag testreszabása - A választható parancsok helye lenyílóban kiválasztod a Makrók tételt. Itt megjelennek az egyéni makrók is. Kiválasztod a szükségese(ke)t és felveszed a saját menüszalagodra.
Ezután vissza a VBA ablakra és elrejted a Personal.xlsb-t.
Workbooks("Personal.xlsb").Windows(1).Visible=False
Mented az eredeti fájlodat.
Ezután eléred az így átvitt makrokat az egyéni menüszalagodról.
Megjegyzés: Az így átvitt makrok megjelennek az Excelben megnyitáskor a menüszalagon. Működésük pedig függ az adott fájl szerkezetétől.
Üdv. -
Delila_1
veterán
Sok leírni, kevés alkalmazni.
Kiválasztod a menüt (pl. Beszúrás). Jobb klikk az egyik menüponton, Menüszalag testreszabása.
Balra fent kiválasztod a makrókat, jobbra fent a Fő lapokat.
A jobb oldali menüben új lapot év/vagy csoportot kell bevinni (jobbra lent), az új helyre felveheted a makródat.Szerk.: míg leírtam, módosítottad a kérdésedet. A fenti válaszom arra vonatkozik, hogy a szalagmenüre hogy lehet kitenni egy saját makró ikonját.
-
lappy
őstag
Sziasztok
Egyéni menüszalagban hogyan tudok felvenni egy ikont és hozzá rendelni a personal makróban lévő makrót? -
Fferi50
Topikgazda
válasz
makoss
#54659
üzenetére
Szia!
Szerintem ezt egy A4 oldalra tisztességes láthatósággal nagyon nehezen lehet - ha egyáltalán - kinyomtatni.
Az oldalbeállítás paraméterezésben kísérletezhetsz részben a legyen 1 oldal széles 1 oldal magas beállítással, illetve a legyen az eredeti méret x %-a. A nyomtatási képen láthatod az eredményt kinyomtatás nélkül.
Üdv. -
makoss
veterán
Üdv!
Van egy eléggé széthúzott táblázat, amit szeretnék úgy egy A4-es lapra fektetve nyomtatni, hogy az azon lévő írás, ne legyen nagyon apró.
Van a beállításban ilyen rész valahol?
Ha normális, látható a szöveg, ebből leszed, kb a háromnegyedét. Ha teljes a kép, akkor nagyon apró a szöveg: [kép] -
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 -
föccer
nagyúr
Sziasztok!
Most valami értelmessel jövök.
LET függvényt használom. Látszólag ismeri is a függvénytár (egyébként sokszor használtam már, szóval biztos működik). Viszont #NÉV? hibát dob. Ez miért lehet? Ugyan ezen munkapon (egy egyszerűbb) LET gond nélkül megy. Látszólag minden beépített függvény helyes.
LET( t1;A#;t2;B#;n1;SOROK(t1);n2;SOROK(t2);k;SORSZÁMLISTA(n1*n2);col1;INDEX(t1;KEREK.LE((k-1)/n2;0)+1);col2;INDEX(t2;MOD(k-1;n2)+1);FÜGG.HALMOZÁS(col1;col2))
Egyébként egy permutálást szeretnék megoldani. Nincs erre valami egyszerűbb megoldás? Tehát az A és B oszlop elemeiből, minden A&B elemet egy tömbben. Segéd táblával megvan a megoldás, ahol megcsinálom a kereszttáblát, de szeretém "szebben" megoldani.
Köszi,
FG -
föccer
nagyúr
Az új kedvencem.

Ez 8 oszlopból gyűjti össze az adatokat, a két előfeltételnek megfelelően.
A szűrők előtti hahibát nem kellene használnom, csak a szűrőt helyesen paraméterezni, de elég szemzsibbasztó a befoglalást helyesen beállítani. Így a HAHIBA elég jól mutatja a különböző kód részletek határát


-
marec1122
senior tag
bocsi mégsem
-
föccer
nagyúr
Állatkodtam egy kicsit

Működik.

=EGYEDI(FÜGG.HALMOZÁS(HAHIBA(EGYEDI(SZŰRŐ(Receptek_egy_sorban!AL2:AL100000;((Receptek_egy_sorban!AL2:AL100000<>"")*(Receptek_egy_sorban!A2:A100000<>HAELSŐIGAZ(Kereso!C4="I";"N";Kereso!C4="N";"I";Kereso!C4="Mind";""))*(Receptek_egy_sorban!B2:B100000=Kereso!$C$3))));"");HAHIBA(EGYEDI(SZŰRŐ(Receptek_egy_sorban!AO2:AO100000;((Receptek_egy_sorban!AO2:AO100000<>"")*(Receptek_egy_sorban!A2:A100000<>HAELSŐIGAZ(Kereso!C4="I";"N";Kereso!C4="N";"I";Kereso!C4="Mind";""))*(Receptek_egy_sorban!B2:B100000=Kereso!$C$3))));"");HAHIBA(EGYEDI(SZŰRŐ(Receptek_egy_sorban!AR2:AR100000;((Receptek_egy_sorban!AR2:AR100000<>"")*(Receptek_egy_sorban!A2:A100000<>HAELSŐIGAZ(Kereso!C4="I";"N";Kereso!C4="N";"I";Kereso!C4="Mind";""))*(Receptek_egy_sorban!B2:B100000=Kereso!$C$3))));""))) -
lappy
őstag
-
SzT.Luca
friss újonc
Sziasztok! Azt szeretném elérni, hogy egy több tagú szöveget egy cellából szét tudjak úgy osztani 2 cellába, hogy az 1. cellában csak az első tag van és a másodikban pedig a az összes többi tag. 2016-os Excelben próbálkozom. Köszönöm a tippeket! -
VGYke
addikt
válasz
Fferi50
#54643
üzenetére
Nagyon szépen köszönöm!
Kipróbálom amit írtál, csak most nem vagyok excel közelben.
Igen tudom, egy "segéd oszlop" értékszűréssel egyszerű lenne, de adatlekérdezést tartalmazó táblát használok fel, így nem akartam összedisznólkodni egy plusz oszloppal. Köszönöm szépen,megnézem amit javasoltál! -
Fferi50
Topikgazda
Szia!
Próbáld ki ezt a képletet:=SZUMHATÖBB($B$2:$B$16;$A$2:$A$16;">="& A6;$A$2:$A$16;"<=" & A10)
De az A6 és A10 cellák helyett másik cellákba is írhatod a határokat, akkor azt kell megadnod helyettük.
Üdv.
PS. Ha konkrét célösszeget szeretnél megkapni adott dátumok között, akkor viszont az Excel Solver bővítményét kell használnod a kalkulációhoz. A SZUMHATÖBB függvény kalkulációra nem alkalmas, nem tudsz vele "válogatni" a számok között, hogy egy megadott érték legyen az eredmény, csak az összes feltételnek megfelelő értékeket adja össze.
(Ezt a megjegyzést a pl. 20 legyen kitétel miatt fűztem hozzá.) -
underdark
aktív tag
Üdv
Egyszer sikerült megcsinálnom ezt a formátumot és most nem sikerül
Elvileg ezzel [>=1000000]£#.##0.." M";[>=1000]£#.##0." K";£#.##0
És most bármit csinálok, nem £27 K lesz amit látni akarok, hanem £26803.0. K
Fogalmam nincs, hogy sikerült, de azt tudom h szoptam vele akkor is
Office 2021
Köszi!
-
föccer
nagyúr
válasz
Fferi50
#54638
üzenetére
Ehh, a hiba nem ebben a makróban volt, hanem egy korábbiban.

Application.EnableEvents = True sort sikerült egy if blokkba belülre tennem. Nyilván megesett, hogy nem azon az ágon futott végig a makró, de annyira nem kötöttem össze egy másik funkció futásával ennek a hibának a felbukkanását, hogy nem tűnt fel...

-
Fferi50
Topikgazda
válasz
föccer
#54633
üzenetére
Szia!
" a laphoz rendelve Sub Worksheet_SelectionChange(ByVal Target As Range) eljárást használom, ellenben nem indul el a makró "
Szerintem Selection_Change eseménynek el kell indulnia. Kivéve, ha az eseménykezelés le van tiltva.
Megjegyzés (bár gondolom tudod): Az eseménykezelő eljárás elején le kell tiltani az eseménykezelést, a végén pedig vissza kell kapcsolni, különben akár végtelen ciklusba is eshet a folyamat.
Üdv. -
Fferi50
Topikgazda
válasz
föccer
#54633
üzenetére
Szia!
"ez utóbbit kipróbáltam csak akkor fog tovább menni a makró, ha eltüntetem az userformot"
A userform megjelenítését megoldhatod úgy is, hogy a makró továbbfut a láthatóság alatt, majd a folyamat végén eltünteted.
A Show metodnak van egy paramétere - modal - ami alapértelmezésben (vagyis amikor paraméter nélkül jelenítjük meg a formot) érvényes, addig "nem tűnik el" a form, amíg a user nem kattint rá.
Ha tovább szeretnénk futtatni a form láthatósága idején a makrót, akkor meg kell adni a modal paraméternek a vbModeless (0) értéket, vagyis userform.show vbModeless formában kell láthatóvá tenni a formot.
[link] itt a help hozzá.
Üdv. -
lappy
őstag
válasz
föccer
#54633
üzenetére
2. kérdésre talán ezek
- Progress Bar in Excel VBA using For Loop
- Progress Bar for all your excel Applications
ha ilyenre gondoltál -
föccer
nagyúr
Sziasztok!
Csinálom a következő fejlesztésemet, már a vége felé járok.
A rendszer egy tisztességes kupac adatot megcsócsál és rendszerez. Ezt a rendszerezett adathalmazt mutatja be a felhasználónak, minden féle segédszámítással egyetemben. A rendszerezés egyik alapja a receptszám, alapesetben 6+2 karakter. Előbbi 6 maga a recept szám, utóbbi kettő pedig a verzió.
A felhasználó most a felrakott nyilacskákkal tud lépkedni a receptek között, de szeretném a cellákat "kattinthatóvá" tenni.
Ehhez a laphoz rendelve Sub Worksheet_SelectionChange(ByVal Target As Range) eljárást használom, ellenben nem indul el a makró .. :-/ Nem ezt kellene használnom?
Illetve szeretnék még egy olyat megoldani, hogy a makró futásának legelején szeretnék megjeleníteni egy felugró üzenetet, hogy dolgozom, várj. Ha lefutott a makró, akkor ezt eltüntetem. Ha addig elveszem a lehetőséget, hogy az UI-n kattintsanak az még jobb. Ezt egy userform-al tervezem megoldani. A kérdés az, hogy ha megjelenítem az userform-ot, akkor még végig fog futni a makró, vagy csak akkor ha zárom az userformot?
Köszi

ps: ez utóbbit kipróbáltam csak akkor fog tovább menni a makró, ha eltüntetem az userformot.

-
VGYke
addikt
Sziasztok! SZUMHA(A4:A10;"kritérium";B4:B10) függvényben,hogyan lehet megadni "kritériumként", hogy "A" szerint csak X1-nél nagyobb, de X2-nél kisebb értékeket adjon össze?
Azt tudom, hogy ha X1-nél nagyobb, akkor "kritérium": ">"&X1, de hogy 2 érték között legyen, nem sikerül megoldanom. -
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
-
lenkei83
tag
Sziasztok!
O365, névkezelő, van egy ilyenem amit ezután érvényesítésben használok.
=ELTOLÁS(Törzsadatok!$D$2;0;0;DARAB2(Törzsadatok!$D$2:$D$60);1)
Ha a kombinálom a képletet a sorba.rendez függvénnyel, akkor az érvényesítés nem működik.
Lehet erre valami megoldás?Köszi & üdv.:
P. -
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
-
Rhair
csendes tag
Sziasztok
Van arra lehetőség, hogy feltételes formázásban ha beírok egy új értéket, akkor az utolsó sort vegye alapul?
Ikonokat szeretnek haszni, hogy nagyobb vagy kisebb lett a szám, mint az előtte lévő
A1 8
A2 7
A3 9
Köszi -
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
-
Fferi50
Topikgazda
válasz
underdark
#54617
üzenetére
Szia!
Még egy lehetőség: Kimutatást készítesz, ahol a name lesz a sorcimke, a year az oszlopcimke és az asc oszlop összege lesz az értékek mezőben. Mivel minden név és év egy számot tartalmaz, így a kimutatás névsorosan fogja az éves értékeket mutatni.
Az összegző sorokat megjelenítését ki kell venned a kimutatásból (kimutatáson állva - Tervezés - Végösszegek - kikapcsolva sorokban és oszlopokban).
Ha új sort vittél be a táblázatba, akkor a kimutatást is frissítened kell, ennyi a hátránya.
Üdv. -
Fferi50
Topikgazda
válasz
underdark
#54617
üzenetére
Szia!
Ettől tartottam... (nem a kuszábbá válástól, hanem az adatok ilyen struktúrájától).
Ebben az esetben nem használható gazdaságosan az XKERES függvény, mivel mindig csak egy találatot ad vissza.
Mivel legalább 2021-es Exceled van, ezért használni tudod az EGYEDI és a SZŰRŐ függvényeket.
Az A1 : C5 tartományt átalakítottam táblázattá, hogy a táblázatos címzést tudjam használni.
Az éveket az I1 cellától a következő képlettel kaphatod meg:=TRANSZPONÁLÁS(EGYEDI(Táblázat1[year]))
Az E1 cellába írtam be a kívánt nevet.
Ezután az I2 cellában a képlet (ezt látod a képen is):=SZŰRŐ(Táblázat1[[#Mind];[asc]];(Táblázat1[[#Mind];[name]]=$E$1)*(Táblázat1[[#Mind];[year]]=I$1);0)
Ezt a képletet másolni és beilleszteni kell a mellette levő cellákba (nem pedig egérrel húzni!) és akkor megfelelően működik.
Figyelned kell a $ jelekre a cella címzésekben!
Remélem, tudod alkalmazni a saját táblázatodra. Ha nem sikerülne, küldd el privát üziben.
Kiegészítés: Ha a neveket is egy listában szeretnéd látni, akkor a képlet a képen a H2 cellába:=EGYEDI(Táblázat1[name])
Az I2 cella képlete pedig a következő:=SZŰRŐ(Táblázat1[[#Mind];[asc]];(Táblázat1[[#Mind];[name]]=$H2)*(Táblázat1[[#Mind];[year]]=I$1);0)
A nevek helyzetének figyelembe vételével változott.
A képlet az I2 cella mellett levő cellákba másolás - beillesztés továbbra is a megfelelő mód, utána lefelé mindhárom oszlop egyszerre húzható.Üdv.
-
underdark
aktív tag
válasz
Fferi50
#54616
üzenetére
Kösz, de ez így most még kuszább lett

Megprbálom felvázolni inkább így,
Van az adattáblázat, ez egy nagyobb terjedelmű, nem így vannak az oszlopok sorban, nekem csak ez a 3 kell belőle, de az elrendezés az így van soronként a dátumok stb.
Az eredményt azt most én írtam be, hogy oda kéne nekem az a függvény
Köszi!
-
Fferi50
Topikgazda
válasz
underdark
#54615
üzenetére
Szia!
Az XKERES függvény jelen esetben a találat sorában levő értékeket tud visszaadni, az FKERES függvényhez hasonlóan, vagyis az A3 cellában levő név sorát veszi alapul.
A "belső" XKERES függvényed ugyanazon táblázat másik oszlopából fog eredményt keresni, ami nem feltétlenül azonos a külső XKERES által megadott sorral!
Ha sor és oszlop találkozásra vagy kíváncsi (ha az évek oszloponként vannak), akkor a belső XKERES függvény keresési tömbjénél a táblázat FEJLÉC-ét kell megadnod, nem az egész táblázatot (ha egérrel csinálod a tartomány kijelölését, akkor mutatni fogja a helyes szintaxist a fejlécre).
Amit a képen mutatsz, az a belső XKERES függvény eredménye - ezt nem tudja a külső függvény értelmezni. Az ablak alsó sorában egy üres = sort látsz, ott lenne a teljes képlet eredménye.
Remélem, jól értelmeztem a kérdést, ha mégsem így lenne, kérlek mutasd meg képen a Táblázat7 egy részletét a "bal felső" sarkából kiindulva (természetesen fals adatokkal).
Üdv. -
underdark
aktív tag
Sziasztok!
xkeres függvényt szeretnék két kritérium szerint használni, táblázatban
itt az ablakban visszadja azt ami nekem kell érték, de ha lekozékom akkor érték hibát ír
mit rontok el?
vagy egyszerűbb volna egy másik függvénnyel?
Köszi!
-
dm1970
aktív tag
Szia!
Hétvégén sajnos nem volt időm foglalkozni a próbával, s csak most jutottam el idáig.
Nagy-nagy köszönet, szokás szerint minden tökéletes.
Azért arra szeretnék egy kis időt szánni, hogy feltérképezzem, hogy hogyan működik, mit jelentenek a beállítások.#54611jjohn
Igen, ezt írtam én is.
Köszi Neked is!
Szerintem, ha egy cellában van, akkor a bal5, jobb5 használatával a C1, B1 behelyettesíthető. Kíváncsiságból ki fogom próbálni. -
sopruk
senior tag
Köszönöm a további infókat, tippeket!
Sokat tanultam e probléma kapcsán.
Csak alap dolgokra használom az Excel-t, néhány képletet ismerek
De a mostani keresgélés kapcsán, oktató videók segítségével is felfedeztem pár új hasznos dolgot, ami könnyíti a munkát. Lesz időm nézegetek még ilyeneket, érdemes fejlődni ebben is...
-
jjohn
aktív tag
válasz
dm1970
#54604
üzenetére
Szia!
Annyit tudok segíteni, ha a munkaidő kezdete és vége más cellában van.
Akkor ez egy működő megoldás, én ezt használom, percre pontosan kiszámítja a munkával töltött időt.
A szünetekkel variálhatsz a képletben a 40 percet átírhatod 45-re stb.
= (C1-B1) - HA((C1-B1) < IDŐ(8;0;0); 0; HA((C1-B1) < IDŐ(10;0;0); IDŐ(0;20;0); IDŐ(0;40;0)))
-
dm1970
aktív tag
Szia!
Köszi!
Nem sok időm volt tesztelni, de nem tudtam belőle kihozni azt amit szerettem volna. Ránézésre, a legnagyobb gond az, hogy az én táblázatomban a kezdő és a vég időpont 1 cellában van. Próbáltam az általam használt képletből behelyettesíteni az elsőidőpárt B1-nek a másodikat C1-bek, de nem megy, és nem látom át a képletedet (mondjuk az enyémet se nagyon
)#54607Mutt
Neked is köszi!
A kép alapján tökéletes, de sajna 2016 Office van, s ahogy elnézem, ebben ezek közül csak a maradék függvény található meg.dm
-
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
-
dm1970
aktív tag
Sziasztok!
Egy kis segítségre, ötletre lenne szükségem, egyszerűen nem sikerül megoldást találnom. Több éve használok egy képletet, ami egy cellába beírt időpár alapján kiszámolja a tényleges munkaidőt a munkaközi szüneteket kiveszi belőle. Sajnos van benne hiba, s amikor ritkán beleszaladok vagy eszembe jut, megpróbálom a javítást, de nem jutok előrébb. A szabály, ha a munkaidő max 6 óra nincs szünet, ha meghaladja a 6 órát de max 9, akkor 20 perc a szünet, 9 óra felett 20+25. Tehát a két időpárt kivonom egymásból, eredmény =<6 nincs mínusz, 6<,<=9 -20, minden más esetben -45 perc.
Készítettem egy mintatáblázatot:
A végén látszanak a hibák, azt nem tudja kezelni a képletem, ha éjszakai 9 órát meg nem haladó munkavégzés van.
Bemásolom a képletet is, de lehet egyszerűbb egy új megközelítésből elindulni, már én sem mindig látom át, mit miért írtam bele. Jó lenne, ha a képlet, másolható lenne mindkét irányba.
=HA(BAL(B1;2)<BAL(JOBB(B1;5);2);((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))*1-(BAL(B1;2))*60-(BAL(JOBB(B1;8);2))*1-HA(ABS(((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))-BAL(B1;2)*60+(BAL(JOBB(B1;8);2)))/60)>9,34;45;HA(ABS(((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))-BAL(B1;2)*60+(BAL(JOBB(B1;8);2)))/60)<=6;0;20)))/60;((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))*1-(BAL(B1;2))*60-(BAL(JOBB(B1;8);2))*1-HA(ABS(((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))-BAL(B1;2)*60+(BAL(JOBB(B1;8);2)))/60)>9;45;HA(ABS(((BAL(JOBB(B1;5);2))*60+(JOBB(B1;2))-BAL(B1;2)*60+(BAL(JOBB(B1;8);2)))/60)<6;0;20)))/60+24)Köszi dm!
-
Delila_1
veterán
válasz
sopruk
#54602
üzenetére
Mindkét lapon számokká alakítottam a Termékkód oszlop adatait, elkerülendő, ha itt-ott akadna közöttük szöveg típusú. Egy cellába beírtam egy egyest, másoltam, majd irányítottan, szorzásként beillesztettem a jelölt helyekre. Ezután az FKERES függvény (HAHIBA függvénybe ágyazva) végzi a dolgát.
[data.hu] -
sopruk
senior tag
Sziasztok!
Az XKERES, FKERES, XHOL.VAN függvénnyel vannak gondjaim…
A data.hu-ra feltöltött tábla második, „CSV data” fülön lévő összeg oszlopot szeretném átvarázsolni az első „Terméklista” fülre, az első oszlopokban lévő Termékkódok alapján.
De valamiért nem látja őket semelyik függvény
Az FKERES-t rendszeresen használom kisebb tábláknál, ugyanazon program generálta táblázatok adatainak összefűzésére.
Most egy nagyobb adatbázist kellene hasonlóképpen összevezetni, de az egyik tábla máshonnan lett exportálva CSV formátumba.
Mindkét tábla sokkal nagyobb, a többi oszlopot kitöröltem a szemléltetéshez….
A CSV táblát már próbáltam többféle módon áthozni (mentés másként, kivágás-beillesztés, a jelenlegi táblában csak simán áthúztam a fület a csv táblából ebbe), hátha az a baj.
A cellákat is próbáltam módosítani általános-ra, szöveg-re, szám-ra…
Már több mint egy napom ráment a próbálgatásra, keresgélésre a neten, de nem találom a hiba okát
Van esetleg ötletetek, hogy mi lehet a probléma oka?
Előre is nagyon köszönöm!
Új hozzászólás Aktív témák
- Samsung Galaxy S23 Ultra Green 120 Hz Dynamic AMOLED 2X, 200 MP kamera, beépített S Pen - 512GB
- BESZÁMÍTÁS! Gigabyte Z37 i5 9600K 16GB DDR4 512GB SSD RTX 2060 Super 8GB Rampage SHIVA ADATA 600W
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 12 Pro Max 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3376, 100% Akkumulátor
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő












Üdv.

Üdv.
Üdv.




Sziasztok! Azt szeretném elérni, hogy egy több tagú szöveget egy cellából szét tudjak úgy osztani 2 cellába, hogy az 1. cellában csak az első tag van és a másodikban pedig a az összes többi tag. 2016-os Excelben próbálkozom. Köszönöm a tippeket!




Remélem, tudod alkalmazni a saját táblázatodra. Ha nem sikerülne, küldd el privát üziben.


