Hirdetés
-
Friss GPU IP-ikkel is készült az ARM
ph Az új Immortalis dizájn elég jól skálázhatónak tűnik.
-
Féltucat régi Samsung kapott új One UI-t, köztük az A52s
ma A 6.1 olcsó, drága, ütésálló és közönségkedvenc készülékekre is megérkezett.
-
Friss előzetesen a Monster Hunter Wilds (PC, PS5, XSX)
gp A PC-re és konzolokra szánt folytatás valamikor jövőre debütál.
-
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
-
Pá
addikt
Vlookup függvényt szeretnék használni, de úgy hogy a táblázat fordítva van, szóval mintha transponsálva lenne.
Tehát oslzopok helyett a sorokat szeretném nézni.szerk: Hlookup
[ Szerkesztve ]
''Annyira vagyunk egészségesek, amennyire a gondolataink humánusak.''
-
Delila_1
Topikgazda
válasz #05304832 #18955 üzenetére
Nálam a másik tábla a Munka2 lapon van. Ez kétszer szerepel a makróban, írd át a saját lapod nevére. Segédoszlopként a Munka2 lap Z oszlopát használja, amit a másolás után töröl. Ha ezt az oszlopot használod, írd át a makróban mind a 4 helyen.
A módosítások után kijelölöd az első lap B oszlopban a másolandókat, és indítod a makrót.
Sub mm()
Dim elso As Long, utolso As Long
utolso = Sheets("Munka2").Range("C" & Rows.Count).End(xlUp).Row + 1
If utolso = 2 Then utolso = 12
Selection.Copy Sheets("Munka2").Range("Z" & utolso)
Sheets("Munka2").Select
elso = utolso: utolso = Range("Z" & Rows.Count).End(xlUp).Row
Range("C" & elso & ":C" & utolso) = "=VLOOKUP(Z" & elso & ",Munka1!B:D,3,0)"
Range("C12:C" & utolso).Copy
Range("C12").Select
Selection.PasteSpecial Paste:=xlValues
Columns("Z").Delete
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz #05304832 #18958 üzenetére
Pontosan így értettem a dolgot (bár az oszlopazonosítók nem látszanak a képeken).
Nálam csakis a segédoszlopként használt Z oszlopot törli, azt pedig szándékosan.
Ha gondolod, küldd el ezt a két lapot.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz #05304832 #18961 üzenetére
Most, hogy már látom a lapneveket és a címsorokat, írd meg, melyik lapon melyik című oszlopból választasz, és a másik lapon mit, hova akarsz bemásolni. Az utóbbi lapon melyik az első üres oszlopod?
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
rtom
senior tag
Helló,
azt meg lehet oldani, hogy a táblázatom egy adott oszlopába csak jelszóval lehessen beírni? A lap formátuma lapvédelemmel ellátott, attól eltérő védelemre lenne szükség. Pl. olyanra gondolok, hogy a laphoz rendelek egy makrót, ami mondjuk a kurzor G oszlopra mozgatása esetén eggyel balra mozgatja azt, de hogyan lehetne ezt jelszóval feloldani?
-
hallgat
csendes tag
Szia!
Ha 2010 Excelt használsz, a következő módon meg tudod oldani:
1., A cellának alap esetben zároltnak kell lennie a cellaformázás -> védelem fülön.2., Ne legyen bekapcsolva a lapvédelem.
3., Menj a Korrektúra eszköztárra, azon belül a változások blokkhoz és válaszd a Tartományok szerkesztésének engedélyezése gombot.
4., Itt megadhatod, hogy ha védett lesz a lap, akkor mely cellák szerkeszthetők mégis, ha tudja a felhasználó a jelszót.
5., Kapcsold be a lapvédelmet
[ Szerkesztve ]
Office 2010 Attól, hogy a verebek alakzatba állnak, az még nem SAS!
-
alfa20
senior tag
Sziasztok,
Most az órabérrel küzdök és elakadtam kicsit:
D2: 8:00 - (munkakezdés ideje)
E2: 17:00 - (munkaidő vége)
F2: 1:00 - (ebéd idő)
G2: =SZUM(E2-D2-F2) - (ledolgozott órák száma eredmény:8:00)
H2: =SZUM(G2:G6)*24 - (heti ledolgozott órák szám)
I2: 8,50 € - (órabér)
K2: =SZUM(G2*J2)*24 - (Napi bér
L2: =SZUM(K2: K6) - (heti bér)A fenti dolog addig szépen is működik amíg a ledolgozott órák száma egész óra, vagy fél óra (pl.: 8:00 vagy 8:30), de ha valahol negyed vagy háromnegyed óra jön ki eredményül (pl.: 8:15 vagy 8:45), akkor nem jól számolja napi illetve a hetibért.
tudna valaki segíteni a problémámban?
Köszönöm előre is!
[ Szerkesztve ]
"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)
-
hallgat
csendes tag
-
-
tPedro_
őstag
Sziasztok!
Az alabbi problemara keresek excel-es megoldast, ha letezik ilyen persze:
Adott egy fa adatszerkezet, minden csomopontjaban az ott levo elemek darabszama. Ezt kene egy diagrammal abrazolni ugy, hogy a csomopontok merete a darabszamtol fuggoen lenne kisebb/nagyobb.
Lehet ilyet kesziteni excelben? Vagy van esetleg mas megoldas fa adatszerkezet abrazolasara?
Remelem ertheto volt, mire lenne szuksegem, koszi elore is.
Udv,
-
gaben1117
senior tag
Sziasztok!
Nem teljes mértékben excel a probléma, de szorosan összefüggésben van.
Hogyan tudom azt megoldani körlevélnél, hogy az elkészült leveleket egyesítésnél külön dokumentumba mentse el? (rekordonként külön fájl, mert alapból ugye egy doksiba hozza létre őket külön oldalon)
Előre is köszi!
-
nova001
senior tag
hello
kövi a problémámvan egy exel abba igy nézki az adatok
335 VELEKEY SZERELVÉNYGYÁRTÓ
336 VENTAS COFFEE HUNGARY KFT
337 VILATI GYÁRTO ZRT
338 VILLEROY & BOCH
339 VÖRÖSKŐ KFT – EURONICS
340 VÖRÖSKŐ KFT – EURONICS
stbstbakarok egy lenyiló listát amibe abc sorrendbe vannak a nevek és ha elkezdek gépelni kidobja a javaslatot ?? vagy valami ehez hasonlo kéne nekem
-
m.zmrzlina
senior tag
válasz nova001 #18973 üzenetére
Nekem is volt egy hasonló problémám. Az erre adott válaszok közt nézz körül!
Kell hozzá egy ActiveX Combobox. Nálam az egyszerűsíti a dolgokat, hogy egy jól körülhatárolható tartományba (B oszlop) írja egymás alá a Comboboxban (Automatikus kiegészítéssel) bevitt értékeket.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
lappy
őstag
-
hallgat
csendes tag
válasz hallgat #18947 üzenetére
Sziasztok!
Sikerült túlesnem a szintaktikai bénázáson , DE...
Tudtok erre gyorsabban lefutó megoldást?
Ez így már tisztességes ideig elszórakozik egyetlen oszloppal is, nem 190-nelSub Makró1()
Dim o As Integer
Dim s As Integer
For o = 190 To 2 Step -1
For s = 1422 To 3 Step -3
Sheets("Munka2").Cells(s, o).Select
If IsEmpty(Sheets("Munka2").Cells(s, o)) Or (Sheets("Munka2").Cells(s, o)) = 0 Then
Sheets("Munka2").Range(Cells(s, o), Cells(s - 2, o)).Delete Shift:=xlToLeft
End If
Next s
Next o
End SubKöszi!!!
Office 2010 Attól, hogy a verebek alakzatba állnak, az még nem SAS!
-
m.zmrzlina
senior tag
válasz hallgat #18980 üzenetére
Nézd át ezt az oldalt! Főleg attól a résztől, hogy: Read/Write Large Blocks of Cells in a Single Operation
Esetleg ez is segíthet. Vagy ez.
Szerintem nem fogod megúszni a tömbök használatát.
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz hallgat #18980 üzenetére
Már az sokat gyorsít, ha a
Sheets("Munka2").Cells(s, o).Select
sort kihagyod. Nem szükséges ráállnod a cellára a törléshez.
A képernyőfrissítést is kapcsold ki a futás idejére, ahogy m.zmrzlina javasolta.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
hallgat
csendes tag
válasz m.zmrzlina #18981 üzenetére
Köszönet!
Ezt nem most fogom átrágni, de hasznos lesz
A tömböket... No igen, egyszer rá kéne már szánni magam.
Köszönöm!!!
Office 2010 Attól, hogy a verebek alakzatba állnak, az még nem SAS!
-
-
m.zmrzlina
senior tag
válasz hallgat #18983 üzenetére
A két egymásba ágyazott ciklusban kb 95000 olvasás-írás van. ((1400/3)*190) ez rengeteg időt visz el. Nem a belső ciklusban lévő kiértékelés a sok hanem a feladat végrehajtása a 95000-szeri olvasás-írás. Ezen már csak apró szépségtapasz az egy felesleges sor kihagyása és az Application.ScreenUpdating=False(True) bár néha ez is tud látványos eredményt hozni.
Esetleg a For-Each-Next használata a For-Next helyett segíthet valamit.
A tömböket... No igen, egyszer rá kéne már szánni magam.
Van az a feladat amikor nem tudod megkerülni. -
gaben1117
senior tag
Valaki rá tudna kukkantani, hogy mi lehet a baj? Valmiért nem fut le a makró, asszem syntax errort ír. A módszer amit próbálok abban a hszben van, amire most válaszoltam.
Ezt írja a visual basic:
"Sub AllSectionsToSubDoc()
Dim x As Long
Dim § As Long
Dim doc dokumentumApplication.ScreenUpdating = False
Application.DisplayAlerts = FalseÁllítsa doc = ActiveDocument
§ = doc.Sections.Count
Az x = szakasza - 1 az 1-Step -1
doc.Sections(x).Range.Copy
Documents.Add
ActiveDocument.Range.Paste
ActiveDocument.SaveAs (doc.Path & "\" & x & ". Doc")
ActiveDocument.Close Hamis
Következő xApplication.ScreenUpdating = True
Application.DisplayAlerts = TrueEnd Sub
"A cél az lenne, hogy amikor létrejön a körlevél, akkor rekordonként külön fájlba lehessen darabolni vagy eleve úgy mentse. (4 oldalanként kéne szabdalni) Bármilyen megoldás jó lenne.
-
Outlander
őstag
Üdv.
Kiegészítés: 2010-es verzió, illetve mindegy a végkifejlet, kördiagram vagy akármi..
Köszi.
Work until You no longer have to Introduce Yourself.
-
Mutt
aktív tag
válasz alfa20 #18967 üzenetére
Szia,
G2: =SZUM(E2-D2-F2) - (ledolgozott órák száma eredmény:8:00)
Ezen képlet helyett inkább használd ezt:
=MARADÉK(E2-D2;1)-F2Ez helyesen kezeli az esti műszakos ledolgozott időt is (pl. este 10 és reggel 6 közötti órákra is megy).
üdv.
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz hallgat #18980 üzenetére
Hello,
A megoldásom egy másik módszert használ, az eredeti lapból csak a hasznos (ahol a cella nem üres vagy 0) adatokat átemeli egy másik lapra (a neve output, de lent állíthatod ezt).
Egyszerre 3 sor hasznos adatát egy tömbben tárolja. A sor végén pedig kiíratja a másik lapra a tömböt. Utána 3 sorral feljebb megy és azon is végig megy és kiír.
Nekem 11-16 másodperc alatt lefut egy 1422x190-es táblán, remélem nálad is rendben fog menni.
Kommenteltem, hogy könnyen javítható legyen.Sub Torol3asaval()
Dim arrEredmeny() 'dinamikus tömb az értékek tárolásához
Const LastRow As Integer = 1422 'utolsósor
Const LastColumn As Integer = 190 'utolsóoszlop
Dim vRow As Long 'változó a vizsgált sorok nyomonkövetéséhez
Dim vColumn As Long 'változó a vizsgált oszlopok nyomonkövetéséhez
Dim vHits As Long 'változó a soronként a feltételeknek megfelelő eredményekhez
Dim i As Long
Dim vStartTime
Dim wsOutput As Worksheet
Const wsName As String = "output" 'ide tesszük az eredményt
Dim wsActiveSheet As String
'nézzük meg mennyi idő alatt fut le
vStartTime = Time
'elmentjük az eredeti lapot
wsActiveSheet = ActiveSheet.Name
'megnézzük hogy van-e a keresett névvel munkalap a füzetben
For i = 1 To Sheets.Count
If Sheets(i).Name = wsName Then vHits = 1
Next i
'ha nincs akkor létrehozzuk a lapot, különben megnyitjuk
If vHits <> 1 Then
Set wsOutput = Sheets.Add
wsOutput.Name = wsName
Else
Set wsOutput = Sheets(wsName)
wsOutput.Cells.Clear
End If
'visszamegyünk az eredti lapra
Sheets(wsActiveSheet).Activate
'kikapcsoljuk a képernyő frissítést hogy gyorsabb legyen
Application.ScreenUpdating = False
'utolsó sortól elindulunk vissza
For vRow = LastRow To 1 Step -3
'töröljük a tömb tartalmát
Erase arrEredmeny
'ide gyűjtük hogy hány oszlop van ahol nem üres vagy 0 van az utolsó sorban
vHits = 0
'végig megyünk a sor oszlopain
For vColumn = 1 To LastColumn
'ha az érték nem üres vagy nulla akkor egy tömbbe elmentjük a sor és feletti 2 értéket
If Cells(vRow, vColumn).Value <> 0 And Cells(vRow, vColumn).Value <> "" Then
'növeljük a sikeres találatok számlálóját
vHits = vHits + 1
'átméretezzük a tömböt hogy új találatokat is tudjon tárolni
ReDim Preserve arrEredmeny(1 To 3, 1 To vHits)
arrEredmeny(1, vHits) = Cells(vRow - 2, vColumn).Value
arrEredmeny(2, vHits) = Cells(vRow - 1, vColumn).Value
arrEredmeny(3, vHits) = Cells(vRow, vColumn).Value
End If
Next vColumn
'kiírjuk a találatokat, ha van mit
If vHits Then
'az első 3 sor elé újabb 3 sort szúrunk be
wsOutput.Rows("1:3").Insert Shift:=xlDown
For i = 1 To vHits
With wsOutput
'az első 3 sorba beírjuk a korábbi találatokat
.Cells(1, i) = arrEredmeny(1, i)
.Cells(2, i) = arrEredmeny(2, i)
.Cells(3, i) = arrEredmeny(3, i)
End With
Next i
End If
Next vRow
'visszakapcsoljuk a frissítést
Application.ScreenUpdating = True
Debug.Print "Futási idő: " & Format(Time - vStartTime, "s") & " sec"
End Subüdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz gaben1117 #18986 üzenetére
Hello,
A http://www.vbaexpress.com/kb/getarticle.php?kb_id=139 oldalon található makró Word-höz van.
Nekem rendesen megy is ott.
A lényeg, hogy ne Excelben használd, hanem vagy beleteszed Normal.dotm-be vagy a körlevél eredményébe és szépen szakasztörésenként sorszámozva új fájl készít.üdv.
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
hallgat
csendes tag
válasz m.zmrzlina #18985 üzenetére
Szerintem sem úszom meg a tömböket
Mindent el kell egyszer kezdeniMost néztem épp Mutt válaszát...
Eljött az ideje a tanulásnak
Köszönöm a segítséget!!!!
Office 2010 Attól, hogy a verebek alakzatba állnak, az még nem SAS!
-
hallgat
csendes tag
Khm...
Nagyon köszönöm!!!!!
Holnap nekifutok, hogy meg is értsem
A feladatot már megoldottad, de itt a remek alkalom számomra, hogy elkezdjem megtanulni a tömböket használni.
Azt hiszem megadtad a kezdő, vagy inkább végső lökést, ezért külön hála.
Össze sem lehet hasonlítani a tempót.
Nem nélkülözhető bizonyos pont után ez az ismeret.Még egyszer köszi!
Office 2010 Attól, hogy a verebek alakzatba állnak, az még nem SAS!
-
Mutt
aktív tag
Egy másik helyen hangzott el a kérés, de szerintem itt is hasznos lehet ennek az egyik megoldása:
Azt hogyan lehetne szerintetek megoldani, hogy egy legördülő listából ki lehessen választani, hogy jóváhagyva vagy megtagadva de csak akkor ha egy "kódot" ami sima szám egy cellába beír.
Pl A1-ben a legördülő lista "Jóváhagy/Megtagad" de csak akkor lehet rányomni bármelyikre is ha a B cellába beírja, hogy 20130917
Adatérvényesítésnél Lista típust használva és forrásnak ezt a képletet megadva ez megoldható:
=HA(SZÁM(B1);ELTOLÁS(D1;0;0;DARAB2(D:D));)A D1 cellában a Jóváhagy, D2-ben pedig a Megtagad szöveg legyen.
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
gaben1117
senior tag
-
Mutt
aktív tag
válasz nova001 #18973 üzenetére
Hello,
...akarok egy lenyiló listát amibe abc sorrendbe vannak a nevek és ha elkezdek gépelni kidobja a javaslatot ?? vagy valami ehhez hasonlo...
Ha fontos, hogy gépeléskor már feljöjjön a javaslat, akkor csakis ActiveX combobox-al oldható meg a feladat.
VBA-val megoldható, hogy dinamikus tartományból ABC sorrendben legyen feltöltve a combobox.Ha elég hogy egy legördülő listából válasszon a felhasználó, akkor viszont az Adatérvényesítés is működik.
Ehhez az eredményhez kell pár előkészület:
1. Javasolt dinamikus tartományokat létrehozni, hogy a képletek rövidebbek legyen és kezeljék az újonnan bevitt adatokat.
A példámban 3 db dinamikus tartományt definiáltam.
Az első a bementi listát adja vissza, neve EredetiLista.
Képlete: =ELTOLÁS(Munka1!$B$2;0;0;DARAB2(Munka1!$B:$B)-1)
A második a bemeneti lista ABC sorrendjét adja vissza, neve ABCSorrend.
Képlete: =ELTOLÁS(Munka1!$C$2;0;0;DARAB2(Munka1!$B:$B)-1)
A harmadik pedig a végeredményt, ABC sorrendben az egyedi értékeket mutatja, neve: ABCLista
Képlete: =ELTOLÁS(Munka1!$D$2;0;0;DARABTELI(Munka1!$D:$D;">""")-1)2. Ezek után kezdhetjük az ABC sorba rendezést, ehhez a DARABTELI függvény használható.
A képlet ennyi: DARABTELI(bemeneti tartomany;"<"&vizsgált cella).
Ez megmondja hogy a vizsgált cella hanyadik a tartományban ABC sorrend szerint. pl. 2 azt fogja jelenti, hogy van előtte 2 találat.
A C2-es cellába ez a képlet menjen: =MAX(DARABTELI(EredetiLista;"<"&EredetiLista))
Ezt a képletet jó sokszor le kell másolni, hogy minden elem biztosan le legyen ellenőrzíve.3. A C-oszlopban tehát visszakapjuk a sorrendet, de mivel az eredeti listában is lehet ismétlődés ezért a sorrendben is lesznek azonos értékek. Ezért mielőtt megkeressük a legkisebb sorszámot ezt a listát ismétlődés mentessé kell tenni. Ehhez a Gyakoriság függvény használható fel többek között, a megoldásban a ABCSorrend/(GYAKORISÁG(ABCSorrend;ABCSorrend)>0) állítja elő a kívánt eredményt.
Megvan az egyedi sorrend, így már csak sorban ki kell olvasni növekvő értékben a számokat, Ez tipikusan a KICSI függvénnyel oldható meg. A megoldásomban az ÖSSZESÍT függvény paraméterezésével hívtam meg a KICSI függvényt, ennek az az előnye, hogy a hibás adatokat az ÖSSZESÍT függvény ki tudja automatikusan hagyni nem kell plusz képleteket beírnom.
Végre tehát megvan a sorrend, vagyis {0;1;2;3;4;5}. Innen már könnyen csak ki kell iratnom azt a cégnevet amely a 0 mellett található a B oszlopban. Ehhez az INDEX függvényt és a HOL.VAN-t használtam.
A fentiek alapján állt elő ez a hosszú képlet a D2-es cellában:
=HAHIBA(INDEX(EredetiLista;HOL.VAN(ÖSSZESÍT(15;6;ABCSorrend/(GYAKORISÁG(ABCSorrend;ABCSorrend)>0);SOROK(D$2:D2));ABCSorrend;0));"")
Ezt is jó sokat le kell másolni a D-oszlopban.Készen is vagyunk, már csak egy adatérvényesítést kell megadnunk az egyik cellára, a listának a ABCLista függvényt használva.
A fentiek egyrésze Mike Girvin ötletén alapul!
üdv
[ Szerkesztve ]
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Telda
addikt
Hali!
Lenne egy nagyon amatőr kérdésem.
Hogy tudom a cella formátumát beállítani, hogy én csak a számot írom be, de mögé íródik hogy "perc" "mm" stb?
Pl. beírom a cellába hogy 36 és az enter leütése után mögé teszi hogy "mm".
Illetve ugyan ez percre.Köszi!
-
Új hozzászólás Aktív témák
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- Adobe Creative Cloud - 2024. 04. 05 - 2025. 04. 05-ig
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest