- Fujifilm X
- Házimozi haladó szinten
- Milyen házat vegyek?
- Melyik tápegységet vegyem?
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Philips LCD és LED TV-k
- HiFi műszaki szemmel - sztereó hangrendszerek
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Szünetmentes tápegységek (UPS)
- Nvidia GPU-k jövője - amit tudni vélünk
-
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
-
föccer
nagyúr
Makróban kell megoldani, ott goyrsabban fog futni. 40k sor már combos dubpla fkeressel, de azért még nem beláthatatlan idő.
Makróból ki lehet kapcsolni a nem szükséges automatikus újrasámolást, a screenupdating-et, szóval lehet némileg gyorsítani.
A makró megírásában is tudunk segíteni, de ahhoz pontosan kell látni a munkalapok elnevezéseit és a szükséges oszlop/sor azonosítókat.
üdv, föccer
-
-
-
Delila_1
veterán
Rögzítettem egy makrót, ahol a Táblázat1 B oszlopában vannak a törlendő cellák (Field:=2, Adat címmel).
Szűri a 2 értékre, törli azokat, majd megszünteti a szűrést. Ilyen egyszerű.Sub Makró1()
ActiveSheet.ListObjects("Táblázat1").Range.AutoFilter Field:=2, Criteria1:= _
"=0", Operator:=xlOr, Criteria2:="=#HIÁNYZÓ"
Range("Táblázat1[Adat]").ClearContents
ActiveSheet.ListObjects("Táblázat1").Range.AutoFilter Field:=2
Range("Táblázat1[#Headers]").Select
End Sub
-
föccer
nagyúr
Lehet nem a legszebb megoldás, de O365-ben szépen működik.
Feladat lista A:A oszlopban, Emberek listája G:G oszlopban. I1 képlete lentebb.
A függvény érzéketlen a feladatok és emberek darabszámára. Az I1 képletét addig kell lehúzni, amíg elképzelhetőnek tartod a maximális emberek számát.
A függvény nem használ segédoszlopot, és nem kezeli az esetleges többszörös neveket/feladatokat. Az algoritmus úgy dolgozik, hogy az első embertől kezdve osztja ki a feladatokat annak sorrendjében, a neki kijáró számban. A maradékok egyenletesen vannak elosztva, szintén az első embertől kezdődően.
=HA(SOR()>DARAB2(G:G);"";TRANSZPONÁLÁS(INDIREKT("A"&(SOR()-1)*KEREK.LE(DARAB2(A:A)/DARAB2(G:G);0)+HA(SOR()<=MARADÉK(DARAB2(A:A);DARAB2(G:G));SOR();MARADÉK(DARAB2(A:A);DARAB2(G:G))+1)&":A"&((SOR()-1)*KEREK.LE(DARAB2(A:A)/DARAB2(G:G);0)+HA(SOR()<=MARADÉK(DARAB2(A:A);DARAB2(G:G));SOR();MARADÉK(DARAB2(A:A);DARAB2(G:G))+1))+(HA(SOR()<=MARADÉK(DARAB2(A:A);DARAB2(G:G));KEREK.LE(DARAB2(A:A)/DARAB2(G:G);0)+1;KEREK.LE(DARAB2(A:A)/DARAB2(G:G);0)))-1)))
ps abban az esetben ha kevesebb a feladat, mint az ember, akkor kicsit meghülyül a függvény. Ha szükséges, akkor megcsinálom, hogy ezt is szépen lekezelje, de azt már nagyon akarnom kell.
-
föccer
nagyúr
Vagy simán függvényekkel is ki lehet mókolni. 2 megoldás jut az eszembe hirteken.
1: segédoszloppal. A feladatok mellé felveszel egy 1..n-ig történő pozitív egész számokhat (kerekítés vagy kerek.fel vagy plafon függvény), ahol n a személyek száma (darab2 függvény). Ez után transzponál függvénnyel egymás mellé rakod a neveket és szűrő függvénnyel pedig alá felsorolod a feladatokat (szűrőben a segédszámokra szűrsz).
2: a feladat és dolgozó ember számának függvényében kiszámolod, hogy 1 embernek mennyi feladat jut (maradékra figyelni), majd indirekt függvénnyel meg tudod adni a szükséges tól-ig tömbképleteket. A maradék az utolsó embernek jut. Vagy el is lehet osztani a maradékot,, ez már algoritmus kérdése.
üdv, föccer
-
lappy
őstag
Power Query segítségével
-
Fferi50
Topikgazda
Szia!
Egy megoldási lehetőség:
A B2 cella képlete:=HA(DARABHATÖBB($A$2:A2;INDEX($E$1:$F$4;HOL.VAN($A2;$E$1:$E$4;0);1);$B$1:B1;"X")<INDEX($E$1:$F$4;HOL.VAN($A2;$E$1:$E$4;0);2);"X";"")
Ezt igazítsd az adataidnak megfelelően. Kérlek figyelj a $-okra a címzésben.
A képlet megvizsgálja, hogy az adott településen az addigi X-ek száma elérte-e a kívánt értéket, ha igen, akkor nem tesz tovább X-et. -
Fferi50
Topikgazda
Szia!
A többszörös HA függvények helyett erre használható az FKERES függvény, melynek negyedik paraméterét - tartományban keres - igazra kell állítani.
A kereséshez létre kell hozni egy kétoszlopos táblázatot:
-- első oszlop tartalmazza a határértékeket
-- második oszlop a hozzá tartozó kategóriát.
Pl. így:
A B1 cella képlete húzható lefelé.
Üdv. -
Pakliman
tag
"Alakula molekula"
A következő javaslatom lett volna a keresendő/beírandó lista egy külön táblázatba, de őszintén, nem mertem ajánlani, mert túl-túl kezdőnek látszottál az előzőek alapján. Így viszont már más a felállásSub Fut()
'A főtáblára vonatkozó deklarációk:
Dim usF As Long
Dim sorF As Long
Dim elsősor As Long
'Főtábla utolsó sorának meghatározása
usF = Columns("AC").Rows(Rows.Count).End(xlUp).Row
'A keresendőket tartalmazó táblára vonatkozó deklarációk:
Dim wsK As Worksheet 'a hosszú "elnevezést" lecseréljük majd egy rövidre...
Dim usK As Long
Dim sorK As Long
'Az egyszerűség kedvéért úgy vesszük, hogy a MUNKAFÜZET már nyitva van,
'a neve Csere.xlsm, a keresendők listája a Keresendők nevű munkalapon van...
'A keresendő kifejezések az A oszlopban, a G-be írandók a B, a H-ba írandók pedig a C oszlopban vannak
'Feltételezzük, hogy az első sor fejléc...
'A keresendőket tartalmazó tábla utolsó sorának meghatározása...
Set wsK = Workbooks("Csere.xlsm").Worksheets("Keresendők")
usK = wsK.Columns("A").Rows(Rows.Count).End(xlUp).Row
elsősor = 2 'nem tudom, Nálad melyik sorban kezdődik:(
For sorF = elsősor To usF
'Csak akkor vizsgálódunk, ha a sorban a G és H oszlopban sincs még semmi...
If (Cells(sorF, "G") & Cells(sorF, "H")) = "" Then
'Feltétel(ek) vizsgálata...
'Sok feltételt vizsgálunk 1 cellában...
For sorK = 2 To usK
If Cells(sorF, "AC") Like "*" & wsK.Cells(sorK, "A") & "*" Then
Cells(sorF, "G") = wsK.Cells(sorK, "B")
Cells(sorF, "H") = wsK.Cells(sorK, "C")
'Mivel volt találat és a G és H oszlop ki van töltve,
'ezért a többi lehetőséget már nem vizsgáljuk!!
Exit For
End If
Next sorK
End If
Next sorF
End Sub -
Pakliman
tag
Szia!
Te írtad, hogy esetleg makróval is... Ezért küldtem olyan megoldást. Bár ezt a feladatot makró nélkül nem lehet elvégezni.
Azt hittem, hogy legalább alapszinten ismeredAz AC oszlop tartalmát és az alapján a G és H kitöltését ez végzi:
If feltétel = True Then
Cells(sor, "G") = "beírandó..."
Cells(sor, "H") = "beírandó..."
End If
Egy "konkrét" példa:If Cells(sor, "AC") = "cica" Then
Cells(sor, "G") = "ragadozó"
Cells(sor, "H") = "nyávog"
End IfEzt annyiszor illeszted be a kódba, ahány féle feltétel van.
DE!!!!!!!!!
Ha nem minden esetben ugyanazok a keresendő adatok vannak az AC oszlopban, hanem lehet pl. cica, macska, macsek, cirmi stb, amit ugyan annak kell "értelmezni" a keresésben, akkor már sokkal komplikáltabb a dolog.
Az sem mindegy, hogy az AC oszlopban maga a keresendő adat található (pl.: cica),
vagy a cellán belül valahol előfordul (pl.: A cica felmászott a fára. -> Ez esetben a feltételvizsgálatIf Cells(sor, "AC") Like "*cica*" Then
).
Mivel nem írtál példákat az AC oszlop lehetséges tartalmára és a G, H oszlopba beírandóra sem, ezért jelenleg csak ennyit tudok segíteni
Ha ki akarod küszöbölni a manuális szűréseket, akkor fel kell kötni a gatyát és ismerkedni a VBA-val.
Ha írsz konkrétumokat, segítek -
Pakliman
tag
Ezt még ki kell bővíteni, hogy megfeleljen a feladatnak.
Nincs benne direkt szűrés, hanem minden futtatáskor végigmegy a sorokon.
(Ezt is elszúrtam, helyesen:If (Cells(sor, "G") & Cells(sor, "H")) = "" Then
)
Megnézi, hogy az adott sor G és H oszlopában van-e már valami.
Ha nincs, akkor a feltételvizsgálatnak megfelelően beírja az adott sor G és H oszlopába a megfelelő értéket. -
Pakliman
tag
Szia!
Későn vettem észre a javítandót
Sub Fut()
Dim us As Long
Dim sor As Long
Dim elsősor As Long
'Utolsó sor meghatározása
us = Columns("AC").Rows(Rows.Count).End(xlUp).Row
elsősor = 2 'nem tudom, Nálad melyik sorban kezdődik:(
For sor = elsősor To us
'Ha a sorban a G és H oszlopban sincs még semmi...
If (Cells(sor, "G") & Cells(sor, "G")) = "" Then
'Feltétel vizsgálata...
If feltétel = True Then
Cells(sor, "G") = "beírandó..."
Cells(sor, "H") = "beírandó..."
End If
End If
Next sor
End Sub -
Pakliman
tag
Szia!
Egy nagyon leegyszerűsített kód, ami az elvet mutatja (egy lehetőségként):
Sub Fut()
Dim us As Long
Dim sor As Long
Dim elsősor As Long
'Utolsó sor meghatározása
us = Columns("AC").Rows(Rows.Count).Row
elsősor = 2 'nem tudom, Nálad melyik sorban kezdődik:(
For sor = elsősor To us
'Ha a sorban a G és H oszlopban sincs még semmi...
If (Cells(sor, "G") & Cells(sor, "G")) = "" Then
'Feltétel vizsgálata...
If feltétel = True Then
Cells(sor, "G") = "beírandó..."
Cells(sor, "H") = "beírandó..."
End If
End If
Next sor
End Sub -
Fferi50
Topikgazda
Szia!
Kipróbálhatnád, hogy a V oszlopba írod be ugyanígy a képletet. Ezután a képletet átalakítod értékké:
Range("V2:V" & sor).Value=Range("V2:V" & sor).Value
Ezután adnád hozzá a V oszlop érvényesítését!
Így minden kategória rendben lenne és a lista is meglenne szerintem.
Üdv. -
Fferi50
Topikgazda
Szia!
Lövöldözünk jó távolról, aztán - mint a számítógépes játékban - fogynak az életek.
Meg az ötletek. De ha meg lehet nyitni egyszerre mindkét táblát, akkor egy VLOOKUP vagy INDEX azért segíthet a listaopció beállításában. Hiszen azt írtad van egyedi azonosító minden sorban.
Üdv. -
Fferi50
Topikgazda
Szia!
Akkor mi lenne, ha az előző napi aktuális táblából indulnál ki és azt szerkesztenéd - adnál hozzá új sorokat, a törlendőket pedig megjelölnéd. Ezután egy lépésben törölhetnéd a megjelölt sorokat. Nem kellene bajlódni a listaállapot "szinkronizálásával".
Talán a munkád is kevesebb lenne....
Üdv. -
Fferi50
Topikgazda
Szia!
"Az aktuális tábla sorai napi szinten változnak, kerülnek ki sorok, illetve érkeznek újak. Emiatt nem lehet a V oszlopot egy az egyben átmásolni."
Ez most éppen ellentmondásban van az előző hsz-ban írtakkal, idézem:
"Erre azért lenne szükség, mert nem találtam arra megoldást, hogy egy előző napi legördülő listát és a kiválasztott beállítást áthozzam az aktuális táblába."
Akkor most változik az aktuális tábla vagy nem? Az előző napi beállítás kell vagy másik?
Üdv. -
Fferi50
Topikgazda
-
Fferi50
Topikgazda
Szia!
Az a gond, hogy az ucell változód az A oszlop utolsó celláját tartalmazza, ezért aRange(Range("V2"),ucell))
azA2:Vx
tartományra hivatkozik. Nem véletlenül volt a V benne, mert a V oszlop utolsó celláját kell megkeresni.
Ha ragaszkodsz az A oszlop utolsó cellájának megkereséséhez, akkorRange("V2:V" & ucell.Row)
legyen a tartományi hivatkozásod.
Üdv. -
Fferi50
Topikgazda
Szia!
Ilyen külső hivatkozást az érvényesítésnél nem lehet megadni.
Ha mindenképpen máshonnan szeretnéd a listát megadni, akkor kell egy hivatkozás valamelyik munkalapon a forrás munkafüzet tartományára, amivel a listát megadod. Ezután ezt használhatod a lista forrásaként.
Tehát két lépésben megy:
Egy munkalapon, ha a forrás munkafüzet nyitva van (ha nincs nyitva, teljes elérési út kell):
A2 képlete:=[Munkafüzet3.xlsx]Lista!$A2
Ezt húzod le a 17. sorig.
Majd az érvényesítésnél ezt a tartományt adod meg.
Üdv.
Ps. Bocs, hogy az előbb ezt nem vettem észre. -
Fferi50
Topikgazda
Szia!
1. Ha már van Personalod, akkor a VBA nézetben kinyitod, megnyitod a modulját. Majd egyszerűen átmásolod a kívánt makrót oda. Ha az eredeti helyen nem akarod otthagyni, akkor a kivág - áthelyez megy vagy másolás után törlöd onnan.
Ha még nincs Personal, akkor indítasz egy makrórögzítést az egyéni makró munkafüzetbe. Pl. kijelölsz egy cellát. Utána leállítod a rögzítést. Átmész a VBA nézetbe. A többit lásd fent.
2.Elvileg jó a kód, nem generálhat üres sorokat (persze az itt kikommentelt sorok kellenek bele.) Bár én inkább így csinálnám:
ActiveSheet.Range("$A:$W").AutoFilter Field:=23, Criteria1:="=lakás", _
Operator:=xlOr, Criteria2:="=szoba"
Range(Range("W2"),Range("W" & Rows.Count).End(xlUp)).ClearContents
Activesheet.ShowAlldata 'vagy
Activesheet.AutofilterMode=False3.
Dim ucell as Range
Set ucell=Range("V" & Rows.Count).End(xlUp)
With Range(Range("V2"),ucell).Validation
'..... ide jönnek a soraid
End With
Üdv. -
Fferi50
Topikgazda
Szia!
Természetesen meg lehet csinálni a szűrést makróval is. Ha folytonos a D oszlop:With ActiveSheet.Range(Range("$D$1"), Range("$D$1").End(xlDown))
.AutoFilter Field:=1, Criteria1:=Array("alma", "körte", "eper","csoki", "autó"), Operator:=xlFilterValues
.Offset(0, -3).Interior.Color = vbYellow
End With
A vagylagos szűrőkritériumokat meg lehet adni egy tömbben.Ha van üres cella is a D oszlopban, akkor az utolsó cellát
Range("$D$1").End(xlDown) helyett Range("$D$" & Rows.Count).End(xlUp)
formában kell megadni.
Természetesen a feltételeket is megadhatod változóval vagy cellatartományokban, a lényeg az, hogy amikor feltételként használod azokat, akkor tömb legyen.Üdv.
-
Fferi50
Topikgazda
Szia!
Kérdések:
A D oszlop celláiban egy-egy feltétel (szó) szerepel? Mert akkor vagy kapcsolat van a feltételek között. Ezt ki lehet értékelni egyetlen kifejezéssel:If "alma,körte,eper,csoki,autó" Like "*" & Range("D1").Value & "*" then Range('"A1").Interior.Color=vbYellow
Ha az egész oszlopot nézed, akkor pedig For Each ciklus használható:Dim cl as Range
For Each cl In Range("D1:D5000").Cells
If cl.Value="" Then Exit For 'ha nincs érték a cellában, kilépünk a ciklusból
If "alma,körte,eper,csoki,autó" Like "*" & cl.Value & "*" then cl.Offset(0,-3).Interior.Color=vbYellow
Next
Az "alma,körte,eper,csoki,autó" helyére a szűrni kívánt szöveget írd be.
A Like operátor a mintához hasonlót keresi, tehát az 5 közül bármelyik feltétel fennál, a színezés megtörténik.Üdv.
-
oke
senior tag
Az az ötletem elhasalt, hogy a legördülő lista az érvényesítés/lista szerint lenne létrehozva, úgy néz ki, nem bír eltárolni 15 tételt, melyek közül több is elég hosszú szöveget tartalmaz. Így csak a táblázatból történő lista jöhet szóba és annak az átmakrózása az aktuális excelbe.
Makróban hogyan lehetne egy ilyen legördülő listát létrehozni - konkrét választható tételekkel - a "V" oszlopba, minden olyan sorba, amiben van érték ((ol. "A" oszlop alapján?). Még sosem került képbe ilyen feladat,
-
oke
senior tag
Kiegészítés, vannak olyan sorok, amik újak, így ott is meg kellene jelennie a választó listának. A lista értékei az érvényesítés/lista alatt vannak beírva, nem táblázatból.
Ha manuálisan szeretném ugyan ezt, azaz a lista elemet tartalmazó cellát másolni, a lista eredeti értékével, azt hogyan lehetne kivitelezni? FKERES-el csak az értéket viszi át.
Előre is köszönöm a segítséget. -
Mutt
senior tag
Szia,
Vmi ilyen kell mint ami a képen látható az N-oszlop végén, ami mindig az L-oszlopban látható értékek átlagát veszi?
Ha igen, akkor a Kimutatáson kívül tudod megoldani. Az N2-es cellában az alábbi képlet van:
=HA(K2="Grand Total";HA(SOROK(L1:L$2)>1;ÁTLAG(L1:L$2);L1);"")
Ez a képlet, amikor a "Grand Total" (angol Kimutatás esetén ez az utolsó sor neve) szöveg megjelenik átlagolja az L-oszlopban a felette található értékeket. A képlet le van húzva jó sokáig, hogy ha bővülne a kimutatás akkor is számoljon. Egy kis feltételes formázással még a külalakját is meg lehet változtatni, hogy a kimutatás részének tűnjön.
üdv
-
Fferi50
Topikgazda
Szia!
Ha a változások követése be van állítva, akkor az ott megjelölt napokra visszamenőleg egy munkalapra ki lehet íratni a változtatásokat. Abból pedig tudsz kimutatást csinálni.
Sajnos a megnyitás és a mentés időpontja nem látszik, de miután a közös használatnál a vátoztatások csak a mentés során kerülnek be véglegesen (ezért -is- lehetnek ütközések egy-egy cellában), aki a változtatást végrehajtotta, nyilván mentette is.
Így keresd a súgóban: Változások nyomon követése közös munkafüzetekben
Üdv. -
Fferi50
Topikgazda
-
Delila_1
veterán
Az L vegyes értékeiből dátumot, ill. pontot hoz létre az M oszlopban:
Dim usor As Long
usor = Range("L" & Rows.Count).End(xlUp).Row
With Range("M2:M" & usor)
.FormulaR1C1 = "=IFERROR(DATEVALUE(MID(RC[-1],3,10)),""."")"
.Copy
.PasteSpecial xlPasteValues
.NumberFormat = "m/d/yyyy"
End With -
Fferi50
Topikgazda
Szia!
Háát 2x nem is kell hozzáadni a +1-et.
Idézet:"sormeghat = Range("a" & rows.count).End(xlUp).Row+1
minden esetben az A oszlop első üres cellájának sorát adja meg."Tehát a másolás céljánál már nem kell hozzáadni vagy persze itt is lehagyhatod.
Ez a formula minden esetben használható, nem csak a fejléces munkalapon.Üdv.
-
Fferi50
Topikgazda
Szia!
Mert a
sormeghat = Range("a1").End(xlDown).Row
eredménye csak a fejléc esetén a munkalap utolsó sorának számát adja vissza, azon túl pedig nem lehet adatot beírni.
Helyettesormeghat = Range("a" & rows.count).End(xlUp).Row+1
minden esetben az A oszlop első üres cellájának sorát adja meg.Üdv.
-
Delila_1
veterán
"mai nap és 3 nap közöttiek". Ma +3, vagy ma -3?
Tettem fel egy füzetet, ahol gombnyomásra irányított szűrővel kigyűjtöm a MA() ± 3 napos tételeket, ill. másik helyre azokat a sorokat, amik MA -3 napnál régebbiek, vagy MA +3 napnál újabbak. Adhatsz egy harmadikat, ami a mai dátum szerint szűr.
A szűrések nem módosítják az eredeti (A:C) tartományt, a szűrt állományokat oda másolhatod, ahova akarod.
-
Delila_1
veterán
Ha visszateszed a kiszűrteket, minek az egész?!
Ez a makró két lapra szedi szét a szükséges, és a törlendő sorokat.
Sub Torles()
Dim sor As Long, talal As Variant, usor As Long, ide As Long
Sheets("Eredeti").Select
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = usor To 2 Step -1
talal = Application.Match(Cells(sor, 1), Columns(12), 0)
If VarType(talal) = vbError Then
ide = Sheets("Ideiglenes").Range("A" & Rows.Count).End(xlUp).Row + 1
Rows(sor).Copy Sheets("Ideiglenes").Cells(ide, 1)
Range("A" & sor & ":D" & sor).Delete Shift:=xlUp
End If
Next
End Sub -
Delila_1
veterán
Nincs más hátra, soronként kell vizsgálódni.
Az A oszlop dátumai szerint keresek. Azokat a dátumokat, amiknek a sorát meg kell hagyni, az L oszlopban sorolom fel.
Sub Torles()
Dim sor As Integer, talal As Variant, usor As Integer
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = usor To 2 Step -1
talal = Application.Match(Cells(sor, 1), Columns(12), 0)
If VarType(talal) = vbError Then Rows(sor).Delete
Next
End Sub -
ny.janos
tag
Makró helyett próbálkozhatsz a speciális szűréssel (korábbi verziókban irányított szűrés). Ha állandó az a tömböd, melyeket adatokat nem szeretnél a szűrt állományban látni, akkor a feltételtartományod egyszer kell kialakítanod. Ha ez folyamatosan változó, akkor a feltételtartomány karbantartására kell valami egyszerűsítő módszert kitalálni.
2013-as verziótól használhatod a szeletelőket már tartományon belül is (nem csak pivot táblában). Bár a 300 lehetőség nem túl kevés, de ha ezekből nem túl sok az, amely értékeket ki akarod venni az eredményből, akkor nem olyan vészes az a pár kattintás.
-
Fferi50
Topikgazda
Szia!
Egyrészt, igaz amit Delila írt, tehát makróban angol függvényneveket használunk, az pedig a Date.
Másrészt a dátumok különleges bánásmódot igényelnek, nem mindegy, hogyan használjuk.
Próbáld így:ActiveSheet.Range("$A:$X").AutoFilter Field:=4, Criteria1:= _
"<" & Format(Date - 5, "###"), Operator:=xlAnd
Üdv. -
oke
senior tag
Ehhez a táblázathoz kapcsolódóan lenne még egy dolog, amire nem tudom a megoldást:
Van egy leszűrt rész, amit át szeretnék másolni a "mappa" fülre. Ez jelenleg meg is van, a 2. sortól illeszti be. Viszont úgy kellene átalakítanom, hogy a "mappa" fül utolsó szabad sorától másolja be:Set Athelyez = Intersect(Cells(1, 3).CurrentRegion, Cells(1, 3).CurrentRegion.Offset(1, 0).Columns(3)).SpecialCells(xlCellTypeVisible).EntireRow
'Athelyez.Copy Destination:=Worksheets("mappa").Range("2:2")Próbálkoztam ezzel, de nem tudom, hogy a változót hogyan rakjam be a fenti részbe:
Dim sormeghat As Long
sormeghat = Range("a1").End(xlDown).RowIlletve hogyan kellene úgy "megcímezni/meghatározni" az utolsó sort, ha másolás előtt nem "lépek" át a "mappa" fülre.
-
Fferi50
Topikgazda
Szia!
A szűrés után látszó cellákat megkaphatod a SpecialCells tulajdonsággal:
set latszo=Intersect(Cells(1, 9).CurrentRegion, Cells(1, 9).CurrentRegion.Offset(1, 0).Columns(9)).SpecialCells(xlCellTypeVisible).EntireRow
A 9. oszlop látszó celláinak sorait tartalmazza, az első sor (fejléc nélkül).
Ezt ezután egy lépésben törölheted, vagy másolhatod.
latszo.Delete
vagy
latszo.Copy Destination:=celrangeÜdv.
-
Fferi50
Topikgazda
Szia!
Erre mondják azt, hogy klasszikus adatbázis feladat, ami nem Excellel oldható meg optimálisan. Hiszen ha belegondolsz, ez legalább 3 dimenziós táblát jelent. Minden emberhez tartozik a tevékenysége és az irányítószáma alapján egy mátrix.
Már csak azért is érdekes ez, hiszen az 1111 irányítószám alatt nem csak Attila végezhet festést, hanem gondolom még több másik ember is.
Tehát "alaptáblákat" kellene létrehoznod az emberekre, a tevékenységekre, az irányítószámokra, közöttük pedig "kapcsolómezőket" kialakítani a kereséshez. A keresés pedig összetett lesz, az INDEX és HOL.VAN függvényekkel lehet megoldani szerintem.Üdv.
-
Fferi50
Topikgazda
Szia!
Hol vannak a nevek? És milyen alapon lehetne a tevékenységekkel és az irányítószámokkal összehozni ezeket?
Nyilván a tevékenységek különböző irányítószámokon is előfordulhatnak.
Első lépésként szerintem az A B oszlopon levő tevékenység-irányítószám 40 ezer sorából kiszűrném az ismétlődéseket. (Adatok - ismétlődések eltávolítása - mindkét oszlop kijelölve)
Ezután kiderül, hány sorod marad.
De még mindig él az első kérdésem.Üdv.
-
Delila_1
veterán
Valószínű, hogy az R1C1 formátum tűnik bonyolultnak.
Úgy rémlik, valamikor ezen a fórumon írtam róla, keress rá.A makró majdnem teljesen makrórögzítésen alapult. A H2 képletét beírtam a füzetben, ezt rögzítettem. Azt is rögzítheted, mikor a képletet irányított beillesztéssel értékké alakítod.
Újabb rögzítés a villámkitöltés – ennek a VBA-s szintaktikáját nem ismertem.
Beírod a képletet az I2-be, rögzítés indítása, az I2-n állva a szerkesztőlécen leenterezed a képletet.
Ezután már csak kis igazításokra van szükség, mint az alsó sor meghatározása, és az I oszlopban a képletet 1 lépésben viheted be I2-től az I oszlop aljáig. -
Delila_1
veterán
Sub Datumok()
Dim usor As Long
With Range("H2")
'H2-be dátum képlete
.FormulaR1C1 = "=DATEVALUE(LEFT(RC[-1],10))"
'Képlet másolása és érték beillesztése irányítottan
.Copy
.PasteSpecial xlPasteValues
.NumberFormat = "m/d/yyyy" 'Cella formátuma
.FlashFill 'Villámkitöltés
End With
usor = Range("H" & Rows.Count).End(xlUp).Row 'alsó sor a H oszlopban
'Képlet I2-től I alsó sorig
Range("I2:I" & usor).FormulaR1C1 = _
"=IF(RC[-1]<TODAY(),""Régebbi"",IF(RC[-1]=TODAY(),"" Mai"",""Jövőbeni""))"
End SubNémi magyarázatot tettem az egyes sorokhoz.
-
Delila_1
veterán
Gyors eredményt érhetsz el, ha az oszlop melletti cellába beírod a dátumot (2019.04.02), majd az Adatok | Adateszközök | Villámkitöltés ikonra kattintasz. Ez az alatta lévő sorokba beírja a megfelelő dátumokat.
Nálam a belinkelt adataid az A-, a villámkitöltés a B oszlopban vannak.
Új oszlopba jön a képlet.=HA(B2<MA();"Régebbi";HA(B2=MA();"Mai";"Jövőbeni"))
-
Mutt
senior tag
Szia,
Ez az Excel 1993-ig használt makró nyelve, "Excel 4 macro" kulcsszóra keresve még találsz hozzá súgót,
Valószínű több sorod van mint amit megadtál, de a sorok a következőket csinálják:1.
=LÉP("i";2;DARAB2(!$B:$B);1)
Ez egy FOR - NEXT ciklus; lesz vhol egy sorod KÖVETKEZŐ() paranccsal. Ami ezen sorok között van azt fogja annyiszor végrehajtani ahány adatod van a B-oszlopban. Létrehoz egy i nevű változót, amit 2-es értékről indít és növeli folyamatosan amíg a kívánt darabszámot el nem éri. A képlet végén az 1, a lépésköz.Szószerinti VBA megfelelője pedig:
Dim i As Long
For i = 2 To WorksheetFunction.CountA(Range("B:B")) Step 1
'lépések
Next i2.
=KIJELÖL("S6O1")
Kijelöli a 6-os sor 1 oszlopának metszetét, vagyis az A6-os cellát. RC (row-column, magyarul SO - sor-oszlop) hivatkozás van használva, Valószínű ez egy felesleges lépés, általában a kijelölés után egy művelet szokott jönni amit lehet kijelölés nélkül is végrehajtani.VBA megfelelője:
Cells(6, 1).Select
3.
=KIJELÖL(ÖSSZEFŰZ("S";i;"O3"))
Itt is egy kijelölés van, csak felhasználjuk a FOR-NEXT ciklusban létrehozott változót, vagyis a harmadik oszlop sorain megyünk végig.Dim i As Long
For i = 2 To WorksheetFunction.CountA(Range("B:B")) Step 1
Cells(3, i).Select
'egyéb lépések
Next i4.
=KÉPLET(A10)
Ez nem makró függvény, hanem az egyik beépített függvény, amely megmondja, hogy az A10-es cella képletet tartalmaz-e vagy sem?Szószerinti VBA megfelelője:
van_benne_keplet = WorksheetFunction.IsFormula(Range("A10"))
Hatékonyabb változat:
van_benne_keplet = Range("A10").HasFormula
Érdemes az Excel 4 makrót lecserélni.
Ha feldobod, hogy mi a feladat akkor kapni fogsz segítséget a fórumon.üdv
-
Mutt
senior tag
Szia,
A gondot az okozza, hogy ugyanazok az azonosítók és értékek más nappal is bekerülnek a táblába, viszont a jelenlegi képletet csak a legkorábbi nap érdekli.
pl. a 21-es sorban a 4455-ös azonosítóhoz az elvégezve dátum augusztus 4, miközben a 2-es sorban van már egy elvégezve augusztus 2-vel. A MIN függvény augusztus 2-át fog vissza adni, és mivel a 4-es sorban meg van a párja ugyanarról a napról, így minden további eset amikor a 4455-ös azonosító fel van sorolva már duplikáció lesz.
A feladatodat érzésem szerint bővíteni kell és téged azok az esetek érdekelnek, amikor:
1. ugyanazon a napon van az azonosítónál ELVÉGEZVE és LEHETŐSÉG és
2. csak azokat a sorokat akarod megjelölni, ahol több lehetőség van és azok napja egyezik az elvégezve napjával.A megoldás, hogy nem keressük meg a legkorábbi napot, hanem megszámoljuk hogy az adott napon hányszor van ELVÉGEZVE és LEHETŐSÉG:
=HA(HA(DARABHATÖBB($E:$E;$E2;$F:$F;"elvégezve";$N:$N;$N2)*DARABHATÖBB($E:$E;$E2;$F:$F;"lehetőség*";$N:$N;$N2);DARABHATÖBB($E$2:$E2;$E2;$F$2:$F2;"lehetőség*";$N$2:$N2;$N2)>1;HAMIS);"x";"")
Ennek a megoldásnak a számodra még annyi előnye van, hogy a nap oszlopnak nem kell innenől dátumnak lennie, visszarakhatod a korábbi állapotába.
üdv
-
Mutt
senior tag
Szia,
Megis adtad a problémá indokát: a szöveg függvény eredménye szöveg lesz, amin a MINHA függvény szépen "elhasal" (0-t ad vissza, hiszen a betűknek nincs minimuma).
A gyors megoldás, hogy akkor kell egy segédoszlop, amiben a dátumnak látszó szöveget dátumra alakítod vissza és azon már menni fog. =DÁTUMÉRTÉK(N2) kell neked.
A Kimutatásban a Mező csoportosítása opciót nézd meg, mert az jobb megoldás mint a szöveggé alakítás.
üdv
Új hozzászólás Aktív témák
Hirdetés
- Diabetes - Cukorbetegség
- NBA és kosárlabda topic
- Fujifilm X
- Hivatalos a OnePlus 13 startdátuma
- Házimozi haladó szinten
- Kerékpárosok, bringások ide!
- Álláskeresés, interjú, önéletrajz
- Okosóra és okoskiegészítő topik
- exHWSW - Értünk mindenhez IS
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- További aktív témák...
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
- Eredeti, új Lenovo 330W töltők - ADL330SDC3A
- BESZÁMÍTÁS! MSI B450 TomaHawk R5 3600 16GB DDR4 512GB SSD RX5500 XT 8GB Rampage SHIVA TT 530W
- CarPlay / Android Auto adapter meglévő Android alapú fejegységhez
- Lenovo ThinkStation P520 Workstation! W-2145, 64GB, 512 SSD /Quadro - Számla, garancia
- BESZÁMÍTÁS! 1TB Western Digital SN850X NVMe SSD meghajtó garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest