Hozzászólások
-
SzerzőBejegyzés
-
Nem fogadja el a fórummotor a makrós fájlt. Sebaj.
Alt+F11-re bejön a VB szerkesztő. Bal oldalon kikeresed a füzetedet, abban is a ThisWorkbook lapot. Ezen duplaklikk, mire jobb oldalon kapsz egy nagy üres felületet. Ide másold be az alábbi makrót.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Selection = Format(Now, "hh:mm") End Sub
Lehet, hogy az idézőjeleket, vagy a sor elején lévő szóközöket át kell írnod, mert innen hibásan megy a másolás. Ha igen, akkor a hibás sor piros karakterekkel látszik az editorban.
A füzetet makróbarátként kell elmentened, hogy a következő megnyitáskor is működjön a duplaklikk.Szia!
A VB szerkesztőben a ThisWorkbook laphoz rendeltem egy makrót, ami a cellán állva duplaklikkre fix értékként beviszi az aktuális időt.
Ez csak akkor fog működni, ha minden lapon megszünteted a Bejelentkezés, és Kijelentkezés sorokban az érvényesítést.Szívesen.
„Jót nevettem”, ez is valami, de legalább a megoldással is tudtál mit kezdeni?Feltettem a módosított fájt, benne a hozzá tartozó mesével.
A füzetben rosszul írtam: nem az A:M, hanem az A:N tartomány adja a kimutatás alapját.
Az N oszlop FKERES függvénye az A oszlop ID-je alapján beírja a dolgozó nevét, ez szerepel a kimutatásban.- A hozzászólás módosításra került: 4 years, 8 months telt el-delila. Indok: Javítás
Attachments:
You must be logged in to view attached files.Imre már írta, hogy „Teszt adatok nélkül pedig egy csomó időmbe tellene próbálgatni”.
Az időket úgy másold át, ahogy előtte az A:E tartományt.
Tegyél fel egy fájlt, amiben már összemásoltad az adatokat a különböző füzetekből.Szívesen. Mi van a többi résszel?
A Range(„A2:E” kezdetű sor elején is kijavítottad az ActiveSheet.UsedRange.Rows.Count részt?
Nem lenne világosabb 2 változót felvenni?
Pl. a megnyitott füzet lapján az eddig-, a Célmunkalapon pedig az ide változót adhatnád meg.
A másolandó füzet megnyitásakor
eddig=range(„A” & rows.count).end(xlup).row
ide=wb.worksheets(„Célmunkalap”).range(„A” & rows.count).end(xlup).row+1Másolás:
range(„A2:E” & eddig).copy wb.worksheets(„Célmunkalap”).range(„A” & ide)Szia Imi!
Ugyanezeket az észrevételeket (dupla másolás, kettőspont hiánya) tettem én is a másik fórumon, ahova először feltette a kérdést Sutyi.
Üdv, Kati
Hoppá! Meghaladja a fájl mérete a megengedettet. Törlöm az első két lapot, és csak az általam készített lapokat hagyom meg a füzetben. Hátha…
Attachments:
You must be logged in to view attached files.Összeállítottam a másolat másolatát. Igaz, nem pont-, hanem vonal diagramot rajzoltam, de szerintem így jobban látszanak az értékek.
Az eredeti Munka1 lapról készítettem egy Másolat nevűt, ezt babráltam meg, és erről készítettem egy kimutatást a Kimutatás lapra, majd abból egy diagramot.Erre gondolsz?
Private Sub CommandButton1_Click() Label1.Caption = Format(Cells(1), "0.000000") End Sub
Szívesen.
Biztosan áttetted az OOQ1:OOQ4 tartományt egy közelebbi oszlopba. 🙂Kicifráztam Titok adatait a 2. lapon.
Attachments:
You must be logged in to view attached files.Vegyél fel egy lapot, ami üres, vagy csak olyasmi van rajta, amit mindenki láthat. Legyen a neve pl. Kezdőlap.
A ThisWorkbook laphoz rendelj egy makrót.Private Sub Workbook_Open() Sheets("Kezdőlap").Select UserForm1.Show End Sub
Ez indítja a UserForm1-et, ami csak egy textboxot, és egy commandbuttont tartalmaz (meg esetleg labelt, ami a jelszót bekérő szöveget tartalmazza).
A textbox PasswordCar tulajdonságához írj be egy csillagot. Ez a karakter jelenik majd meg begépeléskor.
Jön a gomb makrója.
Private Sub CommandButton1_Click() If TextBox1 <> "Jelszó" Then 'Jelszó helyett írd az igazi jelszót TextBox1 = "" Else UserForm1.Hide UserForm2.Show End If End Sub
A UserForm2 tartalmazza a füzet többi adatának a bevitelét, miegyebet.
A Userform1 bezárását a jobb felső X-szel megakadályozhatod, nézz utána. Ilyent keress:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Szívesen.
Írj a másik fórumra, mielőtt kitépik egymás haját! 😀A makró végét átírtam. A jelszo_1 és jelszó_2 résznél a Select Case utasításban látod, mit kell átírnod.
Az End Sub fölötti sort megszüntettem, mert az egyes Case utasításoknál láthatóvá tettem a lapokat.Else 'A jelszóhoz kötött munkalap meghatározása Select Case jelszo Case "jelszo_1" Sheets(2).Visible = xlSheetVisible Sheets(5).Visible = xlSheetVisible Case "jelszo_2" Sheets(3).Visible = xlSheetVisible Sheets(4).Visible = xlSheetVisible Sheets(6).Visible = xlSheetVisible Case "jelszo_3": lap = 4 Case "jelszo_4": lap = 5 Case "jelszo_5": lap = 6 Case "jelszo_6": lap = 7 Case "jelszo_7": lap = 8 End Select End If End Sub
Kiegészítettem a makrót azzal, hogy ha a saját jelszavaddal lépsz be, minden lap látható legyen, és a lapvédelmet is levettem róluk.
Private Sub Workbook_Open() Dim lap As Integer, jelszo As String For lap = 2 To Sheets.Count 'lapok láthatóságának megszüntetése, védelme Sheets(lap).Protect Password:="SzuperTitkosJelszo" Sheets(lap).Visible = xlSheetVeryHidden Next 'Jelszó bekérése jelszo = Application.InputBox("Kérem a jelszót", "Jelszó bekérése", , , , , , Type:=2) 'Saját jelszavad esetén minden lap láthatóvá tétele, zárolás megszüntetése If jelszo = "Saját_jelszavam" Then For lap = 2 To Sheets.Count 'lapok láthatóvá tétele, védelem megszüntetése Sheets(lap).Unprotect Password:="SzuperTitkosJelszo" Sheets(lap).Visible = xlSheetVisible Next Else 'A jelszóhoz kötött munkalap meghatározása Select Case jelszo Case "jelszo_1": lap = 2 Case "jelszo_2": lap = 3 Case "jelszo_3": lap = 4 Case "jelszo_4": lap = 5 Case "jelszo_5": lap = 6 Case "jelszo_6": lap = 7 Case "jelszo_7": lap = 8 End Select Sheets(lap).Visible = xlSheetVisible 'Az adott lap láthatóvá tétele End If End Sub
Szia!
A ThisWorkbook laphoz rendelj egy makrót, ami a füzet behívásakor automatikusan indul. Az első lap állandóan látható, a többiek lapja 2-től kezdődik.
Private Sub Workbook_Open() Dim lap As Integer, jelszo As String For lap = 2 To Sheets.Count 'lapok láthatóságának megszüntetése, védelme Sheets(lap).Protect Password:="SzuperTitkosJelszo" Sheets(lap).Visible = xlSheetVeryHidden Next 'Jelszó bekérése jelszo = Application.InputBox("Kérem a jelszót", "Jelszó bekérése", , , , , , Type:=2) Select Case jelszo 'A jelszóhoz kötött munkalap meghatározása Case "jelszo_1": lap = 2 Case "jelszo_2": lap = 3 Case "jelszo_3": lap = 4 Case "jelszo_4": lap = 5 Case "jelszo_5": lap = 6 Case "jelszo_6": lap = 7 Case "jelszo_7": lap = 8 End Select Sheets(lap).Visible = xlSheetVisible 'adott lap láthatóvá tétele End Sub
Minden lap a „SzuperTitkosJelszo”-val van védve, amit átírhatsz. A Case utasításoknál írd át a jelszo_1-et és társait a valódi belépési jelszavakra. A számukat növelheted.
„Ennyi kifizetés volt: „# ##0″ Ft”
Ügyelj a szóközökre!
A hivatkozás egyszerűen =A1- A hozzászólás módosításra került: 5 years, 1 month telt el-delila.
Mit szólsz a
d = right(„0” & Month(a),2)
formához? Kiküszöbölheted vele a feltételeket.Sub MM1() Dim lr As Long, r As Long lr = Cells(Rows.Count, "B").End(xlUp).Row For r = lr To 2 Step -2 If Range("A" & r) > Range("B" & r) Then ' Range("A" & r & ":C" & r + 1).ClearContents Range("A" & r & ":C" & r + 1).Delete Shift:=xlUp End If Next r End Sub
Szívesen. 🙂
A Rows(r) az egész sort jelöli ki az állandók törlésére.
Sub MM1() Dim lr As Long, r As Long lr = Cells(Rows.Count, "B").End(xlUp).Row For r = lr To 2 Step -1 If Range("A" & r) > Range("B" & r) Then Range("A" & r & ":C" & r).ClearContents ' Range("A" & r & ":C" & r).Delete Shift:=xlUp End If Next r End Sub
A megjegyzésbe tett sor az A:C részt úgy törli az r sorból, hogy az alatta lévő cellákat feljebb viszi, míg a másik törli a tartalmat, és üresen maradnak a cellák.
A lap neve, ahonnan másolsz: „Eredeti”, ahova pedig: „Új munkalap”.
Sub Masolas() Dim sor As Long, usor As Long, ide As Long Sheets("Eredeti").Select ide = 3 usor = Sheets("Eredeti").Range("A" & Rows.Count).End(xlUp).Row For sor = 2 To usor If Cells(sor, "Q") > "" Then Sheets("Új munkalap").Cells(ide, "A") = Cells(sor, "G") Sheets("Új munkalap").Cells(ide, "B") = Cells(sor, "H") ide = ide + 1 End If Next End Sub
Ha nem a ReDim a lényeg, akkor egyszerűbben is megoldható 1 ciklusban.
Sub mmm() Dim i As Integer For i = 1 To Sheets.Count - 1 'utolsó lap a Másol nevű Sheets(i).Cells(1, 3).Copy Sheets("Másol").Cells(i + 1, 1) Sheets("Másol").Cells(i + 1, 2) = Sheets(i).Name Next i End Sub
nem próbáltam ki a ReDim-et. 🙂
Feltételezem, hogy csak 1 lapod van a füzetben, ezért nem indul sem a lapra lépés, sem a lap elhagyása esetén induló két makró.
Másold át a két makrót a VB szerkesztőben bal oldalon található ThisWorkbook laphoz (lapot kijelölöd, jobbra bemásolod). Az első makró első sorát (Private Sub Worksheet_Activate()) írd át Private Sub Workbook_Open() -re, a másodikét (Private Sub Worksheet_Deactivate()) pedig Private Sub Workbook_BeforeClose(Cancel As Boolean) -ra.
Az első a füzet megnyitásakor, a második pedig a bezáráskor indul automatikusan. Az eredeti, laphoz rendelt két makrót törölheted.
Csakis „átlagos felhasználók” ellen készült. 🙂
Szia!
Ezt makróval tudod megoldani. A lapfülön – ahol a tiltásokat be akarod vezetni – jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe. Bal oldalon ki van jelölve a lap, ahonnan kiindultál, jobb oldalon egy üres felületet látsz. Oda másold be a lenti makrót. Mikor a füzetben rálépsz a lapodra, indul a makró, és letiltja a kivágás, másolás, beillesztés és vonszolás lehetőségét.Private Sub Worksheet_Activate() Dim oCtrl As Office.CommandBarControl 'CTRL+C, CTRL+V és CTRL+X letiltása Application.OnKey "^c", "" Application.OnKey "^x", "" Application.OnKey "^v", "" 'Cut menü letiltása For Each oCtrl In Application.CommandBars.FindControls(ID:=21) oCtrl.Enabled = False Next oCtrl 'Copy menü letiltása For Each oCtrl In Application.CommandBars.FindControls(ID:=19) oCtrl.Enabled = False Next oCtrl 'Vonszolás letiltása Application.CellDragAndDrop = False End Sub
Érdemes a lap elhagyásához bevinni a fentiek engedélyezését.
Private Sub Worksheet_Deactivate() Dim oCtrl As Office.CommandBarControl 'CTRL+C, CTRL+V és CTRL+X engedélyezése Application.OnKey "^c" Application.OnKey "^x" Application.OnKey "^v" 'Cut menü engedélyezése For Each oCtrl In Application.CommandBars.FindControls(ID:=21) oCtrl.Enabled = True Next oCtrl 'Copy menü engedélyezése For Each oCtrl In Application.CommandBars.FindControls(ID:=19) oCtrl.Enabled = True Next oCtrl 'Vonszolás engedélyezése Application.CellDragAndDrop = True End Sub
A füzetet makróbarátként (xlsm kiterjesztéssel) kell mentened.
Nem a névkezelőben, hanem a szerkesztőléc bal oldalán adtam meg a nevet.
Attachments:
You must be logged in to view attached files.Rajzoltam 2 téglalapot, amiknek olyan formát adtam, amilyen a megjegyzés. Az elsőnek Megj1, a másiknak Megj2 nevet adtam.
A laphoz rendeltem egy makrót, ami magáért beszél.Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim a As Integer For a = 1 To ActiveSheet.Shapes.Count ActiveSheet.Shapes(a).Visible = False Next Select Case Target.Address Case "$A$1" Shapes("Megj1").Visible = True Case "$B$5" Shapes("Megj2").Visible = True End Select End Sub
Persze makróbarátként kell menteni a füzetet.
Jobb klikk a cellán, megjegyzés beszúrása.
Beállíthatod a karakter formátumát, majd szintén jobb klikkel a cellán megadhatod, hogy állandóan-, vagy csak az egérmutatónak a cella fölé vitelekor legyen látható a megjegyzés.
A megjegyzés dobozán jobb klikkre további beállítási lehetőségeket is kapsz a formátum beállításához, még képet is rendelhetsz hozzá.Vegyük azt az egyszerű esetet, hogy mind a 61 lapon az A oszlopban vannak a tételek, és az A1 cella oszlopcím.
A 61. lapon a B1:BI1 cellákba írd be a 60 lap nevét (Munka1; Munka2).Ezen a lapon a B2 cella képlete
=HAHIBA(HOL.VAN($A2;INDIREKT(B$1 & „!A:A”);0);”–”)
ezt másolhatod jobbra, és le. Az eredmény az egyes lapokon megtalálható tétel sorának a száma.Szívesen.
Végül mégis összejött.A lapodon azoknak a celláknak a zárolását is fel kell oldanod a lapvédelem előtt, amikbe engedélyezni akarod a bevitelt. Ezek (most) a P:S tartomány, teljes oszlopok. Ha máshol is szeretnél adatbevitelt, azokat a tartományokat se zárold.
Arra gondoltam, hogy a Q oszlopnál a lapvédelem beállítása előtt engedélyezni kell az oszlop kitöltését (Cellaformázás, Védelem fül, Zárolás négyzet elől kivesszük a pipát). Ezután a laphoz rendelt makró elvégzi a kitöltött Q zárolását.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 17 And Target <> "" Then 'Engedélyezi a lapon a módosítást a MAKRÓ SZÁMÁRA ActiveSheet.Protect Password:="SzupertitkosJelszo", UserInterfaceOnly:=True Range(Target.Address).Locked = True End If End Sub
Laphoz rendelt, eseményvezérelt makró.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 14 Then 'N oszlop Application.EnableEvents = False If Target = "A" Or Target = "B" Then Cells(Target.Row, "M") = Target & "-" & _ Left("000" & Application.WorksheetFunction.CountA(Columns(13), Target & "*"), 4) Application.EnableEvents = True End If End Sub
A laphoz rendelt a makrót.
Private Sub Worksheet_Change(ByVal Target As Range) Dim oszlop As String If Target.Column = 29 Then 'AC oszlop Select Case Target Case "Kezdés" oszlop = "AD" Case "Kész" oszlop = "AF" Case Else oszlop = "AE" End Select Application.EnableEvents = False Cells(Target.Row, oszlop) = Now Application.EnableEvents = True End If End Sub
A Select Case utasításban a különböző beírható értékekhez megadtam, melyik oszlop legyen az időpont bevitele.
Az értékadások után 1 lépésben másolhatsz.
Union(oszlop1, oszlop2, oszlop3, oszlop4, oszlop5, oszlop6).Copy Sheets("Állásidők_rögzítése").Range("B3")
A másolás helyét (másik lap B3 cella) megjegyzésbe tetted.
Nem próbáltam ki, de valószínűleg nem szereti a több tartomány együttes beillesztését.
Ebben az esetben Terület1.Copy MásikLap.Range(cellacím)Szia!
Tedd egy ciklusba.
For lap=10 to sheets.count with sheets(lap) set oszlop1 = .Range("D93:E102,L93:M102,T93:U102") ... end with next
Óriási a fájlod, apait-anyait pakolsz bele, ráadásul a makróid másik fájlban vannak.
Igazán jobban tennéd, ha a kész (ingyenes) alkalmazásokat használnád arra, amikre hozzáértők létrehozták.Előbb érdemes lenne az Excellel és a programozásával jó közepes szintre eljutnod, majd azután kellene foglalkoznod a csicsázással. Meglátod, ha már érted is, mit csinálsz, nem foglalkozol majd ilyen felesleges dolgokkal.
Attachments:
You must be logged in to view attached files.Tanulmányozd Horváth Imre csodás leírását a többszintű legördülőkről. http://excel-bazis.hu/tutorial/tobbszintu-legordulo-lista-profi-megoldas
A megfelelő, zenét tartalmazó oszlop kiválasztása után makróval megszámoltatod, hány számot (sort) tartalmaz. Ennek megfelelően beíratod a hiperhivatkozások képleteit oda, ahova akarod, majd indítod a lejátszó ciklust.Én is hallgatok zenét munka közben, de nem Excellel, hanem a jó öreg Winamp segítségével, amit erre fejlesztettek.
Tedd az 5 fájlt hiperhivatkozásként az 5 cellába.
Sub Zene() Dim sor As Integer Application.DisplayAlerts = False For sor = 150 To 155 If Range("D" & sor) = "" Then Exit Sub Range("D" & sor).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True DoEvents Next Application.DisplayAlerts = True End Sub
Az E oszlopban szóközzel kezdődik a települések neve, a Q1-ben nem.
Ha nem akarod az E oszlop szóközeit előre leszedni, akkor a képleted
=HAHIBA(FKERES(TRIM(E1);Q:R;2;0);"Nincs ilyen település")
Egyszerűbb, ha a trimmelést egy segédoszlopban végrehajtod. =TRIM(E1), ezt lemásolod a többi sorod mellé, majd a teljes oszlopot másolod, és az E1 cellába irányítottan, értékként beilleszted. A segédoszlop törölhető.
Ha előre elkészítetted ezt, a képletben a TRIM(E1) helyén marad az E1.Szia Imi!
Nagyon köszönöm, holnap kipróbáljuk. „Csak” 1.000.000 sor lesz (talán), a témakör címét a csatolt link után adtam.
Igen, a két nyelv sorai megegyeznek – ha igaz.Üdv,
KatiEgyszerűsítettem a makrón. A tömbbe eredetileg fordítva tettem be az adatokat (sor, oszlop).
Sub TombosMasolas() Dim Tomb(), sor As Long, usor As Long, oszlop As Integer, uoszlop As Integer, tombsor As Integer usor = Cells.SpecialCells(xlLastCell).Row uoszlop = Cells.SpecialCells(xlLastCell).Column ReDim Tomb(usor, uoszlop) tombsor = 0 For sor = 2 To usor If Cells(sor, 2) = 4 Then tombsor = tombsor + 1 For oszlop = 1 To uoszlop Tomb(oszlop, tombsor) = Cells(sor, oszlop) Next End If Next Sheets(2).Range("A1" & ":M" & uoszlop) = Application.Transpose(Tomb) End Sub
Szívesen. 🙂
Gondolom, a bevitt adatokat fel is akarod vinni a füzetbe, amit egy gombhoz rendelt makró visz véghez. Ezt a makrót kell az általad írt sorral kezdeni. Ha üres a textbox, a figyelmeztetés után ki is kell léptetni a Sub-ból, hogy ne rögzítse a hiányos adatokat.
If doboz="" Then Msgbox "Nem lehet üres a dobozszám" Exit Sub End If
Lépj a VB szerkesztőbe (Alt+F11), és ott a Module1-ben megtalálod a TombosMasolas makrót, azt kell elindítani.
A füzetből az Alt+F8 előhozza a füzetben lévő makrók nevét, így is indíthatod anélkül, hogy a VB szerkesztőbe lépnél.
Láthatod, hogy a füzet xlsm kiterjesztésű, ami makróbarát.Szívesen.
Azért remélem, jön egy szebb megoldás is.Szia Péter!
Tettem fel egy fájlt, ami több oszlopot is tartalmaz.
Biztosan van elegánsabb megoldás, én ezt tudtam összehozni.
Az első lap „megszűrt” adatait a második lapra gyűjti ki.Üdv,
KatiAttachments:
You must be logged in to view attached files.Szívesen.
A szövegfüggvényeket nézd meg a súgóban.A csatolt képen a B2 cella képletét látod a szerkesztőlécen.
Attachments:
You must be logged in to view attached files.A második kérdésedről Horvát Imi már biztosan írt régebben, majd segít megtalálni a cikket. Szerintem abból jobban megérted majd, mintha én próbálkoznék vele.
Az elsőhöz írtam egy rövid makrót, amit a lapodhoz kell rendelned. Lapfülön jobb klikk, Kód megjelenítése. Ezzel bejutsz a VB szerkesztőbe. Bal oldalon az aktuális lapod lesz kijelölve, a jobb oldali üres területre másold a makrót.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then Application.EnableEvents = False If Target = "Kész" Then Cells(Target.Row, "D") = Now Else Cells(Target.Row, "C") = Now Application.EnableEvents = True End If End Sub
Még annyit, hogy a B1, a C1 nem oszlopok, hanem cellák címei. Az oszlop B, vagy C.
Szia!
Kicsit zavarosan írtad le az óhajodat, mert az A12-be szeretnéd beíratni az időpontot, mikor az A1:A17 tartomány ki van töltve. A tartományban benne van az a cella, ahol az utolsó bevitel idejét szeretnéd látni.
A laphoz rendelt makró az A1:A17 kitöltését figyeli, és az utolsó adat bevitelekor a B2 cellába írja be az időpontot. A CountA a DARAB2 függvény angol megfelelője.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [A1:A17]) Is Nothing And _ Application.WorksheetFunction.CountA(Range("A1:A17")) = 17 Then Range("B2") = Now End If End Sub
Kedved és igényed szerint módosíthatod a figyelt terület, és az időpont helyének meghatározását.
- A hozzászólás módosításra került: 5 years, 5 months telt el-delila.
Az alsó sort a B oszlopban kerested, de a dátumok a makró szerint a C-ben vannak. Lehet, hogy ezért nem kapsz eredményt.
Kicsit módosítva (C-re)
Sub popupuzenet() Dim sorszam As Integer Dim a As Integer Dim uzi As String With Worksheets("Munka1") sorszam = .Range("C" & Rows.Count).End(xlUp).Row For a = 5 To sorszam If .Range("C" & a) < Date + 7 Then uzi = uzi & .Range("C" & a) & vbLf End If Next a End With MsgBox uzi, , "Lejárt számlák" End Sub
Szia!
Csupán annyit kell változtatnod a kódon, hogy Target.Column-ként annak az oszlopnak a számát adod meg, amelyiknek az értékváltozását követi a képleted eredménye.
Pl. ha a B2 képlete =A2*6, akkor az A oszlop módosulását kell figyelned, vagyis a Target.column = 1, mert az első oszlopba írsz be értéket.
Szia!
Ha a kiinduló A2 cella fix, akkor
Sub keplet() Dim lRow As Integer Sheets("Munka1").Select lRow = Cells(Rows.Count, 1).End(xlUp).Row Cells(lRow + 1, 1) = "=SUMPRODUCT(1/COUNTIF(R2C1:R" & lRow & "C1,R2C1:R" & lRow & "C1))" End Sub
2018-09-26-09:01 Hozzászólás: [Resolved] Excel adatlapokból adatok egyesítése egy cél-excel-dokumentumban #5137Szia Krisztina!
Csatolok egy fájlt, ami a formátumot is másolja az Osszesito füzetbe. Az utvonal változóba add meg a saját útvonaladat.
Ebben a makróban nincs hibakezelés arra az esetre, ha valamelyik megnyitott füzetben nem létezik OOM nevű lap!Üdv,
Kati- A hozzászólás módosításra került: 5 years, 7 months telt el-delila. Indok: Lemaradt a csatolás
Attachments:
You must be logged in to view attached files.Egyszerűbben is megoldhatod. Csak egy címke legyen, Label1. Ennek a magassága (Height) 3, szélessége (Width) nulla.
Private Sub UserForm_Activate() For i = 2 To 100 Step 2 For j = 1 To 1000000: Next DoEvents UserForm1.Caption = i & "% komplett" Label1.Width = i * 2 Next End Sub
Feltételezem, hogy a formon a zöld csík (Label2) szélességét akarod növelni, és ebbe akarod beíratni az adatok betöltésének pillanatnyi értékét.
A Label1 és Label2 Left tulajdonságát (bal szélét) azonosra állítottam, a Label2 kiinduló szélessége (width) nulla.
Lassítani, gyorsítani a Label2 szélességét a For j=1 To … érték módosításával tudod. Nagyobb értéknél lassúbb lesz a folyamat.Attachments:
You must be logged in to view attached files.Egy példa:
Sub StatuszSor() Dim sor As Integer For sor = 1 To 25 Application.StatusBar = sor & ". sor összege: " & Cells(sor, 1) + Cells(sor, 2) Application.Wait Now + TimeValue("00:00:01") Next Application.StatusBar = False End Sub
A For i Next i ciklust lezártad, de a For j-t nem.
Egy példa:
Sub StatuszSor() Dim sor As Integer For sor = 1 To 25 Application.StatusBar = sor & ". sor összege: " & Cells(sor, 1) + Cells(sor, 2) Application.Wait Now + TimeValue("00:00:01") Next Application.StatusBar = False End Sub
A For i Next i ciklust lezártad, de a For j-t nem.
Szia!
Próbáld így:
Sub pttro_1() Dim ciklus As Integer, usor As Long, ciklusszam As Integer ciklusszam = Range("I1") For ciklus = 1 To ciklusszam usor = Cells(ActiveCell.Row, ActiveCell.Column).End(xlDown).Row Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(usor, ActiveCell.Column)).Copy _ Cells(usor + 1, ActiveCell.Column) Cells(usor + 1, ActiveCell.Column).Activate Next Application.CutCopyMode = False End Sub
Itt az I1 cella tartalmazza az ismétlések számát. Ha ebbe a cellába beírt érték 3, akkor 3-szor fut le a ciklus, vagyis az eredetivel együtt összesen 4-szer szerepelnek majd egymás alatt az adataid.
Ha csak a megadott számban szeretnéd látni az adatokat, a
ciklusszam = Range("I1")
helyett írj
ciklusszam = Range("I1")-1
-et.Üdv,
KatiÖrülök, hogy összejött, szívesen.
Szia Feri!
A Module2-be írtam egy makrót, benne némi magyarázattal.
Üdv, Kati
Attachments:
You must be logged in to view attached files.A1-> 5500, B1->2990, C1->=100-B1*100/A1
Én vagyok a hibás, tényleg rosszul írtam. Helyesen =B2*100/B1
Eszerint a 602 átnézett kép tartalmazza a 141 problémásat is. Akkor az 1 órája írt két képlet közül az elsőt kell alkalmaznod.
%=érték*100/összeg
érték=141, összeg=602+141 –> 18,97712Ellenőrzés: (602+141)*18,97712%
Számológépen: 602 plusz_gomb 141 =_gomb *_gomb 18,97712 %_gombHa az átnézett képek száma tartalmazza a problémásakat is, akkor a képlet
=B2*100/B2, ha nem (ebben az esetben az összes kép száma 743), akkor a =B2*100/(B1+B2) képlet adja meg a százalék értéket.2018-05-22-09:36 Hozzászólás: [Resolved] Beosztásban szereplő műszakok átmásolása a jelenlétibe Időszak és Név alapján #4839Szia!
A másik fórumon, ahol feltetted ugyanezt a témát, válaszoltam.Az R8 cella eredménye nem tetszik? Oda nem DARAB2, hanem DARABTELI függvény kell.
=DARABTELI(M:M;”x”)Szívesen. 🙂
Jó, hogy kitetted a képet. Az utvonal változó megadásánál hiányzik a szöveg végéről a backflash jel.
Kiteszel a lapodra egy alakzatot (négyszög, kör, miegyéb). Elnevezed Udvozlet-nek. Ennek az alakzatnak a képpel történő feltöltését végzi a makró a pillanatnyi idő függvényében.
A képeket az utvonal változóban megadott mappában kell tárolnod.A rohanásban elfelejtettem csatolni a mintát, elnézést. Csomagold ki, és a ThisWorkbook laphoz rendelt makróban írd át az utvonal változó értékét a sajátodra.
A beszúrt alakzat neve Udvozlet.Attachments:
You must be logged in to view attached files.Most nem érek rá a magyarázatra, de biztosan rájössz.
A csatolt fájlodban NYÍTÓOLDAL névre hallgatott az első lapod. Lehet, hogy azóta javítottad a hosszú Í-t, azért fut hibára.
Szarvas hiba részemről! Úgy akartam egy cellára állni, hogy előtte nem aktiváltam a lapot.
Private Sub Workbook_Open() Dim WS As Worksheet, sor As Long, valasz Set WS = Sheets("AKCIÓK") valasz = MsgBox("Töröljem a lejárt érvényességű tételeket?", vbYesNo + vbQuestion, "Törlési kérdés") If valasz = vbNo Then GoTo Raall With WS sor = 5 Do While .Cells(sor, 1) <> "" If .Cells(sor, 2) < Date Then .Range("A" & sor & ":C" & sor).Delete Shift:=xlUp Else: sor = sor + 1 End If Loop sor = 5 Do While .Cells(sor, 5) <> "" If .Cells(sor, 6) < Date Then .Range("E" & sor & ":G" & sor).Delete Shift:=xlUp Else: sor = sor + 1 End If Loop End With Raall: Sheets("NYÍTÓOLDAL").Select Range("H5").Select End Sub
Visszaküldöm a VÁZLATOS füzetet, némi módosítással.
Szerk.: El kellene menned Horváth Imihez egy VBA tanfolyamra. Míg nem látod átfogóan a lényeget, csak kapkodsz, és semmi nem marad meg. Hidd el, érdemes lenne.
- A hozzászólás módosításra került: 6 years telt el-delila. Indok: Kéretlen tanács
Attachments:
You must be logged in to view attached files.Makró nélkül is megoldhatod. Kijelölöd a diagramon a teljes kört, majd az egyik cikket. Jobb klikk, Adatpont formázása, a Kitöltés menüpontnál beállítod a színt.
Szia!
Azt hiszem, arra gondoltál, amivel kiegészítettem a füzetedet. A „2” laphoz rendeltem egy eseményvezérelt makrót, ami a B:O tartományba beírt adatokat figyeli. Ha ez x, vagy X, akkor az „1” lap A oszlopában az első üres sorba beírja a „2” lap aktuális oszlopának a címét.
A makró miatt makróbarátként kellett menteni a füzetet.
Üdv,
KatiAttachments:
You must be logged in to view attached files.Igazad van, ez a kézenfekvő megoldás nem jutott eszembe.
A feltétel (If .Cells(5, 2) > „” Then) sem kell, elég ez:
.Range("CH3:CO4").Copy .Range("B7:I28").PasteSpecial xlPasteFormats Application.CutCopyMode = False
Figyeld meg, hogy a másolandó formátumba a CH4:CO4 tartományt is be kell venni, hogy az alacsony sorok fekete háttere is másolódjon.
Itt az újabb makró:
Private Sub Workbook_Open() Dim sor As Long, usor As Long sor = 5 With Sheets("Munka1") 'ide a saját lapod nevét írd a Munka1 helyett 'lejárt időpontok adatainak törlése Do While .Cells(sor, 2) <> "" If .Cells(sor, 2) < Date Then .Range("B" & sor & ":I" & sor + 1).Delete Shift:=xlUp Else sor = sor + 2 End If Loop 'formátum másolása If .Cells(5, 2) > "" Then .Range("B5:I6").Copy .Range("B7:I49").PasteSpecial xlPasteFormats Application.CutCopyMode = False End If End With End Sub
Szia!
A leírásodból nem derült ki, hogy melyik oszlopok adatait akarod töröltetni. Úgy gondolom, hogy a B:I tartományban lévőket.
Célszerű a füzet megnyitásakor eltüntetni a lejárt idejű bejegyzéseket, ezért az Open eseménybe érdemes betenni, a ThisWorkbook laphoz kell rendelni a makrót.Private Sub Workbook_Open() Dim sor As Long, usor As Long sor = 5 Do While Cells(sor, 2) <> "" If Cells(sor, 2) < Date Then Range("B" & sor & ":I" & sor + 1).Delete Shift:=xlUp Else sor = sor + 2 End If Loop End Sub
A Do-Loop ciklussal megyünk végig a B oszlop dátumain, az 5. sortól kezdve.
A Shift:=xlUp határozza meg a törlés irányát. Ha volt törlés, az alatta lévő adatok a törölt sor helyére ugranak fel, nem változtatjuk a sor változó értékét, ha nem volt, növeljük a sor értékét kettővel.
A ciklus addig fut, míg a B oszlopban talál adatot.Szívesen. 🙂
A dicséret Krizsák Lászlót illeti.Krizsák László készített 5 éve egy vezérlő nélküli naptár userformot, amit egy fórumon közkinccsé tett.
Csatolom a füzetet, amiből átmásolhatjátok a saját fájljaitokba a Naptar userformot, a cmdClass modult, és a Munka1 laphoz rendelt eseményvezérelt makrót. Az én részem csupán a szombatok és vasárnapok színezése.
Attachments:
You must be logged in to view attached files.2 DataPicker kell a 2 oszlophoz (kezdés és befejezés). Mivel a dátumon kívül időpont is szükséges, azt a laphoz rendelt eseményvezérelt makróval lehetne megoldani.
2018-03-27-13:43 Hozzászólás: Excelre hivatkozó Word körlevél abszolút hivatkozásának relatívvá tétele #4577Meg kell nézni, van-e x nevű lap az osszes.xlsx-ben. Ha nics, létre kell hozni a Sheets.Add utasítással.
`On Error Resume Next
Set a = Sheets(„x”)
If Err.Number <> 0 Then
MsgBox „Nincs ilyen”
End If
On Error Goto 02018-03-27-12:50 Hozzászólás: Excelre hivatkozó Word körlevél abszolút hivatkozásának relatívvá tétele #4575Pedig megírtam, hogy az osszes.xlsx lapjairól csak azokat a sorokat törölje, amelyik füzetnek amelyik lapján lévő adatokat másolod éppen be.
A hibaüzenet fölött ki kell lépned a makróból : Exit Sub
2018-03-27-07:19 Hozzászólás: Excelre hivatkozó Word körlevél abszolút hivatkozásának relatívvá tétele #4571Szia!
Ezzel az a baj, hogy a gyűjtő füzet lapjain mindig csak az utoljára bemásolt füzet adatai lesznek meg. A meglévő adatokat a
WSO.Range("A2:BA100000").Delete
sor törli.
Másoláskor be kellene vinni egy üres oszlopba annak a fájlnak a nevét, ahonnan másolsz, és az új másolás előtt csak ezeket a sorokat kellene törölni. A tartományt megkeresheted a Match függvénnyel.2018-03-26-16:29 Hozzászólás: Excelre hivatkozó Word körlevél abszolút hivatkozásának relatívvá tétele #4569Egy másik módszer az adott könyvtárban lévő Excel fájlok tartalmának az összemásolására:
Sub Osszemasolas() Dim utvonal As String, FN, lap As Integer, WSO As Worksheet, usor As Long Set WSO = ActiveWorkbook.Sheets("Munka1") 'Aktív füzet Munka1 lapja, ide gyűjtjük az adatokat utvonal = "D:\Mappa\" 'Útvonal, ahonnan megnyitjuk másolásra a füzeteket FN = Dir(utvonal & "*.xls*") Do While FN <> "" Workbooks.Open utvonal & FN 'A mappában lévő fájlok megnyitása 'Végig megyünk a megnyitott fájl lapjain For lap = 1 To Sheets.Count usor = WSO.Range("A" & Rows.Count).End(xlUp).Row + 1 'A gyűjtő lap első üres sora 'Másoljuk és beillesztjük a lapokon lévő adatokat, címsor nélkül (offset) 'Ha feltehetően vannak üres sorok is, a CurrentRegion helyett mást kell használnunk. Sheets(lap).Range("A1").CurrentRegion.Offset(1).Copy WSO.Range("A" & usor) Next ActiveWindow.Close False 'A megnyitott fájl mentés nélküli bezárása FN = Dir() Loop End Sub
Most sajnálom, hogy nincs szükségem kéményre, de neked intézek némi engedményt a képbeszúrós linkért. 🙂
Nagyon klassz, köszönöm!
Jelenleg még csak 3 logó képét kell ide-oda beillesztenem. A csatolt képen a bal oldali választásoktól függően összesen 12 ajánlat jelenhet meg a jobb oldalon. Ezekhez kellett beillesztenem a megfelelő logókat. Újabb cégek gyártmányainál csak felteszem a formra az új logókat.
Attachments:
You must be logged in to view attached files.Szívesen 🙂
Próbáld meg a kép szerint.
Attachments:
You must be logged in to view attached files.2018-03-07-12:48 Hozzászólás: [Resolved] TARC táblázat automatikus kitöltése a megfelelő cellában #4516Örülök, hogy sikerült, és különösen annak, hogy önállóan javítottad a hibát!
-
SzerzőBejegyzés