Keresés

Részletes keresés

Redlac Creative Commons License 2010.07.09 0 0 12279
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("B12:B65000")) Is Nothing Then
Target.Value = Date
Cancel = True
End If

If Not Intersect(Target, Range("Q12:AC65000, G12:G65000, K12:K65000")) Is Nothing Then
Target.Value = "IGEN"
Cancel = True
End If

End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("K12:K65000")) Is Nothing Then
Target.Value = "NEM"
Cancel = True
End If

If Not Intersect(Target, Range("G12:G65000")) Is Nothing Then
Selection.ClearContents
Cancel = True
End If

End Sub


EDDIG ezek futottak vánszorogva. Aztán a tegnapi hóka-móka (amit ajánlottál) után, már rendesen futnak.

Aztán ezek mellett vannak még ezek:
Sub Gomb9_Kattintás()
Range("A12:AD65000").Select
Selection.Sort Key1:=Range("A12"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A12").Select

Ez(ek) a fejlécgomb(ok) sorba rendezik az adott oszlop alapján az egész táblát. Ez is kínkeserves volt. Ez elé, illetve mögé nem írtam semmit, de már ez is normálisan fut.
Törölt nick Creative Commons License 2010.07.09 0 0 12278

Az Application.EnableEvents = false volt a ludas, ezt ki kell venni, illetve a kattintások közötti feldolgozási rész eljére tenni (a végén pedig visszakapcsolni). Egyébként még be lehet illeszteni a képernyő frissítések ki/be kapcsolását is, ez is lassíthat.

 

Application.ScreenUpdating = False 'kikapcsolás

Application.ScreenUpdating = True 'bekapcsolás

 

Mondjuk, a leghatékonyabban úgy tudnánk segíteni, ha mutatnál kódot (kódrészletet) ami lassan fut. 

Előzmény: Redlac (12277)
Redlac Creative Commons License 2010.07.08 0 0 12277
Na, ezt most nem értem.

1. Beírtam a kérdéses makró elejére és végére, amit ajánlottál.
2. Erre gyorsan (nem vacakolva) beírt egyet, de utána a dupla klikk, illetve maga a makró nem működött.
3. Mentettem, bezártam
4. Újra megnyitottam, a dupla klikk és a makró ugyanúgy nem működött.
5. Töröltem az általad leírtakat a makró elejéről-végéről, majd ment/bezár
6. Megnyitottam újra, és tökéletesen működik, semmi tökölés, villámgyorsan ír be, de az eredeti állapothoz képest (elvileg) nem változott semmi.
Előzmény: Törölt nick (12275)
Törölt nick Creative Commons License 2010.07.08 0 0 12276
Érdemes lehet szemügyre venni magukat a makrókat is.
Általában lehet a meglévőnél hatékonyabb algoritmust találni.
Tipikus hiba, amikor ciklusban sorra Select-áljuk a cellákat. Semmi értelme, viszont hálából 10-szeres lassulást okoz.
Előzmény: Redlac (12272)
Törölt nick Creative Commons License 2010.07.08 0 0 12275
Ha sok a képlet a munkalapon, esetleg érdemes kikapcsolni a képletek újraszámolást, mert minden változáskor ez lefut. Aztán még meg lehet próbálni az események futását is kikapcsolni a makró futásának idején, hátha ez is lassít valamit:

Application.EnableEvents = False ' ne fussanak az események
Application.Calculation = xlCalculationManual 'ne számolja újra a képleteket

Ne felejtsd el a nakró végén ezeket visszakacsolni:

Application.EnableEvents = True ' fussanak az események
Application.Calculation = xlCalculationAutomatic 'mehet a képletek újraszámolása


Előzmény: Redlac (12272)
Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12274
Már megint lenyelte az index a hozzászólásomat? Pedig megjelent a nevem a kedvencekben.
Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12273
Ezen a ponton már érdemes foglalkozni az algoritmusok hatékonyságával. Például egy rendezésnél, aminek a lépésszáma az elemszámmal közel négyzetesen nő, bizony előfordulhat ez. Tehát érdemes körülnézni a rendezési algoritmusok elméletében.
Előzmény: Redlac (12272)
Redlac Creative Commons License 2010.07.08 0 0 12272
Azért nem, mert egy "üres" lapot tölt ki a felhasználó adatokkal. Ebben az "üres" lapban vannak adatbevitelt könnyítő makrók, valamint sorba rendező makrók amiknek természetesen az egész lapon kellene működniük.

De, ha bármilyen okból több ezer sort vizsgálnánk (mert szükséges), akkor természetes ez a lassulás?
Előzmény: Törölt nick (12259)
Törölt nick Creative Commons License 2010.07.08 0 0 12271
Tiszta igaz. Még szerencse, hogy lehet saját függvényt írni és ezzel megoldani az érték pontos meghatározását.
Előzmény: Sánta Kutya (SK) (12270)
Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12270
Meglehetősen bonyolult megoldás csak azért, mert a tervező kifelejtett egy teljesen logikus és kézenfekvő metódust.
Előzmény: Törölt nick (12269)
Törölt nick Creative Commons License 2010.07.08 0 0 12269
Jó a kérdésed, őszintén szólva, most kipróbáltam, szóval, ha az adott oszlop 65536. sorában van valami adat, akkor is az ettől felfelé az első értéket képviselő sort adja eredményül, vagyis, ebben az esetben nem ad jó eredményt...

Jó, hogy felvetetted, használat előtt ezentúl már ezt is vizsgálni fogom pl. így:

If Range("A" & Rows.Count) = "" Then
MsgBox "Az 'A' oszlop utolsó sora: " & Range("A" & Rows.Count).End(xlUp).Row
Else: MsgBox "Az 'A' oszlop utolsó sora: " & Rows.Count
End If
Előzmény: Sánta Kutya (SK) (12268)
Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12268
Köszönöm, így már teljesen világos. Ha én írtam volna ezt a Basicet, lenne valami egyszerűbb megoldás, amit megérteni is egyszerűbb lenne, mondjuk Last néven. :-) Jut eszembe, ez a megoldás akkor is működik, ha a 65536. sorban is van adat? Mert a lenti kísérletem nem erre utal.
Előzmény: Törölt nick (12267)
Törölt nick Creative Commons License 2010.07.08 0 0 12267

Jimmy válaszát alapul véve:

 

Rows.Count = a munkalap utolsó sorának száma (Excel2003 esetében ez 65536)

End(xlUp).Row = az utolsó sorhoz képest felfelé az első értéket képviselő sor

Range("A" & Rows.Count).End(xlUp).Row = az "A" oszlopban az utolsó értéket képviselő sor, és mindegy, hogy előtte vannak üres sorok is vagyis nem folytonos a kitöltés.

 

 

Előzmény: Sánta Kutya (SK) (12265)
madbazsi Creative Commons License 2010.07.08 0 0 12266

Sziasztok!

 

Valakinek van ötlete, hogy megvalósítható-e a következö excelben?

VAn egy értékem (szám), amelynek kombinációit keresem egy mátrixban.

Pl: érték=24,5

mátrix: 12  11  13,45  21  5,5  7

akkor kijelölné: a 12 + 5,5 + 7-t??

Köszi

Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12265
Köszi, így már tisztább.
Előzmény: Törölt nick (12264)
Törölt nick Creative Commons License 2010.07.08 0 0 12264
Hát igen, nehéz egy mondatban összefoglalni, de pontosan arról van szó, amit leírtál. Talán azt lehetne mondani, hogy az aktuális összefüggő adattartomány adott irányba eső végére ugrik, ha pedig éppen a végén vagy, akkor a következő, adott irányba eső összefüggő adattartomány közelebbi végére.

A teljességhez hozzátartozik, hogy makróban az End művelet az aktív cellát nem viszi sehová, nincs is semmi köze az aktív cellához. Csak átdefiniálja a tartományt, amelyre a tényleges művelet majdan vonatkozni fog. Ez a sor

Range("C122")

önmagában semmi, csak egy tartománydefiníció. Ehhez adódnak hozzá módosítók, mint pl. az End, Offset, Resize, stb.

Range("C122").End(xlUp)

A Range("C122") -höz képest megkeresi a következő adattartomány-határt, és ez lesz a módosult tartománydefiníció. Módosítókat halmozni is lehet, pl

Range("C122").End(xlUp).Offset(1).Resize(2, 4)

És a végén jön a tulajdonképpeni művelet:

Range("C122").End(xlUp).Offset(1).Resize(2, 4).Copy
Előzmény: Sánta Kutya (SK) (12262)
drog Creative Commons License 2010.07.08 0 0 12263

tudom macerás, nem automata, de megoldás, miszerint, ha pl a böngészőben az éppen olvasott weblapot mentés másként címmel lementitek, akkor az excel simán meg tudja nyitni, mindent lehet vele csinálni.

hogy kevesebbet kelljen mentegetni, itt akár 500 hozzászólás is lehet egy filécske.

 

vagy van pl. winhtrack nevű oldalletöltögető progi, ami az egész, összes hozzászólást lementi, persze be kell állítani, hogy ne keressen túl távoli linkek után, tehát ne töltsön az igényeidnek mélyebb fastruktúrát.

ilyesmi oldal letöltögető természetesen elég sok féle van, ki melyikre esküszik.

 

a lényeg, hogy a bármimódon lementett html, vagy mht, vagy bármi webformátumot az excel simán kezeli.

Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12262
Ez kicsit zavaros. Ha üres cellán állok, felugrik a fölötte levő legalsó adatra. Ha nem üres a cella, de felette üresek vannak, akkor felugrik a "luk" feletti legalsó adatra. Ha viszont folytonosak az adatok, akkor átugorja a felette levőket, és a folyamatos adattartomány legfelső nem üres cellájára ugrik. Ha nincs a cella fölött adat, akkor meg az oszlop tetejére.
Előzmény: Törölt nick (12261)
Törölt nick Creative Commons License 2010.07.08 0 0 12261
Tetszőleges cellán állva tartsd lenyomva a Ctrl billentyűt, aztán nyomd meg a felfelé nyilat. Ezt csinálja az End(xlUp).
Előzmény: Sánta Kutya (SK) (12260)
Sánta Kutya (SK) Creative Commons License 2010.07.08 0 0 12260
Ezt egy kicsit elmagyaráznád? Mi az az End(xlUp)?
Előzmény: Törölt nick (12259)
Törölt nick Creative Commons License 2010.07.07 0 0 12259

Miért nem addig vizsgálsz, ameddig egy adott oszlopban van adat?


Pl. az "A" oszlopban ebben a sorban van az utolsó adat : Range("A" & Rows.Count).End(xlUp).Row

Előzmény: Redlac (12258)
Redlac Creative Commons License 2010.07.07 0 0 12258
A táblázatban lévő képletek 65.000 sorig vizsgáltak. Ezt visszavettem 5.000 sorra, így jelentősen felgyorsult. De ezt nem is gondoltam volna.

De így, ha valóban több ezer soros táblázatban kellene számolni, akkor az ilyen lassú lenne?
Előzmény: Redlac (12257)
Redlac Creative Commons License 2010.07.06 0 0 12257
Segítség!!!

A makrók futása iszonyatosan lelassult egy táblázatban.

Ha duplán kattintok (mert a dátumot íratom be), akkor a lap alján kiírja, hogy: "számítás (2 processzor):" majd százalékérték emelkedik 100%-ig. Amikor 100 lesz, akkor fejeződik be a makró futása, de ez vagy 6 másodperc.

3-4 egyéb makró van benne, meg alig pár adat, még csak most kezdtem felépíteni.
2003 és 2007 alatt is produkálja. Más dokumentumban lévő makrók rendben futnak.
Sánta Kutya (SK) Creative Commons License 2010.07.05 0 0 12256
Azt hiszem, le is fagyna két hétre a gépem...
Egyszer már nekiláttam fejleszteni egy programot, amelyik Pegasus Mail formátumú levelekké konvertál egy topikot, és így szét lehet dobálni folderekbe, csak aztán leálltam. Igazából azt hiszem, a wiki az ilyen szerteágazó ismeretek rendszerezésének a korszerű módja, a másik gépemen van is már telepítve egy saját wiki, csak az éppen megmurdelt alaplapilag.
Előzmény: tbando (12254)
tbando Creative Commons License 2010.07.05 0 0 12255
Nagy előnye ennek, hogy az exceltáblában aztán nem csak tárgyszavaidra, de az eredeti szöveg szótöredékeire is tudsz keresni.
Előzmény: tbando (12254)
tbando Creative Commons License 2010.07.05 0 0 12254
A tervedhez adok egy ötletet. Hívd be az egész topikot, van ennek valami módja, valaki már megírta nekem, csak már elfeljtettem hova tettem. Majd Ctrl+C CTRL V-el másold át Éxcelbe Egy bekezdés-egy cella. Ami jól olvasható, ha rámutatsz az egérrel. Persze állíthatsz is a cellaméreten, de az babrásabb. Na most ezt végigolvasva a szomszédos cellában megjelölheted a téged érdeklő postokat, akár le is tárgyszavazhatod őket, majd a téged nem érdeklőket törlöd. Elötte persze még érdemes a sorokat sorszámmal ellátni, hogy törlés után a sorrendet helyreállíthasd.
Előzmény: Sánta Kutya (SK) (12246)
tbando Creative Commons License 2010.07.05 0 0 12253
Találkoztatok már azzal a buggal, ami az Autamatikus javítások-ra való klikkelésnél nem a megfelelő lapra, hanem a Windows XP filekeresőjére ugrik (Excel 2003-ban). Mert nálam momentán ez van, és elég bosszantó. Ha nálatok jelentkezne ilyesmi, hogy próbálnátok meg a helyreállítani?

Herold Creative Commons License 2010.07.03 0 0 12252
Na ez elég láma kérdés volt, megtaláltam a MA() függvényt. :)
Előzmény: Herold (12251)
Herold Creative Commons License 2010.07.03 0 0 12251
Van valami mód makrók nélkül arra, hogy megvizsgáljuk, a mai dátum meghaladta-e az egyik cellában beállított dátumot? Hogy lehet lekérdezni az épp aktuális dátumot?
Sánta Kutya (SK) Creative Commons License 2010.07.02 0 0 12250
Gondolom, igen, ugyanezzel a logikával.
ÉV(A1:A100)=2010 -- ez egy logikai kifejezés, amely az igazhoz egyet, a hamishoz nullát rendel. Ha a B1 helyébe azt írod, hogy (B1:B100="B"), akkor valósznűleg minden B betűhöz egyet rendel, és megkapod a darabszámot összegként.
Előzmény: Redlac (12249)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!