-
Mobilarena
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
-
Mutt
senior tag
válasz
Carasc0 #45230 üzenetére
Szia,
Egy Excel for Ipad és Excel 2016 között kb hány %-os kompatibilitás van?
Nincs aktív tapasztalatom Excel Apps-al IOS-en, de MS súgót olvasva, ezt látom:
- Nézegetésre megfelelő.
- Szerkesztésre csak az alap fájlformátumok mennek.
- A függvények teljes mértékben mennek, tömb-képletek is (csak újat nem fogsz tudni létrehozni).
- Pivot, fejlesztőeszköz (gombok, vezérlők), VBA nincsen.Kezdő szinten szerintem 100%-os a kompatibilitás, haladó szinten 50%-ot mondanék.
Üzleti fájlok létrehozására alkalmatlan, max. prezentálni lehet vmit vele.üdv
-
Delila_1
veterán
válasz
Carasc0 #35682 üzenetére
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I16:I35]) Is Nothing Then
If Target >= 3 And Target < 5 Then
Cells(Target.Row, "AZ") = "I"
Cells(Target.Row, "AZ").Locked = True
End If
If Target >= 5 Then
Cells(Target.Row, "BE") = "I"
Cells(Target.Row, "BE").Locked = True
End If
End If
End Sub -
Delila_1
veterán
válasz
Carasc0 #35680 üzenetére
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Protect Password:="aaa", UserInterfaceOnly:=True '****
If Not Intersect(Target, [I16:I35]) Is Nothing Then
If Target >= 3 Then
Cells(Target.Row, "AZ") = "I"
Cells(Target.Row, "AZ").Locked = True
End If
End If
End Sub -
Delila_1
veterán
válasz
Carasc0 #35675 üzenetére
Az AZ16 eleve legyen zárolt, az I16 pedig nem.
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Protect Password:="aaa", UserInterfaceOnly:=True '**********
If Target.Address = "$I$16" And Target >= 3 Then
Range("AZ16") = "I"
Range("$I$16").Locked = True
End If
End Sub -
Delila_1
veterán
válasz
Carasc0 #35669 üzenetére
Ez a makró akkor fut le, ha a lapon bármelyik cellába billentyűzetről viszel be adatot. Mivel nem az A1-be pötyögtetsz, azt a cellát kell figyeltetni, amelyiknek az értékétől függően az A1 ilyen, vagy olyan értéket vehet fel.
Add meg konkrétan, melyik cellákat módosítod, és ezeknek a hatására melyik tartomány módosul. Továbbá, hogy milyen érték(ek)nél kell zárolni a tartományt.
-
Delila_1
veterán
válasz
Carasc0 #35665 üzenetére
Vedd le a zárolást az A1 celláról, meg a többiről, amikbe írhat a felhasználó.
Rendeld a laphoz a lenti makrót.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target = "Gólyacsőr" Then '***********
Range("A1").Locked = True
ActiveSheet.Protect Password:="aaa", UserInterfaceOnly:=True '************
End If
End If
End SubA csillagokkal jelzett sorokon kell változtatnod. Az elsőben a "Gólyacsőr" helyére azt írd be, aminek a bevitele után nem akarod engedni az A1 módosítását, a másodikban az "aaa" helyén legyen a saját lapvédelmed jelszava.
-
Delila_1
veterán
válasz
Carasc0 #33037 üzenetére
ThisWorkbookba
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:10"), "OsszegKiiras"
End SubModulba
Sub OsszegKiiras()
Beep
MsgBox Application.WorksheetFunction.Sum(Sheets("Munka3").Range("C4:C15")) '***
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
End SubA csillagokkal jelzett sorban a saját lapod, saját összegzendő tartományod címét add meg!
-
Delila_1
veterán
válasz
Carasc0 #32995 üzenetére
Egy réges-régi fájlt feltöltöttem, kiindulási alapnak jó lesz. Tettem bele kommenteket.
Nézd meg a ThisWorkbook lap makróját is, az indítja az időzítőt.
-
Delila_1
veterán
-
Delila_1
veterán
válasz
Carasc0 #30890 üzenetére
A csatolt képeken nem látszik, hova tetted a makrókat, csak az, hogy egymás alá.
Újra leírom: az eseményvezérelt makrót ahhoz a laphoz rendeld, ahol futtatni akarod, a másikat modulba.
Azt látom, hogy az első With-nél átírtad – helyesen – a lap nevét arra, amelyiken éppen futtatod. -
Delila_1
veterán
-
Delila_1
veterán
válasz
Carasc0 #30874 üzenetére
Tartományhoz (pl. C1:C25) használd a Konvertálatlan gombot.
Sub Kever()
Dim sor As Integer, sor1 As Integer
Application.ScreenUpdating = False
With Sheets("BÓNUSZ GENERÁTOROK")
.Range("C1:C50").ClearContents
.Range("A1:A50").Copy Range("C1")
Randomize
.Range("B1:B50") = "=RAND()"
.Range("B1:B50").Copy
.Range("B1").PasteSpecial xlPasteValues
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
.Range("B1:B50"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("B1:C50")
.Header = xlGuess
.Orientation = xlTopToBottom
.Apply
End With
For sor = 1 To 20
If Cells(sor, "C") = "" Then
sor1 = Cells(sor, "C").End(xlDown).Row
Cells(sor1, "C").Copy Cells(sor, "C")
Cells(sor1, "C") = ""
End If
Next
sor1 = Cells(sor, "C").End(xlDown).Row
If Application.WorksheetFunction.CountA(Range("C23:C" & sor1 - 1)) = 0 Then _
Range("C21:C" & sor1 - 1).Delete Shift:=xlUp
sor1 = Cells(Rows.Count, "C").End(xlUp).Row
For sor = sor1 To 21 Step -1
Cells(sor, "C").Insert Shift:=xlDown
Next
sor1 = Cells(Rows.Count, "C").End(xlUp).Row
If sor1 > 50 Then
For sor = 50 To 45 Step -1
If Cells(sor, "C") = "" Then
Cells(sor, "C") = Cells(sor1, "C"): Cells(sor1, "C") = ""
End If
Next
End If
.Range("B1:B50").ClearContents
.Cells(1).Select
End With
Application.ScreenUpdating = True
End Sub -
Delila_1
veterán
válasz
Carasc0 #30870 üzenetére
Sub Kever()
Dim sor As Integer
Application.ScreenUpdating = False
With Sheets("BÓNUSZ GENERÁTOROK")
.Range("C1:C50").ClearContents
.Range("A1:A20").Copy Range("C1")
.Range("B1:B20") = "=RAND()"
.Range("B1:B20").Copy
.Range("B1").PasteSpecial xlPasteValues
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
.Range("B1:B20"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange Range("B1:C20")
.Header = xlGuess
.Orientation = xlTopToBottom
.Apply
End With
.Range("A21:A25").Copy Range("C21")
.Range("B21:B50") = "=Int(Rand() * (50 - 21)) + 21"
.Range("B21:B50").Copy
.Range("B21").PasteSpecial xlPasteValues
.Sort.SortFields.Add Key:= _
.Range("B21:B50"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange Range("B21:C50")
.Header = xlGuess
.Orientation = xlTopToBottom
.Apply
End With
.Range("B1:B50").ClearContents
.Cells(1).Select
End With
Application.ScreenUpdating = True
End SubHol a söröm?
-
Fferi50
Topikgazda
válasz
Carasc0 #28047 üzenetére
Szia!
1. A makrót én kiegészíteném ezzel az első sorral:
If Target.Cells.Count>1 then exit sub
Ez azt jelenti, ha több cellát jelöltél ki egyszerre, akkor nem vizsgálja, hogy a V3 cellát hagytad-e el.2."Adott egymás alatt 4 cella: A1 : D1 " Ez a négy cella egymás mellett van
A véletlenszám generáláshoz nézd meg a RandBetween munkalapfüggvényt (Worksheetfunction). Itt megadhatod a határokat. Az eredményt kerekítő függvénnyel kerekítheted. Ezután megnézed, van-e már ilyen számod. Ha igen, akkor új generálás és vizsgálat, ha nem, akkor beírod a cellába.Üdv.
-
-
-
azopi74
addikt
válasz
Carasc0 #27885 üzenetére
Nem értem, még mindig, hogy mi a problémád. De azt sem teljesen értem, hogy egy darab cellára milyen adatsáv szerinti feltételes formázást akarsz alkalmazni. Az adatsáv mindig más cellákhoz viszonyítva szemlélteti az egyes cellák értékét, egy cellára alkalmazva mit akarsz ezzel kezdeni? Mindig "teli" lesz a csík.
-
Carasc0
őstag
válasz
Carasc0 #27862 üzenetére
Közbe próbálkozom Excelben ezzel a Progress Barral. Találtam egy olyan lehetőséget ami jó lehet. Ez pediglen a feltételes formázáson belüli adatsáv alkalmazása. Ez tök jó lehet, egyetlen bökkenője van. Hogy az adatsáv csak bal to jobb és fordítva lehet, tehát csak horizontálisan működik. Ha ez működne vertikálisan, az már frankó lenne.
-
Fferi50
Topikgazda
válasz
Carasc0 #27795 üzenetére
Szia!
A cellákban levő szöveg betűszínét változtasd meg a háttérszínnek megfelelően - akkor nem fog látszani, mi van bele írva. Amikor megmutatod, akkor visszaváltod a színt. (Range("A1").font.color=vbwhite fehér színű betűk, Range("A1").font.color=vbblack fekete színű betűk.)
Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0 #27787 üzenetére
Szia!
A munkalap activate eseménykezelőjébe kell betenned a makró meghívását.
Munkalapfülön jobb egérgomb - kód megjelenítése - bal oldalon a lenyílóban Worksheet kiválasztása, utána jobb oldali lenyílóban activate kiválasztása. A megjelenő sub end sub sorok közé beírod a makród nevét.Ezek után minden olyan alkalommal, amikor aktívvá teszed a lapot (másik lapról ide átjössz), lefut a makród.
A másik kérdésedre igen a válasz.
Üdv.
-
azopi74
addikt
válasz
Carasc0 #27604 üzenetére
"A PowerQuery cucc feltétele az IE 9 megléte"
Hát ez ebben a formában nem igaz. IE 9 vagy annál újabb kell neki (gondolom nem IE8-at vagy IE6-ot használsz
)
Én se lennék hajlandó ilyen elavult böngészőt telepíteni, mint az IE9, de nem is kell (sőt nem is lehet mai OS-ekre) , természetesen megy a mai böngészőkkel. is Nálam is gond nélkül fut már két éve, pedig sose látott IE9-et, csak IE11-et, sőt, jelenleg egyáltalán semmilyen Internet Explorert se lát, csak Edge-etOffice 2013-ba még csak a PowerPivotot tették be, a PowerQuery (lánykori nevén Data Explorer) csak Office 2016-tól lett beintegrálva az Excelbe.
2010-re és 2013-ra külön kell letölteni. -
Delila_1
veterán
válasz
Carasc0 #27604 üzenetére
Csak írd be az A oszlopba az adatokat. Ha nem kerek számot adna az adatok darabszámának a gyöke, hibajelzést kapsz.
Hibátlan darabszámnál kiírja a "kevert" mátrixot a D1 cellától kezdődően. 9; 16; 25; és 36 adatra kipróbáltam, nem kell módosítanod semmit. Illetve ha nem tetszik, hogy D1-be kezd írni, akkor a
sor = 1: oszlop = 4 sorban a 4-et írd át a kedvenc oszlopod sorszámára.Sub Kever()
Dim usor As Integer, gyok As Integer, CV As Range
Dim sor As Integer, oszlop As Integer
Application.ScreenUpdating = False
usor = Range("A" & Rows.Count).End(xlUp).Row
On Error GoTo Vege
gyok = Application.WorksheetFunction.ImSqrt(usor)
Range("A1:A" & usor).Copy Range("B1")
Range("C1:C" & usor) = "=rand()"
Range("C1:C" & usor).Copy
Range("C1").PasteSpecial xlPasteValues
ActiveWorkbook.Worksheets("Munka1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Munka1").Sort.SortFields.Add Key:=Range("C1:C" & usor), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Munka1").Sort
.SetRange Range("B1:C" & usor)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
sor = 1: oszlop = 4
For Each CV In Range("B1:B" & usor)
If sor > gyok Then
sor = 1
oszlop = oszlop + 1
End If
CV.Copy Cells(sor, oszlop)
sor = sor + 1
Next
Range("B1:C" & usor).ClearContents
Range("D1").Select
Application.ScreenUpdating = True
Exit Sub
Vege:
MsgBox "Nem adnak mátrixot az adatok", vbInformation
Application.ScreenUpdating = True
End Sub -
azopi74
addikt
válasz
Carasc0 #27601 üzenetére
Bár írtad, hogy Excel 2010, azért beteszek egy Excel 2016-os, makró mentes megoldást is , mert imádom
(Excel 2010-ben is működőképes, csak fel kell tenned a PowerQuery add-in-t.)ALakítsd táblává (Table1) a forrás oszlopot. és B1-be szúrd be ezt a query-t (Advanced Editor):
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Custom", each List.Random(1)),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
#"Sorted Rows" = Table.Sort(#"Expanded Custom",{{"Custom", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Custom"})
in
#"Removed Columns"Természetesen a fenti a sima query editorban előállítható négy egérkattintással
Ja, azt elfelejtettem írni: refresh-re kalkulálja újra a kevert oszlopot. (jobb egér - refresh, vagy magyarban frissítés)
-
Delila_1
veterán
válasz
Carasc0 #27601 üzenetére
A makró átmásolja az A1:A9 tartományt a B1:B9-be. Véletlenszámokat ír a C1:C9-be, ami szerint rendezi a B oszlopot, majd törli az ideiglenes C-t.
A rendezést makrórögzítéssel vittem be.Sub Kever()
Dim sor As Integer
Range("A1:A9").Copy Range("B1")
For sor = 1 To 9
Cells(sor, "C") = "=RAND()"
Cells(sor, "C") = Cells(sor, "C").Value
Next
ActiveWorkbook.Worksheets("Munka1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Munka1").Sort.SortFields.Add Key:=Range("C1:C9"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Munka1").Sort
.SetRange Range("B1:C9")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("C1:C9").ClearContents
End SubBetehetsz egy képernyőfrissítés tiltását az elejére, hogy ne látsszanak a véletlenek, a végén pedig engedélyezed.
Application.ScreenUpdating=False
-
Delila_1
veterán
válasz
Carasc0 #23585 üzenetére
Gondolom, a rengeteg adat hosszú időn át gyűlt fel. Az egyes sorokban lévő képletek frissülése hosszú időt vesz igénybe. A helyedben azokat a képleteket, függvényeket szüntetném meg, amiknek az eredménye már biztosan nem változik, például az előző évi adatoknál.
Ezt az irányított beillesztéssel szüntetheted meg, ahol a képleteket tartalmazó cellákat másolod, és irányítottan, értékként ugyanoda beilleszted.
-
Fferi50
Topikgazda
válasz
Carasc0 #23589 üzenetére
Szia!
Megnyitás előbb kikapcsolod az automatikus számolást a menüből. Megnyitás után visszakapcsolod.
De akkor meg a szám beírása után lesz hosszú idő, amíg "magához tér" a fájl.
Szerintem mindenképpen vizsgáld meg, hogy minden képletre szükséged van-e és abban a formában.Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0 #23585 üzenetére
Szia!
Az egyik gyorsítási lehetőség az, hogy kikapcsolod az automatikus ujraszámolást. Amikor változtatsz valamit, akkor kézzel számoltatsz (Természetesen ez makróból is megy mindkettő.) Az Excelt azelőtt állítsd át kézi számolásra, mielőtt behívod a munkafüzetet. (Makróban: application.calculation= és innen felajánlja a lehetőségeket).
A másik, hogy végiggondolod, melyek azok a képletek, amelyeknek az eredménye frissítés. Ezek általában olyan képletek, amelyek rendszer változó dolgokra vonatkoznak pl. ilyen az indirekt, az offset meg még van egy pár belőle. Ezek minden egyes cella megváltozásakor azonnal újraszámítódnak, akkor is, ha nem a "hozzájuk tartozó cella" változott.
Harmadik dolog, a képeket biztosan nem éri meg "belegyömöszölni" az excelbe. Tedd be őket egy adott könyvtárba és a programban csak a hivatkozás kell bele, az excel betölti és utána el is tudod vele felejtetni.
Ugyanez vonatkozik nagytömegű szövegre (pl. help, magyarázat). Ezt is bele lehet tenni egy külön fájlba.Ha megnézed tömörítővel pl. zip, abból is kiderülhet, hogy melyik rész az ami "nyomja" a területet.
(fájl kiterjesztést átírod zip-re utána a zip tömörítővel meg tudod nézni, ki is tudod tömöríteni egy külön helyre azt, amire kíváncsi vagy. Arra vigyázz, hogy ne szerkessz bele, mert akkor baj lehet belőle. Ajánlatos mindezt a fájl másolatával megcsinálni.) Ha nem "rondítottál bele", akkor a visszanevezés után ugyanúgy lehet vele dolgozni, mint azelőtt.Üdv.
-
Fferi50
Topikgazda
válasz
Carasc0 #23572 üzenetére
Szia!
Csináld meg a képletet vizszíntesen: =AA$100, ezt húzd el vizszintesen addig, ameddig szükséged van rá.
Utána: Másolás - uj cella kijelölése az oszlopban - irányított beillesztés: képletet és transzponálás ! A képleted számodra megfelelően másolódik át lefelé.
Üdv.
-
-
bteebi
veterán
válasz
Carasc0 #23567 üzenetére
1. Gagyi és jelen esetben valószínűleg nem túl gyors, de egyszerű megoldás, ha lehúzod a képletet, és a megfelelő részt lecseréled Ctrl+H-val (mondjuk a C-t D-re, de ha ez soronként változik, akkor nem jó). Feladattól függően elég macerás is lehet (itt most valószínűleg túl körülményes lenne).
2. Makróval. Kiindulásnak valami ilyesmi jó lehet, ezt kell kicsit átírnod:Dim i As Integer
For i = 1 To 40
Cells(i, 2).Value = WorksheetFunction.If(Sheets("Nyilvántartás").Range("C2") = Range("CX1"), WorksheetFunction.If(Sheets("Nyilvántartás").Range("D2") >= Range("K2"), WorksheetFunction.If(Sheets("Nyilvántartás").Range("D2") <= Range("K8"), 1, 0), 0), 0)
Next iHa a Range("hivatkozás") helyett mindenhol a Cells(sor, oszlop)-ot használod, akkor azt úgy paraméterezed ciklusban, ahogy csak szeretnéd, és akkor könnyen megvan az egész. A fenti példában a B1-es cellába (ami a Cells(1,2) cella) írt képlet van.
-
m.zmrzlina
senior tag
-
slashing
senior tag
válasz
Carasc0 #23565 üzenetére
Azért nem változik a "C" "D"-re ha elhúzod a képlet mert a C oszlop abszolút hivatkozva van tehát az mindig fixen C lesz a képletben, szedd ki előle a $-jelet és úgy húzd el a képletet és ha mindig a második sorból kell az adat akkor meg oda rakd a $-t.
A másoláson remélhetőleg a fogd és húzd módszert érted nem a ctrl+c/v-t
-
slashing
senior tag
válasz
Carasc0 #23562 üzenetére
Nem teljesen egyértelmű de valószínűsítem hogy a relatív és abszolút hivtakozás kell neked:
Pl. Abszolút oszlop és abszolút sor $A$1 mindig erre a cellára fog hivatkozni a képlet ha lehúzod
Pl. Relatív oszlop abszolút sor: A$1 mindig az adott oszlop 1. cellájára fog hivatkozni ha elhúzod a képletet
stb.. stb...F4 billentyűvel tudod váltogatni gyorsan hogy melyik legyen relatív vagy abszolút...
Ha csak egy cellahivatkozást akarsz módosítani ahogy lehúzod a képletet akkor azon kívül mindegyik cellát rakd abszolútra...
Ha nem érthető keress rá az excel súgóban szerintem az egyik legérthetőbb súgó amit Microsoft terméknél láttam....
Új hozzászólás Aktív témák
Hirdetés
- EAFC 25
- Kertészet, mezőgazdaság topik
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Android játékok topikja
- Játékra optimalizált chipkínálatot tervez a Microsoftnak az AMD
- Futás, futópályák
- Yettel topik
- Azonnali VGA-s kérdések órája
- Az áremelések és a GTA VI késése miatt nem költekeznek a játékosok?
- Konteó topic
- További aktív témák...
- Samsung Galaxy S23 , 8/128GB, Kártyafüggetlen
- Samsung Galaxy J6 2018 32GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Samsung Galaxy S23/Samsung Galaxy S23+/Samsung Galaxy S23 Ultra
- Xbox Game Pass Ultimate kedvező áron, egyenesen a Microsoft-tól! - AUTOMATA BOLT
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged