-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Delila_1
veterán
válasz
szőröscica
#28660
üzenetére
Nem kell külön beolvastatni a fájlneveket, majd másolni, végül törölni a felesleges sorokat. Az alábbi makró mindegyik műveletet elvégzi.
Két dolgot kell átírnod benne, az útvonalat, ahonnan a fájlokat behívod, és a kiterjesztést, ha 2007-es verziónál régebbi Excelt használsz.
Sub Osszemasolas()
Dim FN As String, utvonal As String, WS As Worksheet
Dim hova As Long, tabla As Range, CV As Object
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set WS = ActiveWorkbook.ActiveSheet
utvonal = "F:\Eadat\Tmp\" 'fájlok útvonala, írd át
FN = Dir(utvonal & "*.xlsx") '2007-es előtti verziónál xls-re írd át
Do While FN <> ""
hova = Application.WorksheetFunction.CountA(Columns(1)) + 1
Workbooks.Open utvonal & FN
Sheets("Data").Select
Range("A1").Select
Set tabla = Cells.CurrentRegion
tabla.Offset(1, 0).Resize(tabla.Rows.Count - 1, tabla.Columns.Count).Copy
WS.Cells(hova, "A").PasteSpecial Paste:=xlPasteAll
Windows(FN).Close False 'Zárja a megnyitott fájlt mentés nélkül
For Each CV In Selection
If CV = "q" Or CV = "r" Then Rows(CV.Row).Delete
Next
FN = Dir()
Loop
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Kész", vbInformation
End Sub -
Delila_1
veterán
válasz
coldfirexx
#28629
üzenetére
A lenti makró a lapon lévő diagramok címéből eltünteti a "0%" szövegrészt.
Sub NullaNyet()
Dim CV As Integer, szoveg As String
For CV = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(CV).Activate
szoveg = ActiveChart.ChartTitle.Characters.Text
szoveg = Application.WorksheetFunction.Substitute(szoveg, "0%", "")
ActiveChart.ChartTitle.Characters.Text = szoveg
Next
End Sub -
Delila_1
veterán
válasz
boomkat88
#28624
üzenetére
Sub Dupla()
Dim sor As Long, usor As Long
Application.ScreenUpdating = False
usor = Range("A1").End(xlDown).Row
usor = usor * 2
For sor = 2 To usor Step 2
Cells(sor, "A").Select
Selection.EntireRow.Insert
Cells(sor, "A") = Cells(sor - 1, "A")
Next
Application.ScreenUpdating = True
End Sub -
-
Delila_1
veterán
válasz
elttiL
#28605
üzenetére
Hát, nem sok köszönet van benne.
Próbáld meg, hogy az un. volatilis függvények helyett mást alkalmazz. Pl. az INDIREKT kiváltható az INDEX(HOL.VAN) párossal.Néhány volatilis függvény itt van felsorolva.
-
Delila_1
veterán
válasz
dudu_14
#28596
üzenetére
A lapodhoz rendelt makróban kell megadnod a műveleteket.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$6" Then
'ide másold a saját makródat a Sub és End Sub sorok nélkül
End If
End SubA rejtés feloldásához nem szükséges ciklust betenned, gyorsabb és egyszerűbb megoldást alkalmazz:
If Target.Address = "$D$6" Then _
Rows("1:" & ActiveSheet.UsedRange.Rows.Count).Hidden = False -
Delila_1
veterán
válasz
karlkani
#28582
üzenetére
Elrejti a megjegyzést a
Range("I" & Target.Row).Comment.Text Text:=ertek & " Ft/liter"
sor után beszúrt
Range("I" & Target.Row).Comment.Visible = False
sor.
Tudtommal nincs olyan beállítás, ami eleve automatikus mérettel szúrja be a megjegyzést.Automatikus méretre állítás a D és I oszlopban:
Sub Auto_Meret()
Dim CV, kom, ter As Range
Set ter = Range("D:D, I:I")
For Each CV In ter
Set kom = Range(CV.Address).Comment
If Not kom Is Nothing Then 'ha van megjegyzés
Range(CV.Address).Comment.Shape.Select
Selection.AutoSize = True
End If
Next
End SubEzt a makrót mudulba kell másolni.
-
Delila_1
veterán
válasz
karlkani
#28580
üzenetére
Cseppenként adagolod a feladatot.
Az új makró előállítja a megjegyzést automatikus mérettel, a bevitel sorának az I oszlopában. Teszi ezt akkor, mikor a D, vagy I oszlopba viszel be értéket.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ertek As Double
If Target.Column = 4 Or Target.Column = 9 Then 'D vagy I oszlop
Range("I" & Target.Row).Select
With Range("I" & Target.Row)
On Error Resume Next
.AddComment
.Comment.Visible = True
.Comment.Shape.Select True
.Comment.Text Text:=ertek & " Ft/liter"
.Comment.Shape.Select
Selection.AutoSize = True
End With
If IsNumeric(Range("D" & Target.Row)) And _
IsNumeric(Range("I" & Target.Row)) Then
On Error Resume Next
ertek = Round(Range("D" & Target.Row) / Range("I" & Target.Row), 1)
Range("I" & Target.Row).Comment.Text Text:=ertek & " Ft/liter"
End If
Else: Range("I5").Comment.Text Text:="0 Ft/liter"
End If
Range(Target.Address).Select
End SubMár csak azt nem tudom, hogy a D/I érték, vagy az I/D kell a megjegyzésbe. Az
ertek = Round(Range("D" & Target.Row) / Range("I" & Target.Row), 1)
sor a D/I-vel számol. Ha ez nem jó, írd át így:
ertek = Round(Range("I" & Target.Row) / Range("D" & Target.Row), 1)
Szöveges bevitt adat esetén a megjegyzés szövege 0 Ft/liter lesz.
-
Delila_1
veterán
válasz
karlkani
#28578
üzenetére
Szivi!
Kezdd azzal, hogy az I5 cellához rendelsz egy megjegyzést. A keretén bal klikk, ekkor a keret az előző sraffozottról átalakul sűrű pontozottá. Ezen jobb klikk, Megjegyzés formázása. Az Igazítás fülön jelöld be az Automatikus méret négyzetet.
A makró
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$5" Then
If IsNumeric(Range("I5")) And IsNumeric(Range("D5")) Then
Range("I5").Comment.Text Text:="Az I5 és D5 cella hányadosa: " _
& Range("I5") / Range("D5") & ""
Else: Range("I5").Comment.Text Text:="0"
End If
End If
End SubSzöveg nélkül a
Range("I5").Comment.Text Text:="Az I5 és D5 cella hányadosa: " _
& Range("I5") / Range("D5") & ""sor
Range("I5").Comment.Text Text:=Range("I5") / Range("D5") & "" -
Delila_1
veterán
válasz
karlkani
#28574
üzenetére
A lapodhoz kell rendelned a makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$10" Or Target.Address = "$F$5" Then
If IsNumeric(Range("B10")) And IsNumeric(Range("F5")) Then
Range("C3").Comment.Text Text:="A B10 és F5 cella hányadosa: " _
& Range("B10") / Range("F5") & ""
Else: Range("C3").Comment.Text Text:="0"
End If
End If
End SubA példában a C3 cella megjegyzésében jelenik meg a B10 és F5 cella hányadosa. Könnyen átírhatod a saját celláidra.
Szerk.: érdemes a megjegyzést automatikus méretűre állítani.
-
Delila_1
veterán
válasz
the radish
#28560
üzenetére
Szívesen (a szerintem semmit).
-
Delila_1
veterán
válasz
the radish
#28558
üzenetére
Sajnálom, csak a füzetek felépítése, és a teljes feladat ismeretében mondhatnék esetleg valamit.

-
Delila_1
veterán
válasz
the radish
#28555
üzenetére
Valószínű, hogy meg lehet oldani, de így vakon kaparászva nem tudok segíteni.
-
Delila_1
veterán
válasz
the radish
#28551
üzenetére
Az Else ágba írtam be két sort, és akkor nincs szükség a külön makróra.
Else
ig = Application.Match(sorszam, Columns(1), 1)
Rows(tol & ":" & ig).copy WSM.Range("A2")
Range("A:E").copy WSM.Sheets("Munka2").Range("A1") '1
WSI.Activate '2
' Masolas 'Itt indul a saját makród ****** megjegyzésbe tettem
sorszam = sorszam + 1 'növeljük a keresendő értéket
End IfHiába írtam át a makród nevét, még mindig van valami disznóság, másképp a VBE átírta volna a copy-t Copyra.
-
Delila_1
veterán
válasz
the radish
#28548
üzenetére
Most hirtelen azt látom nagy hibának, hogy a makród neve egy VBA-s kulcsszó, copy.
Nézd meg, hogy pl. az első makró Else ágában, aRows(tol & ":" & ig).copy WSM.Range("A2")
sorban a Copy utasítást nem is váltotta át nagy kezdőbetűre, mert a copy című makródként értelmezi.
-
Delila_1
veterán
válasz
the radish
#28543
üzenetére
A saját makród végén állj vissza oda, ahol a makró előtt voltál.
-
Delila_1
veterán
válasz
the radish
#28540
üzenetére
Nézd meg, nincsenek-e véletlenül azonos nevű változók a két makróban. Nem lehetnek, mert akkor a meghívott makró változói felülírják az indító makró változóinak az értékét.
-
Delila_1
veterán
válasz
BenJoe80
#28517
üzenetére
feltöltöttem. A Munka2 lapot nézd!
-
Delila_1
veterán
válasz
valyogvisko
#28502
üzenetére
Akkor nosza!
-
Delila_1
veterán
válasz
valyogvisko
#28500
üzenetére
Feltételeztem, hogy mindkét lapon van címsorod, a tényleges adatok a 2. sorban kezdődnek.
Másik feltételezésem, hogy a B lapon az AA oszlopban már nincsenek adataid.A lenti makró a B lap AA oszlopába beírja a DARABTELI függvényt, ami megnézi, megtalálható-e az A oszlopában szereplő név az A lapon.
Ezután egy ciklusban törli az itt is, ott is szereplő nevek sorát, de csak a B lapon.A makróban megjegyzést tettem azokhoz a sorokhoz, ahol át kell írnod a lapok nevét, összesen 3 helyen.
Sub Duplat_Szuntet()
Dim sor As Long, usor As Long
Dim WSA As Worksheet, WSB As Worksheet
Set WSA = Sheets("A") '**********
Set WSB = Sheets("B") '**********
usor = Application.CountA(WSB.Columns(1))
WSB.Range("AA2:AA" & usor) = "=COUNTIF(A!A:A,A2)" 'Itt az A! módosítandó *********
With WSB
For sor = usor To 2 Step -1
If .Cells(sor, "AA") > 0 Then .Rows(sor).Delete Shift:=xlUp
Next
.Columns("AA") = ""
End With
End Sub -
Delila_1
veterán
válasz
valyogvisko
#28493
üzenetére
Add meg pontosan, melyik lapnak melyik oszlopában szerepelnek a nevek.
Az ilyen "mondjuk legyen A" meghatározások miatt többször kell dolgozni annak, a segítségedre siet.Az sem mindegy, hogy a 2. lapon csak azt a bizonyos cellát kell törölni, vagy az egész sort.
-
Delila_1
veterán
válasz
the radish
#28491
üzenetére
Semmiképp ne Excelben oldd meg!
Nézz utána a Word körlevél funkciójának.
-
Delila_1
veterán
válasz
ritterkrisz
#28489
üzenetére
Igen. Akkor látod, és törölheted is.
-
Delila_1
veterán
válasz
ritterkrisz
#28485
üzenetére
Autoszűrő?
-
Delila_1
veterán
válasz
twingos
#28473
üzenetére
Formázd meg a D oszlopot előre, legyen # ##0" db" az egyéni kategóriában.
Rendeld a lapodhoz a lenti makrót:Private Sub Worksheet_Change(ByVal Target As Range)
Dim talal, WF As WorksheetFunction
Set WF = WorksheetFunction
Application.EnableEvents = False
If Target.Column = 1 Then
If WF.CountIf(Columns(1), Target) > 1 Then
If WF.CountIf(Columns(5), Target) = 0 Then
talal = Range("E" & Rows.Count).End(xlUp).Row + 1
Range("E" & talal) = Target
Range("D" & talal) = WF.CountIf(Columns(1), Target)
Else
talal = Application.Match(Target, Columns(5), 0)
End If
Range("D" & talal) = WF.CountIf(Columns(1), Target)
End If
End If
Application.EnableEvents = True
End Sub -
Delila_1
veterán
válasz
twingos
#28471
üzenetére
Legyen a B2 képlete =DARABTELI(A$2:A2;A2). Ügyelj a $ jelre. Ezt lemásolod a többi adatod mellé. Ahol 1-nél nagyobb számot látsz, ott már nem először szerepel az adat. Szűrheted is az oszlopot az 1-nél nagyobb értékekre.
Más oszlopba is írhatod a képletet, ha a B foglalt.
Adhatsz A2-től az oszlopodra feltételes formázást. A képlet =DARABTELI(A:A;A2)>1
-
Delila_1
veterán
-
Delila_1
veterán
-
Delila_1
veterán
Erre a kódrészletre többször kerül sor a leírásod szerint.
Mikor első esetben hibára fut, a hibakódot megjegyzi. Ha az On Error Resume Next-tel át tudtál lépni a hibán, a művelet elvégzése után le kell nulláznod a hibakódot, hogy a következő futtatáskor ne ezzel a hibával induljon. Nem tudom, hova érdemes beírni a nullázást, legegyszerűbb, ha már eleve 0 hibakóddal indítod a programrészt az On Error Resume Next sor fölött az On Error Goto 0 sorral.
-
Delila_1
veterán
válasz
tzimash
#28399
üzenetére
Sub mm()
Dim sor As Long, usor As Long, ertek
usor = Range("B" & Rows.Count).End(xlUp).Row
For sor = usor To 2 Step -1
ertek = Cells(sor, "B")
If Not InStr(Cells(sor, "C"), "VBS/BS ") > 0 And _
Cells(sor, "F") = 8960 And Cells(sor, "D") = "J" _
And Not (ertek = 2381273 Or ertek = 2381389 Or ertek = 2587841 _
Or ertek = 2437821 Or ertek = 2531518 Or _
ertek = 2417707 Or ertek = 2832690) Then
Rows(sor).Delete Shift:=xlUp
End If
Next
End Sub -
Delila_1
veterán
válasz
szatocs1981
#28387
üzenetére
Passz.
-
Delila_1
veterán
válasz
szatocs1981
#28377
üzenetére
Működik!
Botorul a 3 cellába (D1:D3) egyszerre vittem be a képletedet.

-
Delila_1
veterán
Itt egy saját függvény.
Function Megkeres(tartomany As Range, ertek As String)
Dim CV As Range
For Each CV In tartomany
If InStr(CV, ertek) Then
Megkeres = CV
Exit Function
End If
Next
Megkeres = "Nincs " & ertek & " a tartományban"
End FunctionA cellába beírod =megkeres(A1:A9;"nok")
-
Delila_1
veterán
válasz
szatocs1981
#28377
üzenetére
IGAZ, vagy HAMIS értéked ad, értelemszerűen.
-
Delila_1
veterán
válasz
szatocs1981
#28371
üzenetére
Nálam sem akarja az igazságot. Egyébként huba csíszott a képletedbe, a sor($1:$100)) elé bekerült egy } karakter.
-
Delila_1
veterán
válasz
szatocs1981
#28369
üzenetére
Igaz.
-
Delila_1
veterán
válasz
szatocs1981
#28367
üzenetére
Hol írtam?
-
Delila_1
veterán
válasz
the radish
#28328
üzenetére
Akkor segítene más.

Szívesen.

-
Delila_1
veterán
válasz
the radish
#28326
üzenetére
Az eredeti makró végére, az End Sub fölé tegyél be egy sort:
WSM.Rows(1) = ""
Ennyi az egész, ezzel a másolt lap első sorából kitörlöd az adatokat.
-
Delila_1
veterán
válasz
the radish
#28322
üzenetére
Figyelmetlenül olvastam az előbb.

Egy jól működő makrót ne írjunk át azért, amit könnyedén a makró nélkül is elintézhetsz. Kijelölöd a címsort, és nyomsz egy Delete-t. Ha meg úgyis törlődik, akkor ezt sem kell billentyűzetről elvégezned.
-
Delila_1
veterán
válasz
the radish
#28322
üzenetére
Rows(1).Copy WSM.Range("A1") 'fejléc másolása ezt sort töröld ki a makróból.
-
Delila_1
veterán
válasz
tzimash
#28319
üzenetére
Másold át a fejlécet egy új lapra.
Használd az autoszűrőt az eredeti lapon. Megadhatod, hogy azok a sorok legyen láthatóak, amelyek tartalmazzák a J karaktert. Ezeket a teljes sorokat kijelölöd, Ctrl+c-vel másolod, az új lap A2 cellájába Ctrl+v-vel beilleszted.
Marad a kijelölés az első lapon, ezeket a sorokat törlöd.
-
Delila_1
veterán
válasz
bumlet
#28317
üzenetére
Remélem, most jót töltöttem fel.
-
Delila_1
veterán
válasz
#81999360
#28315
üzenetére
Túl sok az Excel lelkének, nem fogadja el a ##.##.##.##-#### formátumot az egyéni kategóriában. Javaslom, hogy a beírás oszlopát szöveg formátumra vedd, és egy segédoszlopban az
=BAL(A1;2)&"." & KÖZÉP(A1;3;2) &"." & KÖZÉP(A1;5;2) &"." & KÖZÉP(A1;7;2) &"-" &JOBB(A1;4)
képlettel formázd a kedved szerint.
-
Delila_1
veterán
-
Delila_1
veterán
válasz
Mittu88
#28305
üzenetére
Az On Error Resume Next hibát generál, ha nem tudja megnyitni a következő sorban a fájlodat.
A megnyitási hiba kódja az 1004. Mikor bejön ez a hibakód, felteszi a kérdést
valasz = MsgBox("Újrahívás", vbYesNo + vbExclamation, "Új próbálkozás")
Igen válasz esetén kilép a Sub-ból, Nem-nél az Ujra címkéhez ugrik, ahol megszüntetjük a hibakódot az
On Error GoTo 0 sorral, másképp hibát jelez akkor is, ha most már meg tudja nyitni a fájlt.
Ez a lenullázó sor tulajdonképpen a 2. próbálkozástól érdekes, első esetben 0 a hibakód. -
Delila_1
veterán
válasz
m.zmrzlina
#28292
üzenetére
"nagyobb hajlam van arra, hogy kitaláld a hiányzó peremfeltételeket"
Talán azért, mert úgy gondolom, a kérdezőt elbizonytalaníthatja a sok újabb kérdés. Nem szeretnék senkiből kisebbségi érzést kiváltani, inkább 3× válaszolok.

Szerencsére ezen a fórumon nem macerálják az emberek egymást, de van olyan hely, ahol porig aláznak mindenkit, aki kérdez.
-
Delila_1
veterán
válasz
m.zmrzlina
#28287
üzenetére
De haragszom az n-edik átírás után, csak nem nagyon. Abból indulok ki, hogy aki kérdez, ebben a témában nem olyan profi, mint valami másban, amiben viszont én nem vagyok jártas, és amiben nem tudnék egy tisztességes, lényegretörő kérdést feltenni – ha szükségem lenne rá.
Vajh' a lényegretörőt a hamarosan megjelenő új helyesírási szótár szerint így kell írni?
-
Új hozzászólás Aktív témák
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Samsung Galaxy S21 FE 5G - utóirat
- Yettel topik
- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
- Xiaomi 14T - nem baj, hogy nem Pro
- Spórolós topik
- Pánik a memóriapiacon
- Ubiquiti hálózati eszközök
- Bluetooth hangszórók
- BestBuy topik
- További aktív témák...
- MS SQL Server 2016, 2017, 2019
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- MEGA AKCIÓ! - Jogtiszta Windows - Office & Vírusirtó licencek- Azonnal - Számlával - Garanciával
- 10 Darab ÚJ PC Játékszoftver
- HP Elitebook 735 G6 13 3 FHD Laptop AMD Ryzen 5 Pro 16 GB RAM 512GB SSD 6 hónap garanciával
- Samsung Galaxy A16 / 4/128GB / Kártyafüggetlen / 12Hó Garancia
- Új és régi konzolok Okosítása és Szoftveres szintű javítása - Már 12.52 FW-s PS4-ek is!
- ÚJ ELEKTROMOS ROLLER Black friday Hardverapró.húúú!!! 2/3 ár alatt a és e-bike dobozban, 1 év gar.:
- Telefon felvásárlás!! iPhone 14/iPhone 14 Plus/iPhone 14 Pro/iPhone 14 Pro Max
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: ATW Internet Kft.
Város: Budapest


-nek váltasz át általános formátumra?











