-
Fototrend
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
- Milyen egeret válasszak?
- Hardverkiállítás a hónap vége felé közeledve
- Linux kezdőknek
- TCL LCD és LED TV-k
- Reklámblokkolók topikja
- Okosóra és okoskiegészítő topik
- Anime filmek és sorozatok
- Azonnali informatikai kérdések órája
- Projektor topic
- Honor Magic6 Pro - kör közepén számok
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Asus H370 i7 8700K 16GB DDR4 512GB SSD RTX 2060 Super 8GB RAMPAGE Shiva A-Data 650W
- GYÖNYÖRŰ iPhone 12 Mini 128GB Green-1 ÉV GARANCIA - Kártyafüggetlen, MS3640
- ÁRGARANCIA!Épített KomPhone Ryzen 7 9700X 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 14400F 32/64GB RAM RX 9060 XT 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő
), néhány soros munkalappal?


Fferi50
