-
IT café
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
-
Fferi50
őstag
Szia!
Excel 2010-es verziója óta elérhető a cellák tényleges színe, ezt be lehet állítani az elküldendő munkalapon, makróval:
Sub szines()
Dim wshuj As Worksheet, rngregi As Range, cl As Range
Set rngregi = Workbooks("eredeti").Sheets("eredeti").Munka1.UsedRange.SpecialCells(xlCellTypeAllFormatConditions) ' ide helyettesítsd be a forrás munkalap elérési útját
Set wshuj = Workbooks("uj").Sheets("uj") ' ide pedig az új munkalapét
For Each cl In rngregi.Cells
wshuj.Range(cl.Address).Interior.Color = cl.DisplayFormat.Interior.Color
Next
End SubElőször átmásolod az új munkalapra az adatokat értékként, formázva, majd lefuttatod a makrót.
Ha nem csak szinezés van, hanem mást is állítasz, akkor a DisplayFormat megfelelő tulajdonságait kell az adott cellához "átmásolni'. (pl. font.color, font.size stb.)
Üdv.
-
DeFranco
nagyúr
sziasztok!
valószínűleg nagy katyvaszt sikerült összekalapálnom a jelenlegi makró nemtudásommal, de szükség lenne egy variált/permutált listára.
a lényeg, hogy az i j és k paramétert minden módon párosítsa össze
i1j1k1
i1j1k2
i1j1k3
stb. módon, egymás melletti cellában levő értékenként, triumvirátusonként külön sorba.az alábbi makró végigmegy a lehetőségeken, de közben nem vált sort, így egy helyen íródnak felül az adatok. hogy lehetne rendbe szedni?
Sub Kitolto()
Do
For i = 1993 To 2014
For j = 1 To 3
For k = 1 To 76
x = 1
Cells(x + 1, 2).Value = i
Cells(x + 1, 3).Value = ThisWorkbook.Sheets("Valami_tábla").Cells(2, j + 1).Value
Cells(x + 1, 4).Value = ThisWorkbook.Sheets("Valami_tábla").Cells(k + 2, 1).Value
x = x + 1
Next k
Next j
Next i
Loop Until x = 5016
End Subszerk: az X=1-et felpakolva a for-ok fölé már működik, csak veszett lassú. miért?
[ Szerkesztve ]
-
Fferi50
őstag
válasz DeFranco #32252 üzenetére
Szia!
A ciklusok, pláne ennyi egymásba ágyazva, bizony lassúak.
Javaslom, hogy az állapotsorba írasd ki, hogy hol jár a program (Application.Statusbar=" itt járok"),
illetve a ciklusokba tedd be a DoEvents utasítást valahova, ennek eredményeként meg tudod állítani a program futását a Ctrl+Break billentyűvel. Egyébként sajnos képes teljesen "lefagyást" produkálni.Üdv.
-
DeFranco
nagyúr
válasz Fferi50 #32253 üzenetére
közben kibogoztam, a do/loop felesleges volt, mert az i-j-k meghatározza az x maximumát.
ezzel nagyon sokat gyorsult, de még mindig aránytalanul lassú volt (lássuk be 5k sort kitölteni nem nagy kaland, viszont eltartott volna legalább fél órát úgy becsültem a részeredmény alapján)
gugliztam közben, hogy mi lehet még az ok, és valóban, mivel sok és bonyolult képlet van a munkafüzetben ezért ha azokat újraszámolja lépésenként, az megint csak rendkívül lelassítja a folyamatot.
erre találtam ezt a párost:
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomaticígy végül:
Sub Kitolto()
Application.Calculation = xlCalculationManual
x = 1
For i = 1993 To 2014
For j = 1 To 3
For k = 1 To 76
Cells(x + 1, 2).Value = i
Cells(x + 1, 3).Value = ThisWorkbook.Sheets("Valami_tábla").Cells(2, j + 1).Value
Cells(x + 1, 4).Value = ThisWorkbook.Sheets("Valami_tábla").Cells(k + 2, 1).Value
x = x + 1
Next k
Next j
Next i
Application.Calculation = xlCalculationAutomatic
End SubEzzel 1-2 másodperc alatt lefutott szépen.
egyszerű feladat, biztos meg lehetett volna oldani sokkal elegánsabban is, de egyelőre kb. 10 utasítást ismerek makróul
[ Szerkesztve ]
-
DeFranco
nagyúr
válasz Fferi50 #32255 üzenetére
valóban nem, mert nem jutott eszembe, hogy problémát jelenthet. annyira nem vészesen sok, nem milliós darabszám (az egész munkafüzetre vetítve) és ez a makró nem módosít semmit benne, hiszen csak olvas.
ha teszem azt ezt keresőfüggvénnyel oldottam volna meg valamilyen formában, ugyanezen munkafüzetben és ugyanilyen adathalmazra, meg se röccent volna az excel tőle, itt nem tudom miért csinált minden fázis után újraszámolást.
-
user112
senior tag
Sziasztok.
Lehet valami egyerű módon megoldani, hogy adatbevitel közben az aktuális betű szín egy darabig mondjuk piros legyen, majd egy idő után kék aztán meg fekete stb. Vagyis hogy én tudjam egyszerűen állítgatni.
[ Szerkesztve ]
-
RedHarlow
aktív tag
válasz user112 #32261 üzenetére
Sziasztok!
Az alábbi feladatban szeretnék segítséget kérni, a képen látható táblát kellene úgy átalakítanom, hogy a személyek annyi sort kapjanak, ahány adat található a G-BN tartományban.
Tehát:
Dávid Márk - CDE oszlop - 2012 ápr - 100
Dávid Márk - CDE oszlop - 2012 aug - 100
Dávid Márk - CDE oszlop - 2012 dec - 100
Dávid Máté - CDE oszlop - 2012 feb - 100Ma délig kellene valahogy megoldanom a feladatot. Nagyon megköszönném ha tudnátok segíteni.
-
Lasersailing
senior tag
válasz RedHarlow #32262 üzenetére
Szia,
Ha jól értettem a feladatot, akkor az alábbi:
Sub redharlow()
Dim sor As Integer
Dim oszlop As Integer
Dim ujsor As Integer
Dim sn As String
'program
sor = 1
sn = ActiveSheet.Name
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "eredmeny"
ujsor = 1
'fejlécet
Sheets("eredmeny").Cells(1, 1) = "Név"
Sheets("eredmeny").Cells(1, 2) = "C oszlop"
Sheets("eredmeny").Cells(1, 3) = "D oszlop"
Sheets("eredmeny").Cells(1, 4) = "E oszlop"
[B]Sheets("eredmeny").Cells(1, 5) = "Dátum"[/B]
Sheets("eredmeny").Cells(1, 6) = "Ft"
Do
sor = sor + 1
For oszlop = 7 To 66
If Not (IsEmpty(Sheets(sn).Cells(sor, oszlop))) Then
ujsor = ujsor + 1
Sheets("eredmeny").Cells(ujsor, 1) = Sheets(sn).Cells(sor, 2)
Sheets("eredmeny").Cells(ujsor, 2) = Sheets(sn).Cells(sor, 3)
Sheets("eredmeny").Cells(ujsor, 3) = Sheets(sn).Cells(sor, 4)
Sheets("eredmeny").Cells(ujsor, 4) = Sheets(sn).Cells(sor, 5)
[B] Sheets("eredmeny").Cells(ujsor, 5) = Sheets(sn).Cells(1, oszlop)[/B]
Sheets("eredmeny").Cells(ujsor, 6) = Sheets(sn).Cells(sor, oszlop)
End If
Next oszlop
Loop Until IsEmpty(Sheets(sn).Cells(sor, 1))
End Sub(kérlek jelezz vissza, hogy jól értettem-e és ha van kérdésed még)
(Bocsánat találtam közben egy hibát, azt vastagon szedtem, hogy ki tud javítani)
üdv.
[ Szerkesztve ]
-
Lasersailing
senior tag
válasz Lasersailing #32264 üzenetére
Na szóval a végleges (A vastagonszedést programkód közben nem igazán értelmezte, ami így utólag érthető... Elnézést!):
Sub redharlow()
Dim sor As Integer
Dim oszlop As Integer
Dim ujsor As Integer
Dim sn As String
'program
sor = 1
sn = ActiveSheet.Name
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "eredmeny"
ujsor = 1
'fejlécet
Sheets("eredmeny").Cells(1, 1) = "Név"
Sheets("eredmeny").Cells(1, 2) = "C oszlop"
Sheets("eredmeny").Cells(1, 3) = "D oszlop"
Sheets("eredmeny").Cells(1, 4) = "E oszlop"
Sheets("eredmeny").Cells(1, 5) = "Dátum"
Sheets("eredmeny").Cells(1, 6) = "Ft"
Do
sor = sor + 1
For oszlop = 7 To 66
If Not (IsEmpty(Sheets(sn).Cells(sor, oszlop))) Then
ujsor = ujsor + 1
Sheets("eredmeny").Cells(ujsor, 1) = Sheets(sn).Cells(sor, 2)
Sheets("eredmeny").Cells(ujsor, 2) = Sheets(sn).Cells(sor, 3)
Sheets("eredmeny").Cells(ujsor, 3) = Sheets(sn).Cells(sor, 4)
Sheets("eredmeny").Cells(ujsor, 4) = Sheets(sn).Cells(sor, 5)
Sheets("eredmeny").Cells(ujsor, 5) = Sheets(sn).Cells(1, oszlop)
Sheets("eredmeny").Cells(ujsor, 6) = Sheets(sn).Cells(sor, oszlop)
End If
Next oszlop
Loop Until IsEmpty(Sheets(sn).Cells(sor, 1))
End Sub -
RedHarlow
aktív tag
válasz Lasersailing #32265 üzenetére
Köszönöm, a második működik és pontosan így gondoltam. Ezer hála! : )
-
sajog159
aktív tag
válasz fecske13 #32263 üzenetére
Szia,
A megoldást a MS Community fórumon írtam le, ha kíváncsi vagy az egészre itt megtalálod.
De bemásolom ide is:
1. Le kell tölteni az export.xls fájlt.
2. Fájlkezelőben jobb klikk az export.xls-re.
3. Kinyíló ablakban Általános fül, jobb alsó részen kipipálni a Tiltás feloldása kockát. Majd Alkalmaz gomb, és a végén OK. Az alábbi kép mutatja:4. Ezt követően „szokásos” módon kinyitható Excel 2013-ban (kinyíló figyelmeztető ablakban Igén gomb).
Remélhetőleg ez csak átmeneti megoldás és az OTP talán előbb vagy utóbb megoldja, hogy Excel 2013 számára is „ehető” formátumban lehessen exportálni xls fájlokat.
Ha Nálad is működik ez a megoldás, írj erről egy mondatod majd.
Üdv,
-
DeFranco
nagyúr
sziasztok!
van egy képlet, aminek szeretném makróval kicseréltetni egy részét:
=HAHIBA(VKERES($A3;INDIREKT(BJ$1&"!$A$1:$ZZ$17");2;HAMIS);0)
itt a középső részt kellene kicserélni:
INDIREKT(BJ$1&"!$A$1:$ZZ$17")
úgy, hogy direktben mutasson a kívánt táblára, tehát a végeredmény ez legyen:
=HAHIBA(VKERES($A3;'2016'!$A$1:$ZZ$17);2;HAMIS);0)
ebből a képletből több száz van a munkalapon, tehát a makró dolga az lenne, hogy megkeresse az indirektes részeket, kiolvassa min van BJ$1 (vagy az éppen ott levő hivatkozás) helyén, és azzal lecserélni a stringet az új stringre.
ha van olyan funkció, ami annyit csinál, hogy "megoldja" az indirekt képletrészt, és az eredményt teszi be a helyére, az is tökéletes lenne.
[ Szerkesztve ]
-
fecske13
tag
válasz sajog159 #32268 üzenetére
Szia.
Köszönöm! Ez a megoldás működik. Excel 2010 úgy nyitja meg mint eddig (figyelmeztető ablak...)
Az érdekes még, hogy nekem 2 tök egyforma gépem van itthon (hardver, szoftver ugyanaz) csak annyi a különbség, hogy az egyiket használom napi szinten a másik meg csak van tartaléknak, néha bekapcsolom, frissítés, meg a felhő szinkronizálások lefutnak és kész.
Azon a gépen simán megnyitható, mint eddig, nem kell semmi trükk, tehát valamelyik frissítés ami már ezen a gépen fent van okozhatja a galibát."Az a lényeg, egészség legyen, meg kerozin a repcsibe."
-
DeFranco
nagyúr
nem jó, mert
1) a képletnek csak egy darabját kell cserélnie (a képlet többi része sem egységes)
2) ki kell olvasnia hogy mi van az indirekt hivatkozás részében (a példában BJ$1, de hivatkozhat más cellára is) és azt kell behelyettesítenie, ez változhatigazából az a bajom, hogy betettem egy kimutatást a táblába, 3 szeletelővel, és egyszer csak bazi lassú lett az egész.
[ Szerkesztve ]
-
veterán
sziasztok!
ha egy excel fájl hivatkozásai másik excel fájl celláira mutatnak tudom-e ezeket a hivatkozásokat dinamikusan kezelni? teszem azt a hivatkozott cella az A54, de lehetséges-e az, hogy az 54-es számot a forrásfájl valamely cellájában adjam meg? köszi előre is
"a jövötsajnos nemlehet tudni csakhamárotvagy deakormegmár azajelen"
-
DeFranco
nagyúr
válasz bandus #32274 üzenetére
nézd meg az én issuemat pont alattad/feletted, ha jól értem a kérdésedet, akkor erre az INDIREKT függvény használható, ezzel tudsz "paraméterezetten hivatkozni".
előtte-utána példa is van a hsz-emben.
az INDIREKT hátránya viszont az, hogy munkafüzetek között már nem működik megbízhatóan, ha a forrás-munkafüzet be van zárva.
- ha más az elérési út, tehát már a mappa is eltér, akkor biztosan nem működik
- ha azonos a mappa, csak a file más, úgy emlékszem akkor semha nyitva vannak a munkafüzetek, akkor működik, de ez csak félmegoldás.
munkafüzeten belül viszont kiváló, egyik kedvenc trükköm.
-
veterán
válasz DeFranco #32275 üzenetére
köszi, sajnos ezeknek a kritériumoknak pont teljesülniük kell. de akkor megoldom makróval, nem gond.
amúgy is mindig nagy talány volt számomra ez az indirekt függvény, de most majd leülök otthon, vagy itt holnap és utána nézek kicsit, hogyan is működik, mert azt tudom, hogy igen hasznos tud lenni
"a jövötsajnos nemlehet tudni csakhamárotvagy deakormegmár azajelen"
-
dgabor80
tag
Sziasztok,
Kérlek segítsetek a következő kérdésben: ha egy adott adatsor maximumát kiadja a MAX függvény, hogyan tudnám láthatóvá tenni, hogy melyiket választotta?
Akár az oszlop és sor visszaadásával, akár egy színezéssel...(szinezést mondjuk conditional format-al könnyen meg lehet oldani...)
Köszönöm!
[ Szerkesztve ]
„Nem kell megtenned, a túlélés nem kötelező.” W. E. Deming
-
Delila_1
Topikgazda
válasz dgabor80 #32280 üzenetére
Feltételes formázással.
Jelöld ki az adatokat, ahol ki akarsz emelni formázással egy cellát. Vegyük, hogy ez az A1:A50 tartomány. A felt. formázás képlete=A1=Max($A$1:$A$50)
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
wocsok17
tag
Sziasztok!
Olyan problémám lenne, hogy van egy táblázatom, amiben sorokban vannak adatok, minden sor egyik oszlopában van egy dátum, hogy melyik nap lett hozzáadva.
Az a kérdésem, hogy ezt egy másik munkalapon hogy tudom összeszámoltatni, hogy adott hónapban hány sor lett hozzáadva?
Nem autószűrővel szeretném megoldani. Létezik erre valami függvény, hogy automatikusan kiszedje? -
-
atish15
aktív tag
Sziasztok. Egy olyan kérdésem lenne hogy egy 2010-es excelben készítettem egy árajánlatot. Az oszlopok hogy voltam már kitőltve hogy a Ft betűvel volt a számok után írva. De tudtam vele dolgozni így is, képleteket számolta gond nélkül. Egy 2013 excelben csak értéknek írta ezeket, csak akkor számolt ha kitöröltem a Ft ot a szám után.
Erre van valami megoldás hogy ne kelljen az összes cellát átírni?
-
Delila_1
Topikgazda
válasz atish15 #32287 üzenetére
A CSERE funkcióval könnyen kicserélheted a Ft-ot semmire. Figyelj, hogy keresendő szövegnek " Ft"-ot írj (idézőjelek nélkül), hogy a Ft előtti szóközt is törölje.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Bjørgersson
félisten
válasz Delila_1 #32220 üzenetére
Még egy kérdés: a nyilazott részre lehet valahogy beállítani sortöréssel több sorba formázást? Néztem a diagram tulajdonságainál, de nem nagyon találtam ilyen opciót, pedig gondolom a szememet majd kiszúrja.
As if all this was something more than another footnote on a postcard from nowhere, another chapter in the handbook for exercises in futility...
-
Delila_1
Topikgazda
válasz Bjørgersson #32293 üzenetére
Jelöld ki a területet úgy, hogy az Y tengely feliratai ne legyenek benne.
Fogd meg a bal oldali középső kis négyzetet, és húzd balra.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Bjørgersson
félisten
-
Delila_1
Topikgazda
válasz Bjørgersson #32295 üzenetére
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Bjørgersson #32297 üzenetére
Tedd ki elérhető helyre, ha nincsenek benne nagyon titkos adatok.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
butch3r
senior tag
Sziasztok
Lenne az alábbi macrom (innen szerezve [link]:
Sub ConvertAllShapesToPic()
Dim oSl As Slide
Dim oSh As ShapeFor Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
' modify the following depending on what you want to
' convert
Select Case oSh.Type
Case msoChart, msoEmbeddedOLEObject, msoLinkedOLEObject
ConvertShapeToPic oSh
Case ElseEnd Select
Next
NextEnd Sub
Sub ConvertShapeToPic(ByRef oSh As Shape)
Dim oNewSh As Shape
Dim oSl As SlideSet oSl = oSh.Parent
oSh.Copy
Set oNewSh = oSl.Shapes.PasteSpecial(ppPasteEnhancedMetafile)(1)With oNewSh
.Left = oSh.Left
.Top = oSh.Top
Do
.ZOrder (msoSendBackward)
Loop Until .ZOrderPosition = .ZOrderPosition
End WithoSh.Delete
End Sub
tökéletesen lefut egy bajom van vele csak. A kész beillesztett képeket nem küldi hátra így eltakarnak bizonyos szövegeket. Tud nekem valaki segíteni, hogy mit kéne és hova beírnoma fneti macroba hogy ez is ok legyen?
Ezer köszönet!
Új hozzászólás Aktív témák
- Vírusirtó, Antivirus VPN kulcsok
- Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Windows, Office licencek a legolcsóbban, egyenesen a Microsoft-tól - 2990 Ft-tól!
- Microsoft licencek a KIVÉTELES ÁRAK - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Game Pass Ultimate előfizetések 1 - 25 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN!