Hozzászólások
-
SzerzőBejegyzés
-
2019-12-17-14:11 Hozzászólás: [Resolved] Értékek másolása fix cellából de a beillesztés mindig új sorba #6562
Pardon, csak becsomagolva lehet csatolni a makrós füzetet.
Attachments:
You must be logged in to view attached files.2019-12-17-14:10 Hozzászólás: [Resolved] Értékek másolása fix cellából de a beillesztés mindig új sorba #6561Csatolom az én füzetemet.
2019-12-17-12:20 Hozzászólás: [Resolved] Értékek másolása fix cellából de a beillesztés mindig új sorba #6559Szia!
A lapon, ahova beviszed az értékeket, az A:D oszlop ne legyen zárolt. Védd le a lapot. Nálam a „SzuperTitkosJelszó”-védi a lapot.
Másold be a makrót egy modulba, majd tegyél ki hozzá egy gombot. Az aktuális sor A:D tartományát másolja a Munka2 lap első üres sorába. Ha van, ha nincs fejléc a Munka2-n, az első másolat a 2. sorba kerül (üres lap esetén).
Másolás után a kiinduló munkalap kitöltött sora nem írható felül, zároltak lesznek a cellák.Sub Masolas() Dim ide As Long ActiveSheet.Protect Password:="SzuperTitkosJelszó", UserInterfaceOnly:=True ide = Sheets("Munka2").Range("A" & Rows.Count).End(xlUp).Row + 1 Range("A" & Selection.Row & ":D" & Selection.Row).Copy _ Sheets("Munka2").Range("A" & ide) Range("A" & Selection.Row & ":D" & Selection.Row).Locked = True End Sub
Én makróra gondoltam.
Sub cimkek() Dim doboz As Integer, db As Integer, sor As Integer sor = 1 For doboz = 1 To 800 For db = 1 To 8 Cells(sor, 1) = "AB-" & Right("000" & doboz, 3) & "/" & Right("00" & db, 2) sor = sor + 1 Next Next End Sub
Szívesen. 🙂
Azt hiszem, félreértetted. A Nyomtatni lap tartalmát konvertálja, magát az Excel fájlt nem.
Erre gondoltál?
Előbb írtam, mint gondolkoztam. Mégis szükség van a feltételnél is a HAHIBA függvényre, mint a próbánál kiderült nem létező dátum és időpont kiválasztásánál.
Szánom-bánom. 🙁Kicsit rövidebbre vettem a Munka2!A4 cella képletét, ami alapján a többit is módosíthatod. A feltételnél nincs szükség a HAHIBA függvényre.
=HA(INDEX(Táblázat1;HOL.VAN($H$1;Munka1!$L:$L;0)-1;OSZLOP()+2)=0;"";HAHIBA(INDEX(Táblázat1;HOL.VAN($H$1;Munka1!$L:$L;0)-1;OSZLOP()+2);""))
Szia Dani!
Csatolom zip-ben a makrós fájt. Kibontás után a Nyomtatni oldalon formázd meg a két első sort kedved szerint, utána a Munka1 lapon indíthatod a makrót.
Jelenleg abba a mappába menti a pdf-et, ahonnan megnyitottad a füzetet. Ezen módosíthatsz, ha indítás előtt az
utvonal = ActiveWorkbook.Path
sorban átírod az útvonalat.Attachments:
You must be logged in to view attached files.Az ÜRES függvényt Te juttattad eszembe.
Elég kacifántosra sikerült, hátha kapsz egyszerűbb megoldást. Az ilyen tengerikígyó képlettel az a baj, hogy egy újabb igény esetén nehéz követni.
Sok szerencsét hozzá!Több változat készült, és közben az idő is szépen telt.
Fel kellene tenned a jelenlegi változatot, hogy kiderüljön, hol állsz most.Szia!
A Munka1 laphoz rendeltem egy eseményvezérelt makrót. Mikor a H oszlopba beírod a dátumot, a TTC lap első üres sorába átmásolja a teljes sort.
Az új lapról töröld a próba sorokat, de a címsor maradjon meg.Attachments:
You must be logged in to view attached files.Egy üres oszlopban végig viszed a lenti képletet, majd ezt összegzed a SZUM függvénnyel.
=HA(HÉT.NAPJA(A6;2)<5;9;HA(HÉT.NAPJA(A6;2)=5;6;0))Horváth Imi írta, hogy tömörítve, zip-ként fel lehet tenni a makrót tartalmazó fájlt, kipróbálom.
Az új képletek csak a lapra érvényesek, a makróhoz semmi közük. Csak példa arra, hogy minden feladatra több megoldás létezik.
Próbáltam az utvonal változóban megadott helyen megnyitni a mappa választót, de nem jött össze, hátha valaki…Set FD = Application.FileDialog(4) utvonal = "F:\Otthoni\macros\Checklista\" ChDir utvonal With FD ...
Attachments:
You must be logged in to view attached files.Nálam a makrót tartalmazó fájl az F:\Otthoni\macros mappában van. A makró indításakor az a mappa nyílik meg, amit az Excel beállításakor a Mentés menüpontban a Helyi fájlok alapértelmezett helye rovatban megadtam. Az adataimat, fájljaimat soha nem mentem a C meghajtóra. A Te feladatodhoz F:\Otthoni\macros\Checklista fát készítettem, ezen belül vannak az évek – jelenleg csak egy, 2019.
Megnyílik a FileDialog, kiválasztom a megfelelőt, ezzel el is mentettem.Sub Pdf_mentes() Dim utvonal As String, FD, FN As String Sheets("Munka2").Select Set FD = Application.FileDialog(4) 'mappa választás With FD .AllowMultiSelect = False .Show If .SelectedItems.Count = 0 Then MsgBox "Nem választottál útvonalat, befejezzük.", vbInformation, "Értesítés" Exit Sub Else utvonal = .SelectedItems(1) & "\" End If End With FN = "Csekklista " & Format(Range("L1"), "yyyy.mm.dd hh_mm") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=utvonal & FN, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End Sub
Ördög vigye a más macskáját! Nem lehet makrót tartalmazó fájlt csatolni.
Lementem xlsx-ként, és bemásolom ide a modulba írt makrót.Sub Pdf_mentes() Dim utvonal As String, FD, FN As String Sheets("Munka2").Select Set FD = Application.FileDialog(4) 'mappa választás With FD .AllowMultiSelect = False .Show If .SelectedItems.Count = 0 Then MsgBox "Nem választottál útvonalat, befejezzük.", vbInformation, "Értesítés" Exit Sub Else utvonal = .SelectedItems(1) End If End With utvonal = utvonal & "\" FN = "Csekklista " & Format(Range("L1"), "yyyy.mm.dd hh_mm") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=utvonal & FN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End Sub
Attachments:
You must be logged in to view attached files.A kettőspontot nem lehet a fájlnévbe írni, marad az alsó kötőjel.
Csatolom az újabb verziót.Az első, dátumot tartalmazó cella az A2. Ide írod a kezdő dátumot. Az A3 képlete
=HA(MARADÉK(SOR()+2;4)=0;A2+1;A2)
Ezt már másolhatod.A pdf-es makróban a
Format(Date, "yyyy_mm_dd") & ".pdf"
-t írd át így
Format(Now, "yyyy_mm_dd hh-mm") & ".pdf"
mert itt az időpont is kell, ha több mentést készítesz naponta.
Ehhez a makróhoz tehetsz ki egy gombot.Sub Mentes() Dim utvonal As String utvonal = ActiveWorkbook.Path & "\" Sheets("checklist").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ utvonal & "termek_meres " & Format(Now, "yyyy_mm_dd hh_mm") & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End Sub
Nagyon jó, hogy foglalkoztál vele, mert amiket a kutatásod közben megtanultál, az fixen megmarad az emlékezetedben.
Két képlethez újabb magyarázatot írtam, remélem, érthetően.Attachments:
You must be logged in to view attached files.Csatolom az új füzetet, benne a hozzá tartozó mesével.
Attachments:
You must be logged in to view attached files.Jó reggelt!
Azt írtam, hogy mikor egy új sor utolsó adatát – a C mérést – beviszed, akkor végzi el a makró a feladatot.
Átalakítottam a füzetet makrók nélkülire. Ezzel csak az a baj, hogy nem végzi el a pdf-be mentést, de legalább tudom csatolni.Attachments:
You must be logged in to view attached files.Szia!
2 makrót írtam a füzetedbe. Az első az adatok laphoz van rendelve, ami meghívja a másikat (Masolas nevűt), ami egy modulban van.
A laphoz rendelt eseményvezérelt makró azt teszi, hogy mikor egy új sor utolsó adatát – a C mérést – beviszed, átadja az aktuális sor számát a Masolas-nak. Ez beírja a B oszlop dátumát, és a 3 mérési eredményt a megfelelő helyekre, majd menti a lapot termek_meres aktuális-dátum.pdf néven abba a mappába, ahonnan megnyitottad a füzetet. Adhatsz más útvonalat a modulban lévő makró utvonal= … sorban. Az útvonal végződjön „\”-re.
Mivel minden dátumhoz külön sor tartozik, folyamatosan vezetheted a méréseket ebbe a füzetbe akárhány sorban, nem kell választani 3 sor közül.Sajnos itt nem lehet makrót tartalmazó, xlsm kiterjesztésű fájlt csatolni, ezért beírom a két makrót. Az elsőt rendeld az adatok laphoz. Lapfülön jobb klikk, Kód megjelenítése. Ezzel bejutsz a VB szerkesztőbe. A jobb oldalon lévő nagy üres területre másold.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 5 And Target.Row > 2 Then Masolas Target.Row End If End Sub
A másodikhoz modult kell beszúrnod. A VB szerkesztőben Insert menü, Module. Kapsz egy Module1 nevű modult, amit bal oldalon látsz, jobb oldalon újabb üres felület lesz, ide kell másolnod az újabb makrót.
Sub Masolas(sor) Dim utvonal As String utvonal = ActiveWorkbook.Path & "\" With Sheets("checklist") .Range("B2") = Cells(sor, 2) .Range("B3") = Cells(sor, 3) .Range("B4") = Cells(sor, 4) .Range("B5") = Cells(sor, 5) .ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ utvonal & "termek_meres " & Format(Date, "yyyy_mm_dd") & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End With End Sub
Sok sikert, üdv Kati
Hol maradt a csatolás?
Az adatok lap C2 cellájának a képlete
=HAHIBA(FKERES(A2;árak!A:B;2;0)*B2;"Nem szerepel az árak lapon")
Újabban a data.hu sem fogadja az xlsm kiterjesztésű fájlokat. Bemásolom ide a makróját.
Sub Nyomtatas() Dim uzlet, sor As Integer, db, kimeno As String, x As Integer, oszlop As Integer Dim hol, szam As Integer, ide As Integer Sheets("Nyomtatandó").Select sor = 2 Do While Sheets("Munka1").Cells(sor, "A") <> "" Range("A:C").ClearContents uzlet = Sheets("Munka1").Cells(sor, "A") hol = Application.Match(uzlet, Sheets("Munka2").Columns(1), 0) kimeno = Sheets("Munka2").Cells(hol, 2) If Sheets("Munka1").Cells(sor, "B") <> "" Then hol = Application.Match(uzlet, Sheets("Munka1").Columns(1), 0) db = Application.WorksheetFunction.RoundUp(Sheets("Munka1").Cells(hol, 2) / 3, 0) szam = 1: ide = 1 Do While szam <= db For oszlop = 1 To 3 Cells(ide, oszlop) = "Üzlet száma: " & uzlet & vbLf & "Kimenő sor: " & kimeno _ & vbLf & Format(Date, "yyyy.mm.dd") Next ide = ide + 1 szam = szam + 1 Loop Range("A1").CurrentRegion.Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If sor = sor + 1 Loop End Sub
-
A hozzászólás módosításra került: 5 years, 9 months telt el-
delila.
Nem volt nekem teljesen tiszta, mit is akarsz elérni. Úgy látom, címkéket szeretnél nyomtani, mindegyiket a Munka1 lap B oszlopában meghatározott darabszámmal.
Csatolok egy füzetet. A Nyomtatandó lapra tettem egy gombot, ami indítja a nyomtatást. Sorra veszi az üzleteket, összeállítja a címkéket, és kinyomtatja a megadott példányszámmal. Van ahol többet 1-2 darabbal, ami osztható maradék nélkül 3-mal. Pl. a 16 db helyett 18 címkéd lesz.
Ha csak 1-1 kiválasztott üzlethez nyomtatnál, nem az összeshez, akkor módosítom a makrót.Itt az automatikus javításhoz beírt szavakat lehet javíttatni. Pl. a hogz beírása után kijavítja hogy-ra.
Nem egészen ide tartozik, de érdemes rövidítéseket bevinni. Egy alkalommal sokszor kellett (volna) leírnom egy táblázatba a zöld/sárga vezeték kifejezést. A Módosítandó rovatba beírtam a zs-t (fontos, hogy ne legyen értelmes szó), a Jó szöveghez pedig a hosszú szöveget. Ebből kisebb galiba lett, mert a fájlt átadtam valakinek, és mint kiderült, vitte a kibővített szótárat magával. Mikor be akart írni rövidítve az egy nevet, Molnár Zsigmondot (Molnár Zs), Molnár zöld/sárga vezeték lett belőle. 🙂
Fájl | Beállítások | Nyelvi ellenőrzés.
Megoldás lehet a KEREKÍTÉS függvény.
=KEREKÍTÉS(SZUM(D2:D6462);0)
Ez könnyen megeshet. Szégyenlem, de nem figyeltem fel rá, milyen kicsi számról van szó. 🙁
Természetesen nem hasonlítottam össze a 644 cella adatait. Szűrtem a nem nulla, és nem 1,15961E-11 értékre, Kijelöltem a látható cellákat, mire a státuszsorban megjelent az összegük. Ez megegyezett a SZUM-os cella értékével.
Miért lenne nulla az összeg, mikor 644 sorban más érték van? Nézd meg a szűrő segítségével!
A szűrésből kihagyod a 0, és a SZUM értékét, összegezve a szűrt állományt látod, hogy megegyezik a képlettel.If Target.HasFormula = False Then ActiveCell.Value=ActiveCell.Value 'nem képlet
Szia!
Zárás előtt kijelölöd a tartományt, másolod, és saját magára értékként beilleszted.
Range("A1").CurrentRegion.Copy Range("A1").PasteSpecial xlPasteValues
Szia!
Másképp oldanám meg. A Névkezelőben új nevet vettem fel, a neve Képlet. A Hivatkozás rovatba írtam a képletet, ami az egyszerűség kedvéért egy szorzás. Ezt adtam meg a C1-ben állva. A C oszlopban =Képlet szerepel, ami összeszorozza az azonos sor A és B celláját. Nézd meg a H oszlopban állva a Névkezelő Képlet-ét, ott már az F és G cellákat szorozza össze, vagyis a tőle balra szereplő két oszlop tagjait.
Most a Névkezelőben írd át a szorzást pl. összegzésre, és csodálkozz rá az eredményre a csatolt fájlban.
Nem kell kijelölgetned és másolgatnod.Üd, Kati
-
A hozzászólás módosításra került: 5 years, 10 months telt el-
delila.
Attachments:
You must be logged in to view attached files.Nem sikerült a csatolás, de a DARABTELI függvény lesz jó ehhez a feladathoz, nézd meg a súgóban.
Keress rá ilyesmire: eseménykezelés, excel, vba. Jobban jársz, mintha én próbálnám elmagyarázni.
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: 5 years, 11 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: 6 years, 3 months 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: 6 years, 8 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: 6 years, 9 months telt el-
delila. Indok: Lemaradt a csatolás
Attachments:
You must be logged in to view attached files. -
A hozzászólás módosításra került: 5 years, 9 months telt el-
-
SzerzőBejegyzés