Hirdetés
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- balojazz: Szódakészítés üzembiztosan és olcsón! Figyelem, csak hardcore szódázóknak!
- gban: Meghalt Chuck Norris
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- Luck Dragon: MárkaLánc
- Parci: Milyen mosógépet vegyek?
- aquark: Zsebszámológépek
-
LOGOUT
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
hallgat
#18980
üzenetére
Hello,
A megoldásom egy másik módszert használ, az eredeti lapból csak a hasznos (ahol a cella nem üres vagy 0) adatokat átemeli egy másik lapra (a neve output, de lent állíthatod ezt).
Egyszerre 3 sor hasznos adatát egy tömbben tárolja. A sor végén pedig kiíratja a másik lapra a tömböt. Utána 3 sorral feljebb megy és azon is végig megy és kiír.
Nekem 11-16 másodperc alatt lefut egy 1422x190-es táblán, remélem nálad is rendben fog menni.
Kommenteltem, hogy könnyen javítható legyen.Sub Torol3asaval()
Dim arrEredmeny() 'dinamikus tömb az értékek tárolásához
Const LastRow As Integer = 1422 'utolsósor
Const LastColumn As Integer = 190 'utolsóoszlop
Dim vRow As Long 'változó a vizsgált sorok nyomonkövetéséhez
Dim vColumn As Long 'változó a vizsgált oszlopok nyomonkövetéséhez
Dim vHits As Long 'változó a soronként a feltételeknek megfelelő eredményekhez
Dim i As Long
Dim vStartTime
Dim wsOutput As Worksheet
Const wsName As String = "output" 'ide tesszük az eredményt
Dim wsActiveSheet As String
'nézzük meg mennyi idő alatt fut le
vStartTime = Time
'elmentjük az eredeti lapot
wsActiveSheet = ActiveSheet.Name
'megnézzük hogy van-e a keresett névvel munkalap a füzetben
For i = 1 To Sheets.Count
If Sheets(i).Name = wsName Then vHits = 1
Next i
'ha nincs akkor létrehozzuk a lapot, különben megnyitjuk
If vHits <> 1 Then
Set wsOutput = Sheets.Add
wsOutput.Name = wsName
Else
Set wsOutput = Sheets(wsName)
wsOutput.Cells.Clear
End If
'visszamegyünk az eredti lapra
Sheets(wsActiveSheet).Activate
'kikapcsoljuk a képernyő frissítést hogy gyorsabb legyen
Application.ScreenUpdating = False
'utolsó sortól elindulunk vissza
For vRow = LastRow To 1 Step -3
'töröljük a tömb tartalmát
Erase arrEredmeny
'ide gyűjtük hogy hány oszlop van ahol nem üres vagy 0 van az utolsó sorban
vHits = 0
'végig megyünk a sor oszlopain
For vColumn = 1 To LastColumn
'ha az érték nem üres vagy nulla akkor egy tömbbe elmentjük a sor és feletti 2 értéket
If Cells(vRow, vColumn).Value <> 0 And Cells(vRow, vColumn).Value <> "" Then
'növeljük a sikeres találatok számlálóját
vHits = vHits + 1
'átméretezzük a tömböt hogy új találatokat is tudjon tárolni
ReDim Preserve arrEredmeny(1 To 3, 1 To vHits)
arrEredmeny(1, vHits) = Cells(vRow - 2, vColumn).Value
arrEredmeny(2, vHits) = Cells(vRow - 1, vColumn).Value
arrEredmeny(3, vHits) = Cells(vRow, vColumn).Value
End If
Next vColumn
'kiírjuk a találatokat, ha van mit
If vHits Then
'az első 3 sor elé újabb 3 sort szúrunk be
wsOutput.Rows("1:3").Insert Shift:=xlDown
For i = 1 To vHits
With wsOutput
'az első 3 sorba beírjuk a korábbi találatokat
.Cells(1, i) = arrEredmeny(1, i)
.Cells(2, i) = arrEredmeny(2, i)
.Cells(3, i) = arrEredmeny(3, i)
End With
Next i
End If
Next vRow
'visszakapcsoljuk a frissítést
Application.ScreenUpdating = True
Debug.Print "Futási idő: " & Format(Time - vStartTime, "s") & " sec"
End Subüdv
Új hozzászólás Aktív témák
- MEGA AKCIÓ! - Jogtiszta Windows - Office & Autodesk & CorelDRAW - Azonnal - Számlával - Garanciával
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - 15% AKCIÓ
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem.
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
- ÁRGARANCIA!Épített KomPhone Ryzen 7 9800X3D 64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- Gamer PC-Számítógép! Csere-Beszámítás! R5 3600 / RX 5700XT / 16GB DDR4 / 500 SSD + 1TB HDD
- Apple iPhone 13 Pro Max /128GB / Kártyafüggetlen / 12Hó Garancia / Akku:83%
- ÚJ Apple Airpods Pro 3 - www.stylebolt.hu - 1 Év Apple garancia - 27 százalékos Áfá-s száma !!!!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Fferi50