Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- ricsi99: 6. Genes alaplap tündöklése kontra MS/Zintel korlátozásai
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Gurulunk, WAZE?!
- Graphics: Telefonvásárlási kálváriám....avagy clickbait cím: Horror a hardveraprón
- Parci: Milyen mosógépet vegyek?
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- bambano: Bambanő háza tája
-
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
-
-
Fferi50
Topikgazda
válasz
mulli86
#44095
üzenetére
Szia!
Próbáld ki ezt a makrót légy szíves:Sub rendezo()Dim sh1 As Worksheet, sh2 As Worksheet, cl As Range, cl2 As Range, xo As Byte, xu As Long, sh3 As Worksheet, x As Integer, oszlop, drb As Long, ido As DateApplication.ScreenUpdating = FalseSet sh1 = Sheets("hiba_kod")Set sh2 = Munka2 'Most ez az adatok munkalapja Névvel is hivatkozhatsz rá, nekem túl hosszú volt.Set sh3 = Worksheets.Add(after:=Sheets(1))sh3.Name = "hiba"sh3.Cells(1, 1).Value = "Teszt"xu = 3: xo = sh2.UsedRange.Rows(5).Columns.Countsh2.UsedRange.Rows(5).Copy Destination:=sh3.Cells(2, 1)ido = Time()For Each cl In sh1.UsedRange.Rows(1).Cells ' a hiba-kódok listájaApplication.StatusBar = cl.Valueoszlop = Application.Match(cl.Value, sh2.Rows(5), 0)'melyik oszlopban van?If Not IsError(oszlop) Thenx = 1 'végig megyünk a hibakódok értékeinDodrb = Application.CountIf(sh2.Columns(oszlop), cl.Offset(x, 0)) 'hány hibás tétel vanSet cl2 = sh2.Cells(1, oszlop)Do While drb > 0Set cl2 = sh2.UsedRange.Columns(oszlop).Find(what:=cl.Offset(x, 0).Value, LookIn:=xlValues, Lookat:=xlWhole, after:=cl2)If Not cl2 Is Nothing ThenIf sh2.Cells(cl2.Row, xo + 2).Value <> "x" Then 'ha még nincs másolvash2.UsedRange.Rows(cl2.Row).Copy Destination:=sh3.Range("A" & xu) 'másoljuksh2.Cells(cl2.Row, xo + 2).Value = "x" 'és jelöljük a másolástxu = xu + 1End Ifdrb = drb - 1End IfLoopx = x + 1Loop While cl.Offset(x, 0) <> ""End IfDoEventsNextApplication.ScreenUpdating = TrueApplication.StatusBar = FalseMsgBox "Futási idő indulás: " & Format(ido, "hh:mm:ss") & " vége:" & Format(Time(), "hh:mm:ss")End SubMit csinál?
A hiba-kod munkalapon levő kódokon megy végig. Megszámolja, hogy az adatok között az adott oszlopban hány hibás tétel fordul elő. Ezeket átmásolja. Mivel egy sorban több hiba is lehet, a duplázás elkerülése érdekében az átmásolt sor végére tesz egy x-et.
A végén pedig kiírja, mikor indult és mikor fejezte be.
Ha túl hosszúra nyúlna az idő akkor Ctrl+Break megállítja (ezért van benne a DoEvents sor. Ekkor az éppen aktuális sornál megáll. Meg lehet nézni az eredményt és leállítani vagy folytatni, ahogyan éppen szeretnéd.
Remélem, nem lesz túl lassú.
Ha ismételten tesztelsz, ne felejtsd el az x-es oszlopot törölni!
Üdv. -
Mutt
senior tag
válasz
mulli86
#44069
üzenetére
Szia,
A feltett fájlt megnézve makró mentesen Power Query-vel simán megoldható.
Importálni kell a hibakódokat és a CSV fájlt, majd annyiszor kell lekérdezések összefűzését használni ahány oszlopban akarod a hibakódot keresni. Kibontás és utána egy egyéni oszlopban megnézni, hogy hány esetben lett az eredmény üres (null). Ahol csak null volt azok hibamentes sorok vagyis dobhatók és a maradékot lehet betölteni egy új munkalapra.
Kb. 30 perc alatt megvan a Power Query aki jártas már benne és utána újrahasznosítható más fájlokkal.
Természetesen a Power Query-t tanulni kell, ami idő, de Youtube-on van jó sok segítség.4 oszlop csekkolása kb. így néz ki.
üdv
-
Fferi50
Topikgazda
válasz
mulli86
#44067
üzenetére
Szia!
"Temélem érthető voltam"
Majdnem...
Tehát
1. A hiba-kód munkalapon levő hibakódokat kell keresni a hibalistában (adatállományban)
2. Az hiba-kód munkalapon a hibakód oszlopában kell megkeresni az adatállományban az adott hibakódhoz tartozó értéket - ha benn van, akkor át kell tenni a hibalistára, ha nincs, akkor nem.
3. A hiba-kód munkalapon nem megtalálható hibakódokkal nem kell foglalkozni.
Pl.
ECP_block_Error
0b00
0b01
0b11
Ha az adatállomány x. sorában az ECP_block_Error cellában a fenti 3 érték valamelyike van, akkor megy a hibalistába, egyébként nem.
Jól gondolom?
Üdv. -
Fferi50
Topikgazda
-
Mutt
senior tag
válasz
mulli86
#44058
üzenetére
Szia,
1. lastsor típusa Long legyen, mert az integer csak 32 ezer sorral fog bírni.
2. A hibaname és oszlopnumber a két for cikluson belül van inicilaziálva ami nem jó, hozd ki őket a for-ok elé.
3. Variant a hibaname típusa, de közben a cella értékét ellenőrzöd. Jobb lenne egy specifikus típust használnod pl. Double ha számok érdekelnek, vagy String ha szöveg.
4. Ha sokat dolgozol egy lapon akkor érdemes With ... End With-et használnod.
pl.With Worksheets(1)
lastsor = .Range("A5").End(xlDown).Row
For x ...
For y ...
hibaname = .Cells(5, y)
For p ...
If hibaname = Sheets(3).Cells(1,p) then
....
End If
Next p
Next y
Next x
End With5. A GoTo rész biztos hogy kell? Miért nem teszed az IF-be az ottani dolgokat?
6. Sokat gyorsít a "villódzás" kikapcsolása.
Application.ScreenUpdating = False a for ciklusok elé, majd = True a legvégén.üdv
-
Fferi50
Topikgazda
válasz
mulli86
#44060
üzenetére
Szia!
Fel kell tenni valahova - pl. googlemaps, Data.hu, stb. -, ide pedig a linket.
Az biztos, hogy a lastsor deklarációd nem jó. Az integer típus az csak 32767-ig terjedhet.
Helyette a Long adattípust kell használni.
"Átmásolt 97 sort a 100-ból, pedig nem is szerepelnek benne olyan értékek, amikre keresek."
Nyilván nem egészen korrekt a feltételek ellenőrzése. Vagy a makró szerkezete. Nem egészséges ugrásokat használni.
Üdv. -
Mutt
senior tag
válasz
mulli86
#43960
üzenetére
Szia,
.. több csv (excel alapú) adatbázist. 59 excel, excelenként változó mennyiségű sor, az oszlopok száma megegyezik és az oszlopokon belül található attribútumok is.
Ha Excel 2010 vagy frissebbed van, akkor Power Query fog tudni neked segíteni.
Youtube-on van pár video róla, pl. több fájl fedolgozása.Ha kell segítség a feladathoz dobd fel a fórumra.
üdv
-
bteebi
veterán
válasz
mulli86
#21240
üzenetére
Törölni kell az üres (y) értékekhez tartozó adatcellák (x) értékét. Vegyük úgy, hogy az A sorban vannak az x értékek, a B-ben pedig az y értékek. Ez a makró megoldja a gondot:
Sub diagram()
Dim sor As Long, usor As Long
usor = Range("A" & Rows.Count).End(xlUp).Row
For sor = 1 To usor
If Range("B" & sor) = "" Then
Range("A" & sor) = ""
End If
Next sor
End SubAnnyi, hogy csak akkor működik, ha már ábrázoltad a diagramot, mivel ha az ábrázolás előtt futtatod le, akkor nem lesz egybefüggő az ábrázolandó tartomány, több tartományt pedig (tudtommal) nem tudsz egyben ábrázolni. Ha esetleg valamiért a jövőben még szükséged lenne az üres y értékekhez tartalmazó x értékekre, akkor (a fenti példánál maradva) érdemes az A oszlopot átmásolnod a B-be, elkészíteni a diagramot a B és a C oszloppal, majd a B oszlopon elvégezni a szűrést a makróval.
-
Delila_1
veterán
Új hozzászólás Aktív témák
Hirdetés
- Filmvilág
- Diablo IV
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Jelentősen meglazítja a gyeplőt a Windows 11 frissítéseknél a Microsoft
- Májusban már megérkezhet a Xiaomi 17T
- Azonnali VGA-s kérdések órája
- Elektromos cigaretta 🔞
- VR topik
- Épített vízhűtés (nem kompakt) topic
- További aktív témák...
- PC Game Pass előfizetés
- Game Pass Ultimate előfizetések 3 - 36 hónapig azonnali kézbesítéssel! 13 hónap ultimate - 50.000 ft
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- HP. Laptop. i5. Model: 15-da1002nq
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Eladó Apple MXQT2D/A Magic Keyboard Német / 12 hónap jótállás
- BESZÁMÍTÁS! ASUS B760 i7 13700K 32GB DDR5 512GB SSD RTX 4070 12GB Aerocool P500B Digi ARGB 750W
- Xbox Game Pass Ultimate előfizetések kedvező áron
- BESZÁMÍTÁS! ASRock B760 i5 14600KF 32GB DDR5 500GB SSD RX 9070 16GB be quiet! Pure Base 500DX 750W
- HIBÁTLAN iPhone 12 Pro Max 256GB Silver -1 ÉV GARANCIA - Kártyafüggetlen, MS4306, 100 AKKSI
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
), néhány soros munkalappal?


Fferi50