Macro eleminare righe precedenti



  • Macro eleminare righe precedenti
    di Den (utente non iscritto) data: 20/11/2013 15:41:27

    Salve, non sono tanto pratico con excel, ho un file con 400000 righe, con due colonne, nella colonna A ci sono dei codici che corrispondono a dei singoli prodotti, invece la colonna B presenta dei codici ean sia interni in una cella che del produttore. Io vorrei avere correlati solo il singolo codice che compare nella colonna A con il singolo codice ean del produttore non quello interno. Il codice ean interno è posto sempre prima rispetto al codice ean del produttore, solo che in alcuni casi c'è solo in codice del produttore e allora in quel caso per evitare che si cancelli intera riga vorrei che non venisse cancellato.

    Es. file

    1 0000098899
    1 1283929028
    2 0000000002
    2 0000000002
    2 1284928483
    3 0000000003
    4 0000000004
    4 1838482937

    Vorrei avere tale risultato

    1 1283929028
    2 1284928483
    3 0000000003
    4 1838482937

    Cioè vorrei avere sempre l ultimo ean che si trova nella colonna B in relazione alla colonna A, senza far saltare nella colonna A nessun numero

    Grazie per la disponibilitá




  • di Raffaele_53 (utente non iscritto) data: 20/11/2013 17:57:12

    Per quello che ho capito (scrive nella colonna B e C in appoggio)
     
    Sub copia()
    Dim X As Long, Y As Long, Uriga As Long, R As Long, RR As Long
    Dim Area As Range, Val1 As String
    Application.ScreenUpdating = False
    Uriga = Range("A" & Rows.Count).End(xlUp).Row
    R = 1
    Set Area = Range("C1:C" & Uriga)
        For X = 1 To Uriga
            Val1 = Left(Cells(X, 1), InStr(Cells(X, 1), " ") - 1)
            Set rigaA = Area.Find(Val1, LookIn:=xlValues, LookAt:=xlWhole)
            If rigaA Is Nothing Then
                Cells(R, 3) = Val1
                Cells(R, 2) = Cells(X, 1)
                R = R + 1
            Else
                RR = rigaA.Row
                Cells(RR, 2) = Cells(X, 1)
            End If
        Next X
        Set Area = Nothing
        Columns("C:C").ClearContents
    Application.ScreenUpdating = True
    MsgBox "Fatto"
    End Sub



  • di den (utente non iscritto) data: 20/11/2013 18:08:03

    Ciao ho provato proprio adesso la macro ma risulta un errore su tale riga

    Val1 = Left(Cells(X, 1), InStr(Cells(X, 1), " ") - 1)

    Grazie per la disponibilità




  • di Raffaele_53 (utente non iscritto) data: 20/11/2013 18:14:25

    Tutti i dati devono avere uno spazio, come nella descrizione che hai dato

    3 0000000003 = 3spazio0000000003
    In caso contrario non saprei come fare. Non credo siano pochi, magari qualcuno sarà
    123spazio00000004. Oppure sposta un allegato con qualche migliao di dati



  • di den (utente non iscritto) data: 20/11/2013 18:30:25

    allego link a dropbox in quanto supera la dimensione massima del forum

    ecco qui dropbox.com/s/ik4qbpn4w832r17/fil%20den.rar

    grazie mille



  • di Raffaele_53 (utente non iscritto) data: 20/11/2013 19:02:26

    Visto che i dati sono in ordine crescente, questa è più veloce.
    Colonne C-D i risultati. Controlla
     
    Sub ricopia2()
    Dim X As Long, Y As Long, Uriga As Long, R As Long, RR As Long
    Application.ScreenUpdating = False
    Uriga = Range("A" & Rows.Count).End(xlUp).Row
    R = 2
        For X = 2 To Uriga
            If Cells(X, 1) <> Cells(X + 1, 1) Then
                Cells(R, 3) = Cells(X, 1)
                Cells(R, 4) = Cells(X, 2)
                R = R + 1
            End If
        Next
    Application.ScreenUpdating = True
    MsgBox "Fatto"
    End Sub



  • di den (utente non iscritto) data: 20/11/2013 20:36:52

    Ho provato adesso e funziona benissimo. sei un grande!!!! grazie ancora per la pazienza......



  • di Den (utente non iscritto) data: 22/11/2013 14:16:47

    Grazie di tutto