Mi a hiba az alábbi makróban? A G oszlopban vannak értékek és azt szeretném, hogy keresse meg a -70-nél kisebb, a -10 és 10 közötti és a 70-nél nagyobb értékű cellákat, majd törölje az egész sort. És ezt tegye meg az összes Sheet-en.
Sub DeleteRows()
Dim i As Long, LR As Long
LR = Cells(Rows.Count, "G").End(xlUp).Row
Sheets("Sheet 1").Select
For i = LR To 3 Step -1
If Cells(i, "G").Value < -70 Or Cells(i, "G").Value > 70 Then
Rows(i).EntireRow.Delete
End If
If Cells(i, "G").Value > -10 And Cells(i, "G").Value < 10 Then
Rows(i).EntireRow.Delete
End If
Next i
Range("A1").Select
Sheets("Sheet 2").Select
For i = LR To 3 Step -1
If Cells(i, "G").Value < -70 Or Cells(i, "G").Value > 70 Then
Rows(i).EntireRow.Delete
End If
If Cells(i, "G").Value > -10 And Cells(i, "G").Value < 10 Then
Rows(i).EntireRow.Delete
End If
Next i
Range("A1").Select
Sheets("Sheet 3").Select
For i = LR To 3 Step -1
If Cells(i, "G").Value < -70 Or Cells(i, "G").Value > 70 Then
Rows(i).EntireRow.Delete
End If
If Cells(i, "G").Value > -10 And Cells(i, "G").Value < 10 Then
Rows(i).EntireRow.Delete
End If
Next i
End Sub
Szia.
Nem próbáltam, de néhány észrevételt tennék :
1. Minden lapon (sheet) ugyanannyi a sorok száma ? Mivel Te mindenhol ugyanannyival számolsz. (LR változó)
2. Van a VBA-ban Sheet.count (vagy valami hasonló) érték is amivel meghatározhatod, hány darab lap van a munkafüzetben. Igy két ciklusban a kód szerintem rövidebbb és érthetőbb lenne. (Az egyik az biztosan for ciklus lesz, szerintem a külső, a másik az nem biztos)
3. A két if-et én egybevonnám, meglehet simán adni <70 vagy >70 vagy -10 és +10 között van, akkor töröljön.
3.1 Ha jól tévedek a törlés után csökken a sorok száma (A for ciklus nem hatékony erre a módszerre), Te pedig egyel növelsz egy 'i' változót és az alapján vizsgálod a következő sort, ami nekem azt jelenti, hogy egy sor vizsgálata kimaradt.
PL. i érétke legyen 2. és tegyük fel hogy a G2-es cellában a feltételnek megfelelő érték van (<-70, >70 vagy -10 és 10 között).
Mi történik ilyenkor ? A makród törli a kettes sort, de az excel automatikusan a 3-as sort beteszi a 2-sor helyére, a következő lépésben a ciklusváltozó értéke (i) növekszik egyel igy 3-ra nő. és megvizsgálja a harmadik sort, de ez már elvileg az eredeti negyedik sor lesz, mert a harmadik sor az most a kettes sorban van. (remélem érthető a dolog). Igy marad ki minden törlés után egy egy sor amit nem elenőrzöl le és amit lehet, hogy törölni kéne.
Hát úgy nagyjából ennyi.
Sok sikert.
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!