-
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
-
m.zmrzlina
senior tag
válasz
Hyper84
#23599
üzenetére
A "torolni " munkalap A oszlopába nem a s01... stb-t írod hanem az A01.... stb-t és a
If Application.WorksheetFunction.CountIf(rngTorolni, rngCella) = 1 helyett
If Application.WorksheetFunction.CountIf(rngTorolni, rngCella) = 0 lesz
A többi ugyanaz.
Azt gondolom mondani sem kell, hogy legyen a fáljból biztonsági másolatod. -
m.zmrzlina
senior tag
válasz
m.zmrzlina
#23597
üzenetére
Ehhez a módszerhez mindenképp kell egy tartomány amiben a "halálra ítélt" azonosítók vannak.
Meg lehet fordítva is csinálni de akkor a maradó azonosítók listája kell és a Countif() nulla értékénél kell törölni.
Ugyanaz csak pepitában.

-
m.zmrzlina
senior tag
válasz
Hyper84
#23592
üzenetére
1. Létrehoztam egy munkalapot a "torolni" néven
2. Ennek a munkalapnak az A oszlopába felvittem azokat az elemeket amelyeknek az oszlopát törölni kell
3. A munkalap amin a törlendő adatok vannak "adatok " nevet kapott
4. A For Each sor végén lévő Range("A1:Z1") azt a tartományt jelöli ameddig a te adataid tartanak az "adatok" munkalapon.Sub oszlop_torol()
Dim rngTorolni As Range
Dim rngCella As Range
Dim wsAdatok As Worksheet
Set wsAdatok = ThisWorkbook.Worksheets("adatok")
Set rngTorolni = ThisWorkbook.Worksheets("torolni").Range("A:A")
For Each rngCella In wsAdatok.Range("A1:Z1")
If Application.WorksheetFunction.CountIf(rngTorolni, rngCella) = 1 Then
rngCella.EntireColumn.Delete
End If
Next
End Sub -
m.zmrzlina
senior tag
válasz
Hyper84
#23590
üzenetére
Én eltárolnám egy oszlopba azokat a fejlécelemeket amelyek oszlopát tötölni kell majd egy for each next-tel és egy =CountIf()-fel végigmennék a fejlécen. Ahol a =CountIf() 1-et ad vissza ott törölném az egész sort.
Ha teszel be egy képet a munkalapodról (vagy legalább leírod, hogy hogyan néz ki) konkrétabb is tudok lenni.
-
m.zmrzlina
senior tag
Így próbálok feltölteni adattal két tömböt:
arrAnalist() = wsKabelo.Range("A2:A" & intListahossz)
arrDigilist() = wsKabelo.Range(Cells(2, intDigitlista_oszlop), Cells(intListahossz, intDigitlista_oszlop))Ha nem az a munkalap aktív amelyikről az adatokat a tömbbe kell írni akkor a második sornál a "worksheet objektum range metódusa hibás" hibaüzenetet kapom. Az első sor gond nélkül lefut.
Ha a két sor elé beteszem, hogy:
wsKabelo.Select
akkor mind a két sor hiba nélkül megy.Mi lehet az oka?
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
Mittu88
#23558
üzenetére
Az volt a probléma, hogy volt egy kezdőérték, lefutott a teljes kód aminek során megváltozott és ennek a kódnak egy részét szeretném újra futtatni.
Namármost: a kezdeti értéket nem adhatom meg a részkód futtatásánál mert ha már egyszer lefutott a teljes kód akkor már nem megyek semmire azzal az értékkel. Ha viszont itt adok értéket neki akkor meg a teljes kód futtatásánál kavar be.
De mindegy is Fferi50 tippje alapján fogok boldogulni a problémával.
Köszi mindenkinek aki segített.

-
m.zmrzlina
senior tag
válasz
sedyke
#23547
üzenetére
A tiédhez nagyon hasonló probléma volt itt.
-
m.zmrzlina
senior tag
válasz
Fferi50
#23545
üzenetére
Jól gondolom, hogy ha a munkalapra kiírós megoldást választom akkor az objektumváltozókat sem kell Public-ként deklarálni csak minden eljárás elején (persze csak ami használja ) értékadással kell kezdeni? Pl:
Dim wsOsszesito as Worksheet
.
.
Sub makro1()
Set wsOsszesito = ThisWorkbook.Worksheets("összesítő")
.....
End Sub -
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
A következő kérdésem lenne:
Van egy munkafüzetem abban van egy makró ami 4-5 jól ekülöníthető dolgot csinál. Elindítom a makrót szépen lineárisan elejétől a végéig lefut megteszi a dolgát, mindenki örül.
Néha azonban szükség van arra, hogy a teljes makrónak egyes részeit többször, külön is le lehessen futtatni (pl hogy két tartomány egyezőségét leelenőrizze) illetve vannak részek amiket kifejezetten nem szeretnék mindig lefuttatni többször (pl a forrás munkalapok más munkafüzetekből való importálására csak egyszer van szükség)
Az a tervem, hogy a teljes kódot egyetlen modulon belül kisebb eljárásokra szabdalom szét és ezekhez az eljárásokhoz külön parancsikonokat teszek a gyorsindítás eszköztárra.
Itt kezdődik a probléma mivel az egyes eljárások jórészt ugyanazokat a változókat használják.
Milyen tipusú változók kellenek és hogyan kell ezeket az eljárások között adni-venni?
Tudom, ez a téma sokkal bővebb mintsem egy válaszban minden részét ki lehetne vesézni, de nekem már az is sokat segít, ha valaki "irányba állít" és 600 oldal manual helyett csak pl 50-et kell elolvasnom.
-
m.zmrzlina
senior tag
Szerintem ez a feladat egyszerűen megoldható (feltéve, ha jól értem a problémát).
Tegyük fel, hogy nagyjából úgy néz ki a munkafüzeted ahogy kettővel lejjebb Wyll lerajzolta
Csinálsz egy munkalapot ebbe a munkafüzetbe, legyen a neve mondjuk "összesítő"Erre a munkalapra kialakítod a számodra legmegfelelőbb szerkezetet és a megfelelő helyekre behivatkozod azokat a cellákat aminek a tartalmát látni szeretnéd.
A képen most a cellák képleteit látod de ha beírod a képletetet akkor a hivatkozott cella tartalmát fogod látni.
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
Adott 2 munkalap. Mindkettőn azonos számú sorból de változó számú oszlopból álló tartományok. Egy harmadik munkalapra össze szeretném másolni ezeket egymás mellé (azonos a sorok száma ugyebár)
Így próbálom:
1. az első munkalapot lemásolom és "összesítő" néven hozzáadom a munkafüzethez
2.meghatározom az első üres oszlop számát és változóba írom (erre a változóra később még szükség lesz)
elsoures_oszlop = wsOsszesito.Range("A1").CurrentRegion.Columns.Count + 1
3. Másolok(nék)
wsTemp.Range("A1").CurrentRegion.Copy Destination:=wsOsszesito.[B]???????[/B]C][/M]
Hogyan jelölöm ki a legegyszerűbben a célterületet? -
m.zmrzlina
senior tag
válasz
bteebi
#23487
üzenetére
Négy irány:
Sub fornext_bjfl() 'balról jobbra fentről le
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_jblf() 'jobbról balra lentről fel
For i = 10 To 1 Step -1
For j = 5 To 1 Step -1
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_jbfl_() 'jobbról balra fentről le
For i = 1 To 10
For j = 5 To 1 Step -1
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_bjlf() 'balról jobbra lentről fel
For i = 10 To 1 Step -1
For j = 1 To 5
Cells(i, j).Select
Next
Next
End SubRemélem nem írtam el.

-
m.zmrzlina
senior tag
válasz
-PLevi-
#23477
üzenetére
Egy kicsit kecsesebb ez a megoldás de a lényeg ugyanaz mint az előbbinél.
Sub atszamoz()
holavege = Range("A" & Rows.Count).End(xlUp).Row
Cells(1, 1).Select
i = 1
Do While Not ActiveCell.Row > holavege
If ActiveCell.EntireRow.Hidden = False Then
ActiveCell.Value = i
i = i + 1
Else
ActiveCell = Empty
End If
ActiveCell.Offset(1, 0).Select
Loop
End SubEz nem kíván folyamatos tartományt az A oszlopban és nem ír semmit a rejtett sorokba.
-
m.zmrzlina
senior tag
válasz
-PLevi-
#23477
üzenetére
Azt nem tudom, hogy makró nélkül megoldható-e de itt egy példa egy makrós megoldásra:
Sub atszamoz()
Cells(1, 1).Select
i = 1
Do While ActiveCell.Value <> ""
If ActiveCell.EntireRow.Hidden = False Then
ActiveCell.Value = i
i = i + 1
Else
ActiveCell.Value = 0
End If
ActiveCell.Offset(1, 0).Select
Loop
End SubA tartomány kijelölése másképp is megoldható mint itt. A lényeg: végigmész az egész tartományon leellenőrzöd, hogy rejtett-e az aktuális sor és ha nem rejtett adsz neki egy sorszámot. Ezt a makrót minden új szűrés után le kell futtatni.
-
m.zmrzlina
senior tag
Két kérdés:
A munkalapon közös keretben lévő cellák egyesítve vannak vagy külön cellák csak a keretük közös? (gyanítom külön cellák) Ha van köztük egyesített, melyek azok?
A különböző napokhoz tartozó űrlap részletek nyilván nem véletlenül különböznek. Van rá lehetőség, hogy egységes fejlécet kapjanak?
-
m.zmrzlina
senior tag
válasz
Mittu88
#23432
üzenetére
Kijelölt cella értékének változóba írása:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek1 = Target.Value
End If
End SubMódosított cellaérték változóba írása:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek2 = Target.Value
End If
End Sub -
m.zmrzlina
senior tag
Próbáld ki ezt! Szerintem közel van ahhoz amit szeretnél. Úgy indítasz, hogy kijelölöd azt a tartományt aminek a szineit másolni szeretnéd és elindítod a makrót.
Sub masol()
Dim intSorok As Integer
Dim intOszlopok As Integer
Dim arrCopyColor()
intSorok = Selection.Rows.Count
intOszlopok = Selection.Columns.Count
ReDim arrCopyColor(intSorok, intOszlopok)
For i = 0 To intSorok
For j = 0 To intOszlopok
arrCopyColor(i, j) = Cells(ActiveCell.Row + i, ActiveCell.Column + j).DisplayFormat.Interior.Color
Next
Next
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "colors"
For i = 1 To intSorok
For j = 1 To intOszlopok
Cells(i, j).Interior.Color = arrCopyColor(i, j)
Next
Next
End Sub -
m.zmrzlina
senior tag
Ugye a legprofibb megoldás gondolom az lenne, hogy egy változóba kiírkálni a cellák DisplayFormat.Interior.Color tulajdonságát majd egy újonnan létrehozott munkalapon visszaírni.
Vagy a másik, hogy ha van elég hely a munkalapodon akkor annyi oszloppal jobbra (vagy sorral lejjebb) másolni a formátumot ahol már nem zavar aztán Ctrl+C > formátum másolása az új munkalapra.
Nyilván te is észrevetted, hogy annyit sántít a megoldás, hogy a nofill (nincs kitöltés) hátterű cellákból fehér (colorindex 2) hátterű cellák lesznek. Nem tudom ez mennyire baj.
-
m.zmrzlina
senior tag
válasz
Excelbarat
#23421
üzenetére
Ezzel a megoldással csak egy probléma van. Az eredeti kérdés az volt, hogy hogyan lehet feltételesen formázott cellák háttérszíneit lemásolni. Arra pedig ez a kód nem jó.
Amúg szép, ha megengeded használni fogom.

Ha már szinek:
Két rendszergazda beszélget:
-Na milyen az új barátnőd?
-Ne is kérdezd tökéletes. Csúcs ahogy kinéz. 90-60-90
-Nebasz!!! Sötétlila???? -
m.zmrzlina
senior tag
Nekem ezzel a kóddal sikerült lemásolnom (Excel 2010 alatt) egy korábbi munkalapon a feltételes formázás színeit:
Sub masol()
For Each cella In Selection.Cells
cella.Offset(0, 10).Interior.Color = cella.DisplayFormat.Interior.Color
Next
End SubEz a kód a kijelölt tartomány minden cellájának (feltételesen és nem feltételesen formázott) színét 10 oszloppal jobbra másolja.
Ja innen loptam, kipróbáltam és működött. (jsmith4892002 2012 aug 19.-i hozzászólása)
-
m.zmrzlina
senior tag
Vagy nézd meg ezt:
Sub vaneilyen()
Dim File As String
File = InputBox("Add meg a keresett fájl nevét! (kiterjesztéssel együtt)")
Dim DirFile As String
DirFile = ThisWorkbook.Path & "\" & File
If Dir(DirFile) = "" Then
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=DirFile
'vagy
'Workbooks.Open Filename:=másikfájl
'kitölteni a megfelelő adatokkal
'és menteni a kívánt néven
Else
Workbooks.Open Filename:=DirFile
End If
End SubEz a kód ebben a formájában abban a mappában keres amiben a kódot tartalmazó munkafüzet van.
-
m.zmrzlina
senior tag
válasz
slashing
#23393
üzenetére
Én ezt egyszer úgy oldottam meg, hogy az inputboxban megadtam a formáját a neveknek amit elfogad a makró.
technikus = UCase(InputBox("Add meg a technikus nevét!" & Chr(10) "TUDOR VIDOR SZENDE SZUNDI MORGÓ HAPCI KUKA MIND"))
If technikus <> "MIND" Then
If Application.WorksheetFunction.CountIf(Worksheets("PrnWinExcel").range("B:B"), technikus) = 0 Then
MsgBox "Nincs ilyen technikus."
Exit Sub
ElseIf technikus = "" Then
Exit Sub
End If
End IfPersze ez csak akkor működik ha minden elfogadható input ismert a programozás idején, nem bővül vagy egészül ki esetleges elemekkel a Worksheets("PrnWinExcel").range("B:B") tartomány vagy van lehetőség a folyamatos frissítésére.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina
#23387
üzenetére
Talán egy fokkal jobb, ha kiírod tömbbe. Onnantól fogva van egy változód amit kedved szerint módosíthatsz aztán a végén visszaírod a munkalapra.
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
slashing
#23360
üzenetére
Nekem ezt sikerült kiötleni:
Sub makro_1()
elsouzenet = InputBox("blablabla1")
masodikuzenet = InputBox("blablabla2")
datum = InputBox("datum")
Range("D5").Select
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Select
Selection.Copy
Sheets.Add
ActiveSheet.Paste
hanysor = Selection.Rows.Count
hanyoszlop = Selection.Columns.Count
For i = hanyoszlop To 1 Step -1
Range(Cells(1, i), Cells(hanysor, i)).Select
Selection.Insert Shift:=xlToRight
Selection.Value = elsouzenet
Next
Range("A:B").Select
Selection.Insert Shift:=xlToRight
Range("B1").Value = masodikuzenet
Range("A1").Value = datum
Range(Cells(1, 1), Cells(hanysor, ActiveCell.End(xlToRight).Column)).Select
Selection.Copy
End Sub -
m.zmrzlina
senior tag
válasz
Mittu88
#23314
üzenetére
Nekem azt sikerült kiötleni (na jó innen loptam :-) hogy hozzáadsz a munkafüzetedhez egy lapot amin csak egy információ van a felhasználónak, hogy "Nincs engedélyezve a makró. Zárd be a munkafüzetet és nyisd meg újra miután engedélyezted a makrókat!". A fálj bezárásakor ezen a lapon kívül minden munkalapot elrejtesz és mentesz. Ha valaki engedélyezett makróval vagy letiltott makróval de biztonságos helyről nyitja meg a fájlt akkor a Worbook.Open esemény során az összes munkalap rejtése megszűnik csak az üzenetet tartalmazóé marad meg ergó tud dolgozni a user. Ha viszont nincsen engedélyezve a makró akkor megnyílik a fájl de csak egy lap látható amin az üzenet van (hiszen úgy mentetted el a fájlt hogy az összes többi rejtett).
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet
For Each sh In Worksheets
sh.Visible = xlSheetVisible
Next
For Each sh In Worksheets
If sh.Name <> "figyelem" Then sh.Visible = xlSheetVeryHidden
Next
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_Open()
Dim sh As Worksheet
For Each sh In Worksheets
sh.Visible = xlSheetVisible
Next
For Each sh In Worksheets
If sh.Name <> "figyelem" Then
sh.Visible = xlSheetVisible
Else
sh.Visible = xlSheetVeryHidden
End If
Next
End SubJa és nem Insert>New>Module-ba másolod a makrót hanem a Thisworkbook>Worksheet-ba
-
m.zmrzlina
senior tag
válasz
littleNorbi
#23309
üzenetére
Én úgy írnám a fv-t, hogy pl: =FKERES(D2;A:B;2;0) ahelyett, hogy =FKERES(D2;A1:B400;2;0).
Persze csak ha nem zavar be 400. sor után lévő tartomány, (ha van ott egyáltalán valami)
-
m.zmrzlina
senior tag
Én ezt csak úgy tudom elképzelni, hogy korábban a két fájl két külön alkalmazásablakban volt megnyitva most meg egyben.
Magyarul egyetlen példányban van az excel megnyitva és azon belül a két fájl. Ha így van akkor nem szabad azt várni, hogy az aktív munkafüzet státuszsorában a nem atívhoz tartozó adatok látszódjanak.
-
m.zmrzlina
senior tag
válasz
bteebi
#23281
üzenetére
A Cells.Replace What:="alma", Replacement:="körte", LookAt:=xlPart, _
SearchOrder:=xlByRows
helyesen: ws.Cells.Replace What:="alma", Replacement:="körte", LookAt:=xlPart, _
SearchOrder:=xlByRowsVagy kevésbé elegánsan: a
For Each ws In ActiveWorkbook.Worksheets
sor után ted be a következő sort:
ws.Activate -
m.zmrzlina
senior tag
válasz
fluxion
#23244
üzenetére
Csak az elv:
Sub lista_frisit()
Range("B1").Select
Do While ActiveCell.Value <> ""
If Application.WorksheetFunction.CountIf(Range("A:A"), ActiveCell) = 0 Then
Range("A" & (Range("A" & Rows.Count).End(xlUp).Row) + 1) = ActiveCell.Value
End If
ActiveCell.Offset(1, 0).Select
Loop
End SubNálam A1 ben kezdődik a szűkebb B1-ben a bővebb lista.
Természetesen a saját munkalapodra kell faragnod. Ha teszel be képet róla tudjuk pontosítani. -
m.zmrzlina
senior tag
válasz
fluxion
#23235
üzenetére
Na jó de azzal, hogy kijelölöd azzal még semmit nem oldottál meg. Ennek a cellának az értékét át kellene adni a lastRow változónak. Pl: lastRow = Range("K11").Value.
Én mondjuk nem a Selection.Find-dal csinálnám ezt, hanem az Application.Worksheetfunction.Countif-fel. Magyarul a Darabteli() fv makrós megfelelőjével. Végigmennék az új lista cikkszámain (aminek részhalmaza a régi cikkszám lista - gondolom) és az új listának azt az elemét amin a CountIf nullát ad vissza azt hozzáadnám a régi listához
-
m.zmrzlina
senior tag
válasz
fluxion
#23231
üzenetére
Szerintem az If Err.Number = 91 Then sornál kellene keresgélni.
Tedd be a sor elé ezt: Debug.Print Err.Number és léptesd a makrót F8-cal és figyeld mit ír az Immediate ablakban a második körben.
Illetve még egy kérdés. Miért kell az új tétel beírása után a K11-be lépni?
-
-
m.zmrzlina
senior tag
válasz
m.zmrzlina
#20935
üzenetére
A feladatot egyébként úgy tudnám leírni, hogy ábrázolni kell egyetlen ábrán hogy pl különböző lámpák mettől meddig vannak felkapcsolt és meddig lekapcsolt állapotban a nap folyamán.
Ha más ötlet van azt is szivesen fogadom.
-
m.zmrzlina
senior tag
Powerpointban küzdök vonaldiagrammal de gondolom a beállítások Excelben sem nagyon mások.
Vízszintes tengelyen idő van ábrázolva (24 óra) 15 perces felbontásban. A függőleges tengelyen egytől x-ig egész számok. Minden grafikon két értéket vehet fel a nullát és a grafikon sorszámát. Tehát az első grafikon 0-1 értékekből áll a második 0-2 az x-edik 0-x-ből)
Kérdés: hogyan állítsam be a grafikont, hogy minden vonal csak a 0-tól eltérő értékeket ábrázolja, magyarul ott ahol az érték nulla ott ne látsszon a grafikon vonala.
Valami olyasmire lenne szükségem mint az árfolyamdiagram csak megfordított tengelyekkel, azaz vízszintes vonalakkal.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina
#20002
üzenetére
Bocsánat, itt a magyarázat egy kissé zavaros. Valójában nem az F oszlopon megy végig, hanem azon az oszlopon aminek az egyik celláját kijelölöd.
-
m.zmrzlina
senior tag
válasz
Wollie
#19998
üzenetére
Próbáld meg a következőt. Az F oszlopban lévő szövegeken megy végig, az E oszlopba kigyűjti az egyedi rekordokat és a D1 cellába kiírja hogy hány különböző rekordot talált. Természetesen a tartományok átírhatók.
Sub lista()
Dim intHanyfele As Integer
Do While ActiveCell.Value <> ""
If Application.WorksheetFunction.CountIf(Range("E:E"), ActiveCell.Value) = 0 Then
Cells(intHanyfele + 1, 5).Value = ActiveCell.Value
intHanyfele = intHanyfele + 1
End If
ActiveCell.Offset(1, 0).Select
Loop
Range("D1").Value = intHanyfele
End SubKicsit ágyúval verébre módszernek tűnik mert meg lehet oldani irányított szűréssel is. Más helyre másolja és Csak egyedi rekordok megjelenítése opciók bekattintva, majd az egyedi rekordokat darabtelivel megszámolni.
-
m.zmrzlina
senior tag
válasz
geza844
#19616
üzenetére
Nem tudom hány cellát érint és mennyire szoktad a "inkognito" cellákat másolgatni ide-oda de jó esetben az is lehet megoldás, hogy nyomtatás előtt ezeket a cellákat eltünteted:
Sub formatum_inkognito()
Range("A1").Select
Selection.NumberFormat = ";;;"
End SubAzután ha megint akarod látni a cellákat akkor vissza lehet állítani a formátumukat az eredetire. Ki lehet tenni egy parancsgombot a makróhoz és nyomtatás előtt csak egy kattintás még akkor is ha sok cellát érint a művelet.
-
m.zmrzlina
senior tag
Játszom egy kicsit.
Van egy képem elszabdalva 90 darabra. A darabokat beillesztettem egy munkalapra egy 3x30 cellás tartományba mindegyiket egy-egy cellához igazítva hogy éppen lefedje a cellát. (a 90 darabka kiadja az eredeti képet mintha puzzle volna) A cellákban a képek "mögött" van adat.
Egy makróval egyenként fel szeretném fedni a képdarabkákat, hogy a cella tartalma alatta láthatóvá váljon. Ezt a következő pár sorral csinálom (gyakorlatilag 90 fokkal elfordítom a képet):
Sub kep_rejt()
For j = 1 To ActiveSheet.Shapes.Count
ActiveSheet.Shapes.Range(Array(j)).Select
For i = 0 To 90
Selection.ShapeRange.ThreeD.RotationX = i
Application.Wait Now + TimeValue("00:00:01") / 10
Next
Next
End SubA belső ciklus és a késleltetés azért kell, hogy ne egyszerre hanem egymás után (mintegy animálva)történjen a kisképek elfordítása. Kicsit olyan hatása van a dolognak mintha a kicsi képek szélessége addig csökkenne amíg el nem tűnnek.
A problémám az, hogy a művelet szépen elindul majd kb a 20. kép táján elakad. Semmi látható nem történik majd pár másodberc múlva egyszerre felfedi az összes maradék képet.
Bármilyen ötletet szivesen fogadok.
-
m.zmrzlina
senior tag
válasz
slashing
#19441
üzenetére
Az igazat megvallva az Excel lapvédelem nem egy Enigma bonyolultságú védelem
Kb 5 perc alatt feloldható és ebben már benne van az az idő amíg a pc bebootol plusz amíg kiguglizod a megoldást.
Ez utóbbit megspóroltam neked, mindjárt az első (nem szponzorált) találat. Így már csak 3 perc.

-
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.
-
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.
-
m.zmrzlina
senior tag
-
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.
-
m.zmrzlina
senior tag
válasz
Delila_1
#18924
üzenetére
Köszi a választ.
Időközben született egy megoldás ami úgy látszik működik:
Workbooks.Open Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\")) & "forrásadatok.xlsx"
Mostmár csak az a kérdés, hogy mindenképpen meg kell-e nyitnom ezt a fájlt ahhoz, hogy definiáljak benne egy tartományt,
Set rngTartomány = ActiveWorkbook.Worksheets(2).Range("C1:C51")
vagy lehet-e másképp is?
-
m.zmrzlina
senior tag
Létezik a ThisWorkbook.Path ami visszaadja makrót tartalmazó munkafüzet elérési útját.
Nekem azonban az eggyel felljebb lévő alkönyvtár elérési útjára lenne szükségem, illetve egy abban az alkönyvtárban lévő fájlra szeretnék hivatkozni. Az nem megoldás, hogy fixen megadom az elérési utat mert az mindig változik.
Az a kérdésem, hogy van-e a képletek relatív hivatkozásához hasonló módszer erre a célra, vagy bűvészkedjek azzal, hogy a ThisWorkbook.Path által visszaadott sztringben az utolsó "\" utáni részt lecserélem a hivatkozni kívánt munkafüzet nevére?
-
m.zmrzlina
senior tag
válasz
pero19910606
#18410
üzenetére
-
m.zmrzlina
senior tag
Én ennek egy lehetséges okáról tudok. (persze ha valóban nem állította senki a háttér és a betű szinét azonosra). Ez pedig az, hogy van egy olyan cellaformátum ami elrejti a cellatartalmat a munkalapon de a szerkesztőlécen megjeleníti. Ez pedig a ";;;" három pontosvesszővel beállítható egyéni formátumkód.
-
m.zmrzlina
senior tag
Esetleg próbálkozz ezzel a (gondolatébresztő) saját függvénnyel:
Function HOLAKORTE(tartomany As Range, ertek_1 As Variant, ertek_2 As Variant)
For Each cella In tartomany
If cella.Value = ertek_1 And cella.Offset(0, -1).Value = ertek_2 Then HOLAKORTE = cella.Offset(0, -2).Value
Next
End FunctionHárom argumentumból az első az a tartomány amiben az ertek_1-et keresed (esetedben a C1:C9). Az ertek_1=100, az ertek_2="körte"
-
m.zmrzlina
senior tag
Nekem ezzel a makróval (vagy valami nagyon hasonlóval) tűnik legegyszerűbbnek a feladat megoldása:
Sub holakorte()
For Each cella In Range("C1:C9")
If cella.Value = Range("E1").Value And cella.Offset(0, -1).Value = Range("F1").Value Then Range("G1").Value = cella.Offset(0, -2).Value
Next
End SubE1-ben és F1-ben adod meg a feltételeket. Az E1 ben lévő értéket fogja keresni a C oszlopban, az F1 értékét a B-ben és G1-be írja ki az eredményt.
-
m.zmrzlina
senior tag
válasz
motinka
#18135
üzenetére
Arra gondol, hogy ha tudod, hogy miből mit szeretnél csinálni akkor elindítod a makrórögzítést itt: (Excel2007 vagy újabb esetén)

Adsz neki egy nevet és végigcsinálod amit szeretnél majd leállítod. Ezután ha bármikor el szeretnéd végezni ugyanezt a feladatot csak kiválasztod az előbb rögzített makródat itt:
és lefuttatod.
De írd le pontosan mit szeretnél (esetleg képpel), hátha tudunk ötletet adni!
-
m.zmrzlina
senior tag
Itt egy lehetséges megoldás makróval:
Sub legnagyobb_hol()
For Each cella In Selection.Cells
datum = cella.Value
For Each cella_1 In Selection.Cells
If cella_1.Value = datum And cella_1.Offset(0, -1).Value > temp Then
legnagyobb_sor = cella_1.Row
temp = cella_1.Offset(0, -1).Value
End If
Next
For Each cella_2 In Selection.Cells
If cella_2.Value = datum Then
cella_2.Offset(0, 1).Value = temp
End If
Next
temp = 0
Next
End Sub"A" oszlopban vannak az értékek, "B" oszlopban a hozzájuk tartozó dátumok, "C"-ben pedig, hogy az adott dátumnál mi a legnagyobb érték.

Úgy indulsz, hogy kijelölöd a dátumokat tartalmazó cellákat az elsőtől az utolsóig. Ha a te munkalapod szerkezete nem ilyen (amire jó esély van
) akkor tegyél be egy képet és hozzáfaragjuk a makrót. -
m.zmrzlina
senior tag
válasz
Aladaar
#18081
üzenetére

Ha a cellákon belül van vegyesen szám és betű amiből csak a szám kell ahogyan a képen van akkor használd a következő makrót:
Sub csakaszamok()
For Each cella In Selection.Cells
For i = 1 To Len(cella.Value)
If Asc(Mid(cella.Value, i, 1)) > 47 And Asc(Mid(cella.Value, i, 1)) < 58 Then
csakaszam = csakaszam & Mid(cella.Value, i, 1)
End If
Next
cella.Offset(0, 1).Value = csakaszam
csakaszam = ""
Next
End SubTermészetesen a makró csak az elvet mutatja ha azt csinálja amit szeretnél akkor igény szerint faragható.
-
m.zmrzlina
senior tag
válasz
VIVANA
#18057
üzenetére
Az én egyik munkafüzetemben ez a pár sor végzi ezt a feladatot:
Sub rendez()
Dim lCount As Long
Dim lCount2 As Long
For lCount = 1 To Sheets.Count
For lCount2 = lCount To Sheets.Count
If Sheets(lCount2).Name < Sheets(lCount).Name Then
Sheets(lCount2).Move Before:=Sheets(lCount)
End If
Next lCount2
Next lCount
End SubA If Sheets(lCount2).Name < Sheets(lCount).Name Then sorban lévő "<" jellel tudod beállítani, hogy csökkenőbe vagy növekvőbe rendezzen.
Sajnos már nem tudom, hogy honnan loptam.

-
m.zmrzlina
senior tag
válasz
stupid user
#18020
üzenetére
Próbáld meg kivenni a "Ha ez a teljes cella tartalma" elől kivenni a pipát.
-
m.zmrzlina
senior tag
válasz
DelArco
#18018
üzenetére
Ha ez az "A1" képlete akkor valóban nem fog működni. De ha a worksheet change eseményébenmegadod, hogy mi történjen az "A1" értékével akkor jó lehet:
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(1, 1).Value = "" Then Cells(1, 1).Value = Cells(2, 1).Value
End SubEz akkor fog működésbe lépni amikor írsz, vagy törölsz valamit az "A1"-be(ből).
Új hozzászólás Aktív témák
- BestBuy ruhás topik
- Path of Exile (ARPG)
- Eredeti játékok OFF topik
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- RAM topik
- War Thunder - MMO Combat Game
- Kés topik
- Pécs és környéke adok-veszek-beszélgetek
- League of Legends
- További aktív témák...
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- The Elder Scrolls Online Imperial Collector s Edition
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- 242 - Lenovo ThinkBook 16p (G6 IAX) - Intel Core U9 275HX, RTX 5060 (ELKELT)
- KÉSZLETKISÖPRÉSI UltraAkcióóó! MacBook Air M4 16GB 256GB Garancia - több színben!
- ÁRGARANCIA! Épített KomPhone i5 12400F 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone Ryzen 7 9800X3D 32/64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- Lenovo T14 Gen 1 Ryzen 5 pro 4650U, 16GB RAM, 256-512GB SSD, jó akku, számla, garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


)


Bocsánat teljesen igazad van. A második ciklus helyesen így néz ki:




