Macro eleminare righe precedenti
Hai un problema con Excel? 
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
Vuoi Approfondire?