Hirdetés
- Magisk
- Apple iPhone 15 Pro Max - Attack on Titan
- Xiaomi Mi 11 Lite - 4G-vel vagy 5G-vel kéred?
- Milyen okostelefont vegyek?
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Apple iPhone 17 Pro Max – fennsík
- Xiaomi: Android 16 zápor, zivatar
- Samsung Galaxy A56 - megbízható középszerűség
- MIUI / HyperOS topik
- Xiaomi 15T Pro - a téma nincs lezárva
-
Mobilarena
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
- Polgári repülőgép-szimulátorok
- Gumi és felni topik
- Kávé kezdőknek - amatőr koffeinisták anonim klubja
- Vezetékes FEJhallgatók
- ASUS routerek
- Milyen videókártyát?
- exHWSW - Értünk mindenhez IS
- Big in Japan - japán játékokról, kötetlenül
- Sweet.tv - internetes TV
- Képernyős trükkök növelik a notebookok üzemidejét
- További aktív témák...
- Telefon felvásárlás!! Apple iPhone SE (2016), Apple iPhone SE2 (2020), Apple iPhone SE3 (2022)
- ÁRGARANCIA! Épített KomPhone i5 12400F 16/32/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- 154 - Lenovo LOQ (15IRX9) - Intel Core i5-13450HX, RTX 4060
- AKCIÓS! Microsoft Surface Pro 9 i5-1245U 16GB 512GB Kijelzőrepedt!
- Vállalom Xiaomi Okoskamerák szoftveres javíttását
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest
), néhány soros munkalappal?


Fferi50

