-
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 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!
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
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"
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz pero19910606 #18410 üzenetére
Nekem is valami nagyon hasonlót sikerült kiötleni csak másképp töltöttem ki a táblázatot:
a képlet: (K2)
=HA(DARABTELI(B2:B32;"h")>10;DARABTELI(B2:B32;"x")*$N$2+10*$O$2+(DARABTELI(B2:B32;"h")-10)*$P$2;DARABTELI(B2:B32;"x")*$N$2+DARABTELI(B2:B32;"h")*$O$2)[ Szerkesztve ]
-
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 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
válasz nova001 #18973 üzenetére
Nekem is volt egy hasonló problémám. Az erre adott válaszok közt nézz körül!
Kell hozzá egy ActiveX Combobox. Nálam az egyszerűsíti a dolgokat, hogy egy jól körülhatárolható tartományba (B oszlop) írja egymás alá a Comboboxban (Automatikus kiegészítéssel) bevitt értékeket.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz hallgat #18980 üzenetére
Nézd át ezt az oldalt! Főleg attól a résztől, hogy: Read/Write Large Blocks of Cells in a Single Operation
Esetleg ez is segíthet. Vagy ez.
Szerintem nem fogod megúszni a tömbök használatát.
[ Szerkesztve ]
-
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 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.
[ Szerkesztve ]
-
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 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.
[ Szerkesztve ]
-
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 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.
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
-
m.zmrzlina
senior tag
válasz Des1gnR #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?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Des1gnR #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
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Des1gnR #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.[ Szerkesztve ]
-
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
É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.
[ Szerkesztve ]
-
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)
[ Szerkesztve ]
-
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
[ Szerkesztve ]
-
-
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
Új hozzászólás Aktív témák
- Samsung Galaxy S23 Ultra - non plus ultra
- Robogó, kismotor
- Debrecen és környéke adok-veszek-beszélgetek
- Suzuki topik
- NVIDIA® driverek topikja
- Fortnite - Battle Royale & Save the World (PC, XO, PS4, Switch, Mobil)
- Kormányok / autós szimulátorok topicja
- Synology NAS
- AMD Navi Radeon™ RX 7xxx sorozat
- Politika
- További aktív témák...
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Promenade Publishing House Kft.
Város: Budapest