Condividi tramite

Regola per eliminare righe

Anonimo
2022-01-17T18:55:11+00:00

Ho un file con 120.000 righe e devo stabilire delle regole per eliminare delle righe.

Ogni 9 righe devo contare il numero di zeri e se il numero di zeri, presenti in queste 9 righe è superiore o uguale a 6, devo eliminare tutte e 9 le righe.

C'è un modo per fare questa operazione, senza dover scorrere tutto il database?

Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2022-01-20T17:43:12+00:00

    Ciao Tania,

    Hai avuto l'opportunità di provare il mio codice?

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento
  2. Anonimo
    2022-01-17T22:27:47+00:00

    Ciao Tania,

    I sei zeri si devono trovare tutti nella stessa colonna, sempre la stessa colonna per tutte le righe.

    Gli zeri sono inseriti come valori.

    Non ci sono celle vuote.

    Se nella colonna macro ci sono 6 zeri o più, le nove righe, che hanno la stessa voce nella colonna place vanno eliminate

    Immagine

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook 
    
    Dim srcSH As Worksheet, destSH As Worksheet 
    
    Dim srcRng As Range, destRng As Range 
    
    Dim arrIn As Variant, arrOut() As Variant 
    
    Dim i As Long, j As Long, p As Long, q As Long 
    
    Dim iCtr As Long, jCtr As Long 
    
    Dim UB As Long, UB2 As Long 
    
    Dim LRow As Long 
    
    Const sFoglio\_Sorgente  As String = **"Foglio1"               '<<=== Modifica** 
    
    Const sFoglio\_Destinazione As String = **"Report"           '<<=== Modifica** 
    
    Const sColonne\_Database As String = **"A:E"                   '<<=== Modifica** 
    
    Const iPrima\_Riga\_Database As Long = **1                        '<<=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    With WB 
    
        Set srcSH = .Sheets(sFoglio\_Sorgente) 
    
        If SheetExists(sFoglio\_Destinazione) Then 
    
            Set destSH = .Sheets(sFoglio\_Destinazione) 
    
            destSH.Columns(sColonne\_Database).ClearContents 
    
        Else 
    
            Set destSH = .Sheets.Add(After:=srcSH) 
    
            destSH.Name = sFoglio\_Destinazione 
    
        End If 
    
    End With 
    
    With srcSH 
    
        LRow = LastRow(srcSH, .Columns(sColonne\_Database)) 
    
        Set srcRng = .Range(sColonne\_Database).Resize(LRow - iPrima\_Riga\_Database + 1).Offset(iPrima\_Riga\_Database - 1) 
    
    End With 
    
    With destSH 
    
        .Range(sColonne\_Database).Resize(1).Value = srcRng.Rows(1).Value 
    
        Set destRng = .Range(sColonne\_Database).Cells(2, 1) 
    
    End With 
    
    arrIn = srcRng.Value 
    
    UB = UBound(arrIn) 
    
    UB2 = UBound(arrIn, 2) 
    
    ReDim arrOut(1 To UB, 1 To UB2) 
    
    For i = 2 To UB Step 9 
    
        iCtr = 0 
    
        For j = 1 To 9 
    
            If arrIn(i + j - 1, UB2) = 0 Then 
    
                iCtr = iCtr + 1 
    
            End If 
    
        Next j 
    
        If iCtr < 6 Then 
    
            For p = 1 To 9 
    
                jCtr = jCtr + 1 
    
                For q = 1 To UB2 
    
                    arrOut(jCtr, q) = arrIn(i + p - 1, q) 
    
                Next q 
    
            Next p 
    
        End If 
    
    Next i 
    
    destRng.Resize(jCtr \* 9, UB2) = arrOut 
    
        Call MsgBox(Prompt:="Fatto", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '-------->>

    Public Function LastRow(SH As Worksheet, _

    Optional Rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If Rng Is Nothing Then 
    
        Set Rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = Rng.Find(What:="\*", \_ 
    
        After:=Rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow < minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '--------->>

    Public Function SheetExists(sSheetName As String, _

    Optional ByVal WB As Workbook) As Boolean 
    
    On Error Resume Next 
    
    If WB Is Nothing Then 
    
        Set WB = ThisWorkbook 
    
    End If 
    
    SheetExists = CBool(Len(WB.Sheets(sSheetName).Name)) 
    

    End Function

    '<<========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel.
    • Salva il file con l'estensione xlsm
    • Alt+F8 per aprire la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento
  3. Anonimo
    2022-01-17T19:43:57+00:00

    I sei zeri si devono trovare tutti nella stessa colonna, sempre la stessa colonna per tutte le righe.

    Gli zeri sono inseriti come valori.

    Non ci sono celle vuote.

    Se nella colonna macro ci sono 6 zeri o più, le nove righe, che hanno la stessa voce nella colonna place vanno eliminate

    Grazie

    0 commenti Nessun commento
  4. Anonimo
    2022-01-17T19:28:28+00:00

    Ciao Tania,

    Ho un file con 120.000 righe e devo stabilire delle regole per eliminare delle righe.

    Ogni 9 righe devo contare il numero di zeri e se il numero di zeri, presenti in queste 9 righe è superiore o uguale a 6, devo eliminare tutte e 9 le righe.

    C'è un modo per fare questa operazione, senza dover scorrere tutto il database?

    Quante colonne sono incluse nei dati?

    Tutti gli zeri dovrebbero essere trovati in una data colonna o i sei zeri possono trovarsi ciascuno in colonne diverse di ogni nove righe del database?

    Gli zeri sono inseriti come valori o sono il risultato di formule?

    Le celle vuote devono essere considerate zeri?

    Per aiutarci a comprendere la tua richiesta, forse potresti pubblicare uno screenshot di esempio.

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento