-
Fototrend
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
-
Fferi50
Topikgazda
válasz
bryant56
#39241
üzenetére
Szia!
Legjobb tudásom szerint a kivágás úgy működik, hogy excelen belül átmásolhatod egy másik helyre a kivágott értéket. Ebben az esetben eltűnik a kijelölt cellából az adat.
Ha másik alkalmazásba másolod át, akkor az ottani beillesztés után ki kell törölnöd a cellát vagy annak tartalmát.Üdv.
-
Fferi50
Topikgazda
válasz
tgumis
#39238
üzenetére
Szia!
Ez a makró egy eseményhez kapcsolódik, ami egy adott helyzetben fut le. Ezért van munkalaphoz kötve.
Semmi nem tiltja azonban, hogy egy parancsgomb megnyomása esetén ezt az eseményt hívja meg a makró, de akkor át kell adja a target paraméter értékét:Sub makro1
Worksheet_Change Range("A1") vagy Range("A1") helyett Selection
End Sub
A gombhoz a makro1-et kell rendelni.
Ez az eseménykezelő Private, azaz csak azon a munkalapról lehet meghívni, amelyikhez rendelted. Általános kódlapra nem teheted, de amit csinál (ami Sub - End Sub között van) lehet modulba tenni, természetesen megfelelő körültekintéssel.
Az eseménykezelést lehet a Thisworkbook kódlapjára is tenni, ott aPrivate Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'műveletek
End Sub
tartalmazhatja a feladatokat. Itt látod két paraméter van, az Sh az a munkalap, amelyen az esemény történt, a Target pedig az a tartomány ahol történt. Ebben az esetben elég ide betenni a műveleteket, természetesen figyelve arra, ha egyik munkalapon más műveletet szeretnénk, mint a másikon. Ezt az Sh paraméter alapján dönthetjük el.
Remélem jól értettem a kérdésed, mert számomra nem volt eléggé világos.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#39222
üzenetére
Szia!
Szerintem is a Kimutatás a megfelelő. Egyszer kell megcsinálnod.
De szuper a javasolt tömbfüggvény is.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#39219
üzenetére
Szia!
És mi legyen az eredeti oszlopoddal? Szükség van rá mert tartoznak hozzájuk eltérő sorok vagy csak maguk az oszlopok vannak egyedül. Hova kerüljenek az egyedi azonosítók?
Csak azért, mert az Adatok - ismétlődések eltávolítása helyben is működik, nem kell átmásolni.
Ugyanezt tudja az Adatok - Speciális szűrő is.
Mi a végcélod?Üdv.
-
Fferi50
Topikgazda
válasz
gurabli
#39201
üzenetére
Szia!
A Word körlevél funkciója lesz neked jó. A körlevél forrása az adott Excel fájl. Ha nincs benne fejléc sor, akkor tegyél bele egyet beszúrással első sornak.
Ezután összekapcsolod a Worddel és szépen kiválogatod, hogy melyik Excel oszlop hova kerüljön a Word levélben (ezek nem labelek, hanem mezők lesznek a Wordben).
Egyszer megcsinálod a körlevél "sablont", utána csak görgetni kell a rekordokat vagy meghatározhatod azt is, hogy mettől-meddig készítse el a dokumentumot.Üdv.
-
Fferi50
Topikgazda
válasz
allein
#39197
üzenetére
Szia!
"Tudom a termék súlyát, 5 termékünk van."
Ezeket az értékeket be kell tenni két oszlopba egy munkalapra.
1. oszlop megnevezés
2. oszlop termék súlya
Ha a termékneve valóban az F oszlopban van:
Az Fkeres első paramétere a termék neve, amit az F oszlopból veszel.
Második paramétere az a két oszlop, ahol az előzőleg mutatott értékek vannak, pl. Munka1!$A$1:$B$5
Harmadik paraméter 2 - mivel a második oszlop tartalmazza a súlyt
Negyedik paraméter 0
A példa képen viszont a termékek az M-O ill gondolom a Q oszlopig vannak, mivel 5 terméket említettél.
Akkor nem kell Fkeres függvény.
Ha sorrendben vannak a termékek az M-Q oszlopban és az AA1-AE1 cellákban vannak a megfelelő súlyok,
akkor az M-Q oszlop következő sorába írd be az alábbi képletet (a termék1 értéke alá):=M2*AA$1
majd másold le jobbra a Q oszlopig.
És kész.
Vagy R oszlop következő cellájába írd a szorzást és másold le még 4 oszlopra jobbra. Ekkor külön oszlopokban (R-V) kapod az egyes termékek súlyát.Üdv.
-
Fferi50
Topikgazda
válasz
friccccc
#39193
üzenetére
Szia!
Az Error 2007 a nullával való osztási kísérlet miatt van. Ha a CS10 cella képletéhez tartozó területen jogosan nincs még adat, akkor hibakezeléssel tudod a problémát kezelni:
If Iserror(Range("CS10") Then
Range("CS7").Value = 1 'ide azt az értéket írd, amit a cellában ebben az esetben látni szeretnél.
Else
If Range("CS10").Value > Range("T3").Value And Range("CW10").Value < 1.5 Then Range("CS7").Value = 1
End IfPersze meg kell még nézned, hogy a többi cellában. amit használsz a feltételekben, milyen értékek szerepelnek.
Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#39179
üzenetére
Szia!
Mindezzel együtt, továbbra is azt kérdezem, szükség van-e rá, hogy minden sorban mindig ott legyenek a képletek?
Gondolom használsz makrókat, amik szükség esetén a képleteket is beírhatják a megfelelő helyekre.
Aztán át lehet gondolni a szerkezetet is.
De talán valóban egy valódi adatbáziskezelő lenne a megoldás.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#39176
üzenetére
Szia!
Feltétlenül kell minden "alapadat" egy Excel fáljban? A számítások eredményét nem elég a fájlban tárolni? Az alapadatokat pedig másik fájlban, esetleg havonta szétválasztva.
Azt ne várd, hogy a naponta növekvő fájl nyitása és számolása, mentése majd meggyorsul valami isteni csoda folytán.
Sok adat esetén bizony tud lassú lenni, ezzel barátkozni kell, vagy szabni-varrni az adatokat/fájlokat, vagy egyszerűen áttérni adatbázis kezelőre.
Értem én, hogy a főnökök Excelre vannak rágyógyulva, de nem hiszem, hogy minden egyes apró adatot egyenként is meg szeretnének nézni.
Tedd a közlésre szánt információkat egy fájlba, az adatokat pedig egy másikba. Naponta egyszer frissíted az "élmény" fájlt - ezt te kibírod. Másoknak pedig gyorsan megnyílik a nekik szánt adag.
Tudom, mit beszélek, én is voltam ilyen helyzetben - bár igaz, csak havonta frissültek az adatok -, minden hónapban kismillió adat érkezett, ebből kellett és lehetett emészthető állapotot csinálni némi gondolkodás után.Üdv.
-
Fferi50
Topikgazda
válasz
friccccc
#39173
üzenetére
Szia!
Csak VBA-ban tudod megcsinálni. Egy cella értékét beállítod mondjuk 0-ra, ez lesz a jelzőcella.
A makró megnézi, hogy A1 értéke nagyobb-e mint B1 értéke. Ha igen, a jelzőcella értékét átállítja 1 -re, ha nem akkor a jelzőcella értéke marad változatlan.
Ezzel a módszerrel a jelzőcella mutatja, hogy volt már nagyobb érték. Ha azt is meg szeretnéd tudni, hányszor, akkor a jelzőcella értékét minden alkalommal növelni kell eggyel, amikor a feltétel teljesül.
Vázlatosan:If Range("A1").Value>Range("B1'").Value Then Range("C1").Value =1 (vagy a második esetben Range("C1").Value=Range("C1").Value+1Mivel a feltétel nem teljesülése esetén nem kell hozzányúlni a cella értékéhez (sőt tilos), ezért nem egy sorban lehet rendezni a vizsgálatot és az értékadást.
Természetesen a jelzőcellába más értéket is írhatsz a feltétel teljesülése esetén.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#39169
üzenetére
Szia!
Az Acces jó ötlet. Természetesen ott is vannak jól használható függvények, lehet számított oszlopokat betenni, de nem kell vele az adatbázist növelni, elég lekérdezésként megcsinálni. Érdemes rajta elgondolkodni sőt más adatbázis kezelőben is.
Az Excel tekintetében:
Biztosan vannak olyan adatok a táblában, amik már nem módosulhatnak a számítások során - bár be vannak képletezve, minden számolás ugyanazt az eredményt kell, hogy adja - pl. múlt idők adataiból számítottak.
Ezeket én sürgősen átalakítanám értékké (kijelöl - másolás - irányított beillesztés saját magára értékként), ekkor nem fogja a számítási kapacitást terhelni többé. Szerintem elég, ha csak az újonnan bejövő adatokhoz tartoznak képletek.
Vannak olyan képletek is, amelyeknek az "eredménye", ha megnézed az fx gombra nyomva, frissítés (pl ilyen az indirekt függvény is és jó pár másik). Ha lehet, az ilyen képleteket próbáld más - ugyanazt az eredményt adó képlettel helyettesíteni - persze lehet, hogy ilyenkor segédoszlop vagy másik munkalap is kellhet.De a képletek átalakítása értékké a szükségtelen számításokat elhagyva szerintem kellő gyorsulást fogsz észlelni az előbbi bekezdés nélkül is.
Üdv.
-
Fferi50
Topikgazda
válasz
DrTechnoid
#39167
üzenetére
Szia!
"ki lehet e íratni úgy , hogy a cikkszám helyett egy más elnevezést használok"
Ha az Excelnek megmondod, melyik cikkszám milyen nevű terméket takar, természetesen.
Ehhez kell csinálnod egy kis "szótárt" 2 oszlopban, első oszlop cikkszám, második oszlop megnevezés.
Utána az Fkeres függvénnyel megkeresed a cikkszámnak megfelelő megnevezést és azt írod a cellába. Vagyis a cellába egy Fkerest tartalmazó képlet kerül.Üdv.
Ps. Megjegyzést adhatsz a cellákhoz, de azt nem lehet képlettel megjeleníteni. -
Fferi50
Topikgazda
válasz
Enxtheone
#39160
üzenetére
Szia!
Makró:
Sub ugrik()
Range("A5").Select
End Sub
Ezt hozzárendeled egy kényelmes billentyű kombinációhoz.
Viszont ha van eseménykezelés is valamelyik makródban, akkor eseménykezelés kikapcs-bekapcs is kell:Application.EnableEvents=False
Range("A5").Select
Application.EnableEvents=True("A5") helyére írod a cella címét.
Üdv.
-
Fferi50
Topikgazda
válasz
butch3r
#39157
üzenetére
Szia!
Egy munkalaphoz így módosítsd:
Sub ertekado()
Dim sh As Worksheet, sr As Integer
'For Each sh In Worksheets
For sr = 7 To 123 Step 4
sh.Range("C" & sr & ":N" & sr).Value = sh.Range("C" & sr & ":N" & sr).Value
Next
'Next
End Sub
Ha csak elrejtett lapon van pivot, akkorSub ertekado()
Dim sh As Worksheet, sr As Integer
For Each sh In Worksheets
If sh,Visible=xlsheetVisible then
For sr = 7 To 123 Step 4
sh.Range("C" & sr & ":N" & sr).Value = sh.Range("C" & sr & ":N" & sr).Value
Next
End If
Next
End Sub
Ha máshol is lehet, akkor a feltétel a For Each után:If sh.Pivottables.Count >0 ThenÜdv.
-
Fferi50
Topikgazda
válasz
butch3r
#39157
üzenetére
Szia!
Ha csak az elrejtett fülön van pivot, akkor így módosítsd:
Sub ertekado()
Dim sh As Worksheet, sr As Integer
For Each sh In Worksheets
If sh.Visible=xlSheetVisible Then
For sr = 7 To 123 Step 4
sh.Range("C" & sr & ":N" & sr).Value = sh.Range("C" & sr & ":N" & sr).Value
Next
End If
Next
End Sub
Ha máshol is lehet, akkorIf sh.Pivottables.Count = 0 Then 'legyen a feltételben a For Each után
Ha viszont csak az aktuális munkalapon szeretnéd alkalmazni, akkor csak a Dim és a For ...Next ciklust hagyd benne, a többit kommenteld ki (aposztróf ' a sor elejére)Üdv.
-
Fferi50
Topikgazda
válasz
gepelek
#39147
üzenetére
Szia!
Tehát, ha jól értem, a Paraméter: gyártói cikkszám- mal kezdődő "táblából" mutasson a link az Adatlap oszlopban levő cellára.
A táblát azért tettem idézőjelbe, mert Excelben ez nem jelent egyértelmű meghatározást sajnos.
Azt írod, két táblád van. Ez két külön munkafüzetet jelent, vagy két külön munkalapot? Ráadásul azt sem tudjuk, milyen Excel verziód van.
Egyébként kézzel:
Arra a cellára állsz, ahová a hivatkozást szeretnéd. Jobb egérgomb. Hivatkozás (valószínűleg a legutolsó lesz).
Kiválasztod a Dokumentum adott pontja fület. A megjelenő szöveghez beírod, amit szeretnél látni a cellában.
Beírod a cellahivatkozást vagy kijelölöd egérrel azt a cellát, amire hivatkozni szeretnél.
Ez biztosan megy akkkor, ha egy munkafüzetben van a két munkalap.Üdv.
-
Fferi50
Topikgazda
válasz
gepelek
#39143
üzenetére
Szia!
Képlettel nem lehet a hivatkozást átmásolni egyik cellából a másikba. Viszont a "sima" copy - paste átviszi.
Ez nyilván kevés tételnél - vagy szabályos szerkezetnél járható út.
Amennyiben sok tételről van szó, akkor a makró gyorsabb és kevésbé fáradtságos."De miért van az, hogy csak pár értékkel tér vissza"
Ezt a kérdést nem értem, sem a fájlban, sem a leírásodban nincs benne, hogy mivel keresel azonosítókat.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
csferke
#39121
üzenetére
Szia!
Úgy látszik, nagyon korán volt még az előbb....

Természetesen a B oszlop helyett az E oszlopot kell nézni:
=IF(SUM((MONTH('Pk2'!A$5:A500)=D74*1)*('Pk2'!D$5:D500)*('Pk2'!E$5:E500="b"))=0;"";SUM((MONTH('Pk2'!A$5:A500)=D74*1)*('Pk2'!D$5:D500)*('Pk2'!E$5:E500="b")))Üdv.
-
-
Fferi50
Topikgazda
válasz
szabonorbkk
#39039
üzenetére
Szia!
Esetleg próbáld ki az alábbi képletet egy segédoszlopban:
=DÁTUM(ÉV(A1);HÓNAP(A1);NAP(A1))
Ha működik, végighúzod az oszlopon, majd másolás - irányított beillesztés értéket a segédoszlopra. Utána átmásolhatod az eredeti helyre, segédoszlopot törölheted.Üdv.
-
Fferi50
Topikgazda
Szia!
"Esetleg még azt hogy a keresés beírásakor oda is ugorjon. ( több ezer sornál gyorsabb lenne )"
Ezt hogyan gondolod? Ha talál három egyezőt, mindháromra nem tud ugrani egyszerre. Vagy egyesével ugrál és megvárja, hogy csinálj vele valamit, vagy a legelsőre esetleg a legutolsó találatra tud ugrani.
Az ugrás maga:Rng.Activate
mondjuk ez elé:Rng.Interior.Color=vbYellow ' sárgára színezi a cellátÜdv.
-
Fferi50
Topikgazda
Szia!
"nekem a Rajzszámok kellenének az excel egy másik munkafüzetébe ahol majd ismét vizsgálhatom őket."
És mi akadályoz meg abban, hogy átmásold a szűrés után a látható rajzszámokat a másik munkafüzetbe?
Esetleg az egész feladatot is megadhatnád, mert így csak a részkérdésre kapsz megoldást, ami lehetséges, hogy nem alkalmazható a te esetedben.Üdv.
-
Fferi50
Topikgazda
Szia!
Pontosabban a képlet
=szum($E$4:$E$8)<=480
ehhez kell beállítani a piros hátteret. Amikor a képlet eredménye igaz, akkor érvényesül a hozzá kapcsolódó háttérszín. A feltételes formázás hatóköre is ugyanaz a tartomány.
Mivel nem sztenderd módon van meghatározva, hány sornak kell lennie (2-10 is akár), ezért sajnos minden tartományra külön kell meghatározni a formázást.Üdv.
-
Fferi50
Topikgazda
válasz
kezdosql
#38967
üzenetére
Szia!
Próbáld ki az alábbi makrót:
Sub atrako()
Dim ws1 As Worksheet, ws2 As Worksheet, cl As Range, xx As Long, helye As Range, kodja As Range, kod As String
Set ws1 = Sheets("Munka1")
On Error Resume Next
Set ws2 = Sheets("Jelent?s")
If Err = 9 Then
Set ws2 = Sheets.Add(after:=Sheets(Sheets.Count))
ws2.Name = "Jelent?s"
Else
ws2.UsedRange.Clear
End If
On Error GoTo 0
With ws1.Range("A1").CurrentRegion
For Each cl In .Columns(1).Cells
If cl.Row > 1 Then
If Application.WorksheetFunction.CountA(.Rows(cl.Row)) > 1 Then
Set helye = ws2.Columns(1).Find(what:=cl, LookIn:=xlValues, lookat:=xlWhole)
If helye Is Nothing Then
Set helye = ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
helye.Value = cl.Value: ws2.Columns.AutoFit
End If
For xx = 1 To .Columns.Count
With cl.Offset(0, xx)
If .Value <> "" Then
kod = Left(.Value, 4)
Set kodja = ws2.Rows(1).Find(what:=kod, LookIn:=xlValues, lookat:=xlWhole)
If kodja Is Nothing Then
Set kodja = ws2.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
kodja.Value = kod
End If
ws2.Cells(helye.Row, kodja.Column).Value = Mid(.Value, 5)
End If
End With
Next
End If
End If
Next
End With
With ws2.UsedRange
.Range("A1") = "A000"
.Sort key1:=Range("A1"), order1:=xlAscending, Orientation:=xlSortRows, Header:=xlYes
.Sort key1:=Range("A1"), order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlYes
.Range("A1").Clear
End With
End SubAz alapadatok a Munka1 munkalapon vannak, ha más a lap neve, írd át légy szíves. Az új elrendezést a Jelentés nevű munkalapon hozza létre. Ha nincs ilyen nevű lap, akkor megkreálja, ha már van akkor törli a tartalmát - tehát többször is lefuttatható.
A kód szerinti sorbarendezésnél fontos, hogy az egyes oszlopokban használt négyjegyű kódok első betűje minden oszlopban az előzőnél hátrább legyen az ABC-ben (A011,B0XX,C100 stb). A sorbarendezés akkor is megy, ha nem így van, csak akkor nem lesznek az oszlopok kódjai egymás után.
Kiindulás:
Eredmény:
Üdv. -
Fferi50
Topikgazda
válasz
kezdosql
#38964
üzenetére
Szia!
A cellák elején a 4 karaktert elválasztja még a kettőspont a szövegtől, vagy csak szemléltetésül tetted oda. Esetleg szóköz elválasztja-e, ha nem kettőspont, vagy elég annyit tudni, hogy az első 4 karaktert kell számolni.
És persze ez folytatódik x oszlopon keresztül.
Kell-e az új formációban a dátumoknak sorban lenni (persze az utólag is rendezhető a végén).Üdv.
-
Fferi50
Topikgazda
Szia!
Próbáld meg a következőt:
Egy segédoszlop első cellájába a következő képletet írd be:=Darabteli($A$1:$A$500000;$A1)A tartományt természetesen a sajátodhoz igazítsd.
A képletet húzd végig a segédoszlopon.
Majd a segédoszlopra tegyél szűrőt, a szűrő értéke >1
Ezzel megmaradnak azok a tételek, amelyek azonosak.
Esetleg megpróbálkozhatsz azzal is, hogy sorbarendezed az azonosítókat. Ekkor a segédoszlop képlete:=HA($A2=$A1;"Azonos";"Más")Ezt mint látod a második cellától kell indítani és lehúzni a segédoszlopon.
Erre a szűrő értéke Azonos.
Talán ez elég elindulásnak.Üdv.
-
Fferi50
Topikgazda
válasz
friccccc
#38941
üzenetére
Szia!
Akkor nem tudom, mitől indul el.

Ja, hát látom, van benne kismillió Modul, akkor ott lehet az eb elhantolva. Ha nem lehet nyilvános, tedd fel valahova és küldd el a linket priviben.
Mert sajnos látatlanban egyáltalán nem tudok rá mit mondani - de szerintem mások sem.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
friccccc
#38928
üzenetére
Szia!
"Nekem 3 munkalapon kellene, hogy egyszerre menjen külön-külön a VBA program."
Na ezt nem tudom hogyan lehet, hogy egyszerre és külön-külön is menjen...
A makrók csak egymás után tudnak futni... illetve egymásba ágyazás (azaz egyik hívja a másikat) lehetséges több szinten is.
Ez így elég homályos, amit írtál.
Mi alapján induljon el a futás? Valamilyen eseményre? Esetleg teszel fel egy parancsgombot és arra induljon?
"mindegyiken (függetlenül egymástól) szeretnék futtatni VBA makrókat."
Akkor miért baj, ha csak akkor fut le a makró, ha a munkalap aktív?
Ha ezt nem így szeretnéd, akkor Modulba kell rakni a makrókat, akkor nem kell, hogy aktív legyen az a munkalap, amire a makró hivatkozik. Viszont akkor pontosan kell "címezni" a feladatokat és az utasításokat.Talán ha tennél fel egy mintát, többet tudnánk neked segíteni.
Üdv.
-
Fferi50
Topikgazda
válasz
friccccc
#38919
üzenetére
Szia!
Nagyon jól teszik hogy csak az aktív munkalapon működnek, mert a Private programok csak azon a munkalapon használhatók, amelyek kódlapjára írva vannak.
Ilyen pl. az eseménykezelés, ezt nem is tanácsos közössé tenni (kivéve a később írt lehetőséget).Ha máshonnan is szeretnéd futtatni a programot, akkor Modulba kell tenni, vagy Public -ként létrehozni.
(javaslat VBA súgó).Munkalapok eseménykezelőjét - amennyiben egyforma vagy hasonló funkciót látnak el - be lehet tenni a Thisworkbook kódlapjára a Sheet -tel kezdődő eseménykezelőkbe. Itt az sh változó megmondja, hogy melyik munkalapon generálódott az adott esemény, ez alapján el tudod dönteni, mi legyen a következő lépés.
Üdv.
-
Fferi50
Topikgazda
válasz
pero19910606
#38920
üzenetére
Szia!
Ne +indirect(H5) -öt írj, hanem egyenlőségjellel kezdd =indirect(H5). Az érvényesítésben csak egyenlőségjellel lehet képletet bevinni, nem úgy mint a cellákban
De a további cellákban az I oszlopban mindig a mellette levő cellára kell hivatkozni, nem a H5 cellára.Üdv.
-
Fferi50
Topikgazda
válasz
pero91
#38917
üzenetére
Szia!
"Az indirect függvény a H5-ös cellára hivatkozik, akkor is ha lejjeb lépek és nem a mellete lévőre."
Hiszen te magad írtad be az I oszlopba konkrétan az indirekt(H5) képletet minden cellába.
Nem tudom pontosan mire gondolsz, de a képlet akkor fogja a mellette levő cellát forrásnak tekinteni, ha az I5 cellába beírt képletet lehúzod vagy simán csak lemásolod.Üdv.
-
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.
-
Fferi50
Topikgazda
válasz
GreenIT
#38859
üzenetére
Szia!
Próbáld ki ezt a makrót:
Sub Makró1()
'
' Összesítés
Dim ws As Worksheet, uszlp As Integer, wso As Worksheet, wss
Set wss = Sheets(Array("Munka1", "Munka2", "Munka3"))
wss.Copy after:=Sheets(Sheets.Count)
For Each ws In wss
With ws
uszlp = .Range("A1").End(xlToRight).Column
.Rows(2).Insert shift:=xlDown
With .Range(.Cells(2, 2), .Cells(2, uszlp))
.Formula = "=RIGHT(""000""&COLUMN(),3)&B1&$A$1"
.Value = .Value
End With
.Rows(1).Delete shift:=xlUp
End With
Next
Set wso = Sheets.Add(after:=Sheets(3))
wso.Name = "MunkaÖ (S)"
Selection.Consolidate Sources:=Array(Sheets("Munka1").Range("A1").CurrentRegion.Address(external:=True, ReferenceStyle:=xlR1C1), _
Sheets("Munka2").Range("A1").CurrentRegion.Address(external:=True, ReferenceStyle:=xlR1C1), Sheets("Munka3").Range("A1").CurrentRegion.Address(external:=True, ReferenceStyle:=xlR1C1)), Function:= _
xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
Range("A1").CurrentRegion.Offset(0, 1).Sort key1:=Rows(1), order1:=xlAscending, Orientation:=xlSortRows, Header:=xlYes
With wso
uszlp = .Range("B1").End(xlToRight).Column
.Rows(2).Insert shift:=xlDown
.Range(.Cells(2, 2), .Cells(2, uszlp)).Formula = "=MID(B1,4,LEN(B1)-4)"
.Range(.Cells(2, 2), .Cells(2, uszlp)).Value = .Range(.Cells(2, 2), .Cells(2, uszlp)).Value
.Rows(3).Insert shift:=xlDown
.Range(.Cells(3, 2), .Cells(3, uszlp)).Formula = "=right(B1,1)"
.Range(.Cells(3, 2), .Cells(3, uszlp)).Value = .Range(.Cells(3, 2), .Cells(3, uszlp)).Value
.Rows(1).Delete shift:=xlUp
.Range("A1").Value = "M"
End With
For Each ws In Sheets
If InStr(ws.Name, "(") = 0 Then
ws.Delete
Else
ws.Name = Left(ws.Name, InStr(ws.Name, "(") - 2)
End If
Next
End Sub
A munkanap nevek helyére írd a nálad levő neveket. Csak ez a három munkalap legyen indulóban a munkafüzetben.Üdv.
-
Fferi50
Topikgazda
válasz
GreenIT
#38852
üzenetére
Szia!
Még egy kiegészítés. Az összesítésnél az adatok sajnos nem a fejlécek szerinti ABC rendben, hanem az egyes táblákban levő sorrendnek megfelelően lesznek.
Ezért mielőtt a nevek "egyesítését" elvégeznéd, további 3 műveletre van szükség:
1. A kapott eredményt másolod, majd irányított beillesztéssel transzponálva beilleszted egy új lapra.
2. Az új helyen csinálsz egy sorbarendezést a terméknevek szerint.
3. Az így kapott adatokat másolod és szintén transzponálva visszamásolod az összesítő lapra.Ezután már jöhet a terméknevek "szabás - varrása", mert egymás után lesznek az oszlopok.
Ha nem szeretnéd, hogy a termékek sorrendje megváltozzon, akkor az összesítés előtt átnevezésnél a nevek elé is kell tenni egy folyamatosan növekvő azonosítót, pl. az oszlopot és nem a színek kezdőbetűjét tenném a végére, hanem pl A,B,C betűt.
Vagyis a képlet így nézne ki =Jobb("000" & Oszlop();3) & B1 & "A" az első munkalapon, & "B", & "C" a többin.
Ebben az esetben a sorbarendezésnél nem fog változni az eredeti sorrend.
A név szétszedés képlete is változik természetesen, a transzponálás, sorbarendezés, transzponálás után.
Az első, induló képlet = Közép(B1;4;Hossz(B1)-4)
a folytatás pedig: =Ha(Közép(C1;4;Hossz(C1)-4)=B2;"";Közép(C1;4;Hossz(C1)-4))Üdv.
-
Fferi50
Topikgazda
válasz
GreenIT
#38852
üzenetére
Szia!
Csak ötletelek, hátha mégis tudod használni:
Gondolom a 3 munkalap első sorában vannak a terméknevek, első oszlopában pedig az összetevők megnevezései.
Ebben az esetben én megpróbálnám a következőt:
Az első sor után beszúrnék egy üres sort mindhárom munkalapon.
Az üres sor képlete, kezdve a második oszloptól:
=B1 & "P" az első munkalapon
=B1 & "K" a második munkalapon
=B1 & "S" a harmadik munkalapon
A képletet végighúzni addig, ameddig termékek vannak. Ezután ezt a sort kijelölni. Másolás - irányított beillesztés - értéket.
Ezután az első sort ki lehet törölni.
Így a 3 munkalapon különböző termékneveid vannak, ami az összesítésnél külön-külön oszlopban fog megjelenni. Az összesítésnél be kell jelölni, hogy a feliratokat vegye a felső sorból és a bal oszlopból.Ezután az összesítő lapon ugyanezt visszafelé meg kell játszani:
Üres sor beszúrása:
B2 cella képlete =Bal(B1;Hossz(B1)-1)
C2 cella képlete =Ha(Bal(C1;Hossz(C1)-1)=B2;"";Bal(C1;Hossz(C1)-1)
Ez utóbbi képlet végighúzható az oszlopokon. Így csak egy-egy név marad meg. Utána persze itt is Másolás- irányított beillesztés - értéket. Majd az első sor törölhető.Ha a terméknév alatt még más is lenne, azaz nem egy sor a "fejléc" , akkor csinálni kell egy másolatot mindhárom munkalapról (ez egyébként is ajánlott) és a második és további sort törölni, majd az összesítésre visszamásolni.
Nagyjából erre gondoltam, amikor az összeítést javasoltam.
Üdv.
-
Fferi50
Topikgazda
válasz
csferke
#38812
üzenetére
Szia!
Mert a makróban nem hivatkozhatsz így egy cellára.
Továbbá a TEXT függvény munkalap függvény ezért meg kell ezt is mondani neki. Ráadásul a makróban vessző a paraméter elválasztó és nem pontosvessző.fName=YEAR(Range("A3").Value) & "-" & Application.Worksheetfunction.TEXT(MONTH(Range("A3").Value),"0#")Ennyike.
Üdv.
-
Fferi50
Topikgazda
válasz
molnarbalazs
#38797
üzenetére
Szia!
Egyetlen kritérium, hogy az adott munkavállaló által ledolgozott napok egymás utáni sorrendben legyenek felvezetve - nem kell egymást követő cellákban, csak annyi a követelmény, hogy az aug 4 után valamikor aug 5 illetve annál nagyobb érték következzen az adott munkavállalónál, ne pedig mondjuk aug 2 a dátum oszlopban.
Kell csinálni egy segédoszlopot, nálam ez a H oszlop lett.
H2 cella értéke 0
H3 cella tömbképlete:=HAHIBA(HELYETTE(FKERES($A3-1&$B3&$C3&$D3&"*";$A$2:A$100&B$2:B$100&C$2:C$100&$D$2:$D$100&$H$2:$H2;1;0);$A3-1&$B3&$C3&$D3;"")+1;1)
A képletet Shift+Ctrl+Enter kombóval kell bevinni, az Excel kapcsos zárójelbe teszi.
Ezt végighúzhatod a H oszlopon.A feltételes formázás képlete ezek után:
=$H2=5, hatóköre az $A$2:$D$100 tartományTermészetesen a 100-as végérték helyére írhatsz tetszőlegesen nagy számot, ami biztosan elég lesz a havi foglalkoztatások nyilvántartására. (A teljes oszlopot nem javaslom, mert a képletek azt "nem szeretik").
A segédoszlopot akár el is rejtheted.
Feltételes formázásnál a tömbképlet sajnos nem játszik.Üdv.
-
Fferi50
Topikgazda
válasz
molnarbalazs
#38795
üzenetére
Szia!
A problémát szerintem az egymás utáni napok figyelése jelenti. Ezzel kapcsolatban van is egy kérdésem:
Ha Tóth J. aug2-3-án dolgozott A -nál, majd 4-én nem dolgozott sehol, 5-6-án ismét A-nál, akkor az egy nap "szünet" megszakítja-e a folyamatosságot?Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#38791
üzenetére
Szia!
Nagy eséllyel vagy az egyik vagy a másik - esetleg mindkettő - nem dátum, csak annak látszik.

Állítsd át a cellaformátumot általánosra (vagy számra) mindkettőnél. Amelyikből nem lesz szám, az nem dátum.
A szöveget alakítsd át dátumfüggvényekkel dátummá és akkor működik. A cellaformátum is legyen dátum, de ez önmagában nem elég.Üdv.
-
Fferi50
Topikgazda
válasz
South Velen
#38755
üzenetére
Szia!
Ez egy tömbképlet, amit a Ctrl+Shift+Enter billentyű kombóval kell bevinni.
Az Excel pedig kapcsos zárójelbe teszi.Üdv.
-
Fferi50
Topikgazda
válasz
South Velen
#38753
üzenetére
Szia!
Tömbképletekkel megoldható (Ctrl+Shift+Enter)
F6 cellába:=SZUM((Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="51");(Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="52");(Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="53"))
F7 cellába:=SZUM((Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="54");(Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="55");(Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="56"))
F8 cellába:=SZUM((Munka1!$G$1:$R$1=Munka2!F$5)*Munka1!$G$4:$R$19*(BAL(Munka1!$F$4:$F$19;2)="57"))Ezután a képletek elhúzhatók a Q4-ig bezárólag.
A keresett értékeket konkrétan kell beírnod, csillag nélkül, a cikkszámok első két karakterét külön-külön kell hasonlítani.A *-os megoldás azért nem megy, mert a Munka1 F oszlopban számok vannak és nem szöveg.
Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#38731
üzenetére
Szia!
Az Excel beállításainál kiteheted a gyorselérési eszköztárba az értékek beillesztése parancsot (vagy akár a menüszalagra is).
Ha a Ctrl+C után lenyomod az Alt billentyűt, meglátod az értékek beillesztéséhez a további billentyűt. Nálam ez a 4 volt. (tehát Alt+4).
A formátum másoló pedig ott van fent általában a menüsoron. Az Alt után még néhány billentyűvel (nálam Ő FO aktíválható).Üdv.
-
Fferi50
Topikgazda
válasz
p5quser
#38727
üzenetére
Szia!
Nem hagyott engem sem nyugodni a dolog és kiókumuláltam egy olyan megoldást, ami az eredeti elképzelésedhez hasonlít:
Lépések:
1. Az E1 cellába beírtam a Ma fejlécet. Az E oszlop minden sorában a képlet =MA()
2. A Diagramot kiegészítettem az E oszloppal, mint új adatsorral. Legyen a neve MA
3. A MA adatsort kijelöltem - adatsor diagramtípusának megváltoztatása - csoportosított sáv - másodlagos tengely bejelölve.
4. A másodlagos tengely (ami felül jelent meg a diagramon) minimum - maximum értékeit hozzáigazítottam az alsó tengely értékeihez, majd a feliratokat eltávolítottam.
5. Most jön az igazi trükk: A MA adatsor kitöltésénél színátmenetest jelöltem be. Az első szín fehér. Végponti pozíciója 98%, áttetszőség 100%. A második szín piros.
6. Hátravan még a MA adatsor pozicionálása: Az adatsor beállításainál az Átfedő adatsorok 100 %, A térköz szélessége 0 %.
A végeredmény:
Üdv.
-
Fferi50
Topikgazda
válasz
huliganboy
#38703
üzenetére
Szia!
Egy cellába beírod az aktuális fájl nevét. A képletben pedig az Indirekt függvényt használod:
=DARABTELI(INDIREKT(A1) & "Munka1'!$AU$5:$AU$5000");"egyes vizsgalt elem")
A1 cella értéke:="'[adatbazis 10.hét.xls]"
Így egy cella értékét kell átírnod csak.
Az viszont korlátozás, hogy ez a képlet csak akkor működik, ha a forrás fájl nyitva van. Elérési úttal együtt nem használható.A másik megoldás, hogy a Ctrl+F cserél - egyebek - képletben opciót használva egy menetben kicseréled az összes képletben a régi fájlnevet az újra (természetesen a ha ez a cella értéke opciót nem pipálod be, mert részértéket keresünk és cserélünk. Elég gyorsan végrehajtja - ha nincsenek teljes oszlopok a képletben, ezeket mindenképpen kerülni érdemes, mert nagyon lassít.
Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
MCMLXXXII
#38680
üzenetére
Szia!
Úgy van, ahogyan gondoltam. Ha több cellát jelölsz ki egyszerre, akkor az egy cellára megírt feltételeket nem tudja értelmezni, ezért van a hiba. A Target helyett be kell vezetni egy változót és ciklusban kell végigmenni a tartományon:
Dim cl As Range
Application.EnableEvents = False
For Each cl in Target.Cells
If cl.Column > 4 And cl.Row Mod 2 = 0 Then
If cl = "" Then
cl.Offset(1) = ""
Else
If IsNumeric(cl) 'And Target.Count = 1 Then
cl.Offset(1) = Format(Now, "yyyy.mm.dd h:m")
cl.Offset(1).Locked = True
Columns(cl.Column).EntireColumn.AutoFit
End If
End If
End If
Next
Application.EnableEvents = TrueTalán így már nem lesz hiba.
Üdv.
-
Fferi50
Topikgazda
válasz
MCMLXXXII
#38677
üzenetére
Szia!
Mit jelent konkrétan, hogy összeomlik a VBA? Milyen hibaüzenettel áll meg? Lefagy az Excel? Kicsit részletesebben írd le a jelenséget.
Egyébként valószínűleg a több cellás kijelölés nincs rendben az eseménykezelőben, úgyhogy légy szíves másold be Worksheet_Change (esetleg a Worksheet_SelectionChange ha van) eljárásokat.Üdv.
-
Fferi50
Topikgazda
válasz
ny.janos
#38635
üzenetére
Szia!
"Mit értesz az alatt, hogy
"Abban az esetben, ha valamelyik részpontszám beférne a 3 legmagasabba (ami egy-két verseny esetén előfordulhat)"?"
Ha csak simán a versenyeredmények tartományát vennénk, akkor pl. a te lapodon két verseny után a 3 legmagasabb pontszám Gábornál Kupa1-ről 1530 (teljes pontszám), 1000 (döntőbeli pontszám) és Kupa2-ről 600 (teljes pontszám).
Ezért kell csak a teljes pontszámokra korlátozni a számítást.
Sajnos a Nagy (Large) függvény nem eszi meg a "szakadozott cellákat" egy tömbnek.Üdv.
-
Fferi50
Topikgazda
válasz
FSR-27
#38628
üzenetére
Szia!
Abban az esetben, ha valamelyik részpontszám beférne a 3 legmagasabba (ami egy-két verseny esetén előfordulhat), az alábbi tömbképlet ezt is kiszűri és nem kell hozzá segédoszlop:
=SZORZATÖSSZEG(NAGY(($D$1:$AB$1="Teljes pontszám")*$D5:$AB5;{1;2;3}))
A feltétel, hogy az 1. sorban legyen a Teljes pontszám szöveg. Ha nem ott van (sajnos az egyesített cellák miatt ez nem derült ki számomra), akkor azt a sort írd oda, amelyikben van.Üdv.
-
-
Fferi50
Topikgazda
válasz
#62169858
#38601
üzenetére
Szia!
Na igen, most akkor az összegzés szempontjából kellenek a betűk vagy sem. Mivel az egyik korábbi hozzászólásban arról panaszkodtál, hogy a kisbetűsöket nem adja össze.
Ha a betű nem számít, akkor továbbra is tömbképlet:=SZUM(HAHIBA((ÉRTÉK(KÖZÉP(D8;2;5))=7)*7;0);HAHIBA((ÉRTÉK(KÖZÉP(D8:AH8;2;5))=12)*12;0);HAHIBA((ÉRTÉK(KÖZÉP(D9:AG9;2;5))=12)*12;0);HAHIBA((ÉRTÉK(KÖZÉP(AH9;2;5))=5)*5;0))
Mondjuk azt nem értem, miért van a következő sor is figyelembe véve.Üdv.
-
Fferi50
Topikgazda
válasz
dori0495
#38592
üzenetére
Szia!
Én csinálnék egy Userformot, amire a megfelelő adatokat a gomb megnyomására kiírná a makró és megjelenítené. Ezt egyszer meg kell szerkesztened, utána a kiválasztott sor alapján automatikus lehetne a kitöltés.
Arról nem is beszélve, hogy a Userformot szépen ki is lehet "csicsázni".Üdv.
-
Fferi50
Topikgazda
válasz
#62169858
#38590
üzenetére
Szia!
Ez a (továbbra is) tömbképlet:
=SZUM(HAHIBA((ÉRTÉK(HELYETTE(NAGYBETŰS(D8);"N";""))=7)*7;0);HAHIBA((ÉRTÉK(HELYETTE(NAGYBETŰS(D8:AH8);"N";""))=12)*12;0);HAHIBA((ÉRTÉK(HELYETTE(NAGYBETŰS(D9:AG9);"N";""))=12)*12;0);HAHIBA((ÉRTÉK(HELYETTE(NAGYBETŰS(AH9);"N";""))=5)*5;0))az adott tartományokban a 7, 12, 5 számokat adja össze, amelyek előtt N betű áll és figyelembe veszi a kis N betűket is.
Szerintem ez alapján az E és M betűs képletet, valamint a számvariációkat már meg tudod te is csinálni.Egy pici segítség még: Az Excelben a logikai nem =0, a logikai igen =1 számértékként is értelmezhető. Ezért van a képletben a megfelelő számmal való szorzás.
Üdv.
-
Fferi50
Topikgazda
válasz
ny.janos
#38574
üzenetére
Szia!
Semmi gond. csak amiatt írtam, hogy mindenki számára világos legyen tömbképlet helyes bevitele.
Természetesen szoktuk felhasználni - esetenként akár javítani - mások megoldását, ezért (is) van a fórum.
Bármilyen hihetetlen, még én is sokat tanulok az itteniekből.Üdv.
-
Fferi50
Topikgazda
válasz
#62169858
#38562
üzenetére
Szia!
Továbbra is tömbképlet:
=SZUM(HAHIBA(ÉRTÉK(HELYETTE(D8;"N";""));0);HAHIBA(ÉRTÉK(HELYETTE(D8:AH8;"N";""));0);HAHIBA(ÉRTÉK(HELYETTE(D9:AG9;"N";""));0))Az E hasonlóan.
Természetesen a tömbképlet Shift+Ctrl+Enter

Üdv.
A programkód gombot (második sor első gomb) használd légy szíves, mert úgy áttekinthetőbb sokkal amit írsz. -
-
Fferi50
Topikgazda
válasz
dellfanboy
#38537
üzenetére
Szia!
Nem a cellaformátum a lényeges (sajnos). Ebben az esetben nem egyforma a két cella tartalma. Vagy nem látható karakterek vannak benne, vagy szóközök a végén, vagy más.
Legjobban úgy győződhetsz meg róla, ha a keresendő cella értéket átmásolod a találatod helyére. Ha így megtalálja, akkor hiába láttad egyformának a két értéket. A ctrl+F beállítástól függően akkor is megtalálja, ha csak részben egyezik a tartalom.Üdv.
-
Fferi50
Topikgazda
válasz
dellfanboy
#38523
üzenetére
Szia!
e4 cellát keresi először a ck2:cm3147 táblában, ha nem találja akkor a d4&e4-et a másikban.
Üdv.
-
Fferi50
Topikgazda
válasz
RedHarlow
#38498
üzenetére
Szia!
Például:
=Darabhatöbb(A:A;A2;E:E;"Kitöltve")/Darabteli(A:A;A2)*100 (vagy %-os cellaformázás)Szerintem érdemes lenne a nevek oszlopot egy külön oszlopba betenni, ismétlődéseket kilőni és ahhoz bevinni a képletet. Ez lehet akár külön munkalapon is. Természetesen akkor a függvényekben a munkalapra hivatkozást is be kell tenni.
Üdv.
Új hozzászólás Aktív témák
- Microsoft és egyéb dobozos retro szoftverek
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - 15% AKCIÓ
- Xbox / Microsoft Store feltöltőkártya kód (digitális, HU) több címlet, több db, azonnal, olcsón
- Apple iPhone 17 256GB fekete használt, újszerű 100% akku (0 ciklus) Apple garancia 2027.02.11
- HIBÁTLAN iPhone 12 Pro Max 128GB Pacific Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS4517, 100% Akksi
- HIBÁTLAN iPhone 15 Pro 128GB Blue Titanium -1 ÉV GARANCIA - Kártyafüggetlen, MS4658, 90% AKKSI
- 2db Kolink kontinium 1200w platinum
- iPhone 17 Mist Blue 256 GB - Bontatlan !! www.stylebolt.hu - Apple eszközök és tartozékok !!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



