Condividi:        

Formule macro excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Formule macro excel

Postdi Denny1986 » 20/11/13 01:07

Salve a tutti ragazzi, purtroppo non sono tanto esperto di excel, ma avrei un problema in quanto non riesco a risolvere tale dilemma: ho due colonne di cui nella prima colonna (A) ci sono dei codici numerici che vanno da 1 a 365000, ogni codice rappresenta un articolo, nella seconda colonna (B) invece ci sono i codici ean (codici che mi interessano) e codici strani che non interessano che iniziano con molti zeri o sono molto brevi costituiti da 2/3/4 numeri o sono inferiori a 13 numeri come deve essere un codice ean. Ogni codice della colonna A viene associato a uno o più codici della colonna B. io vorrei solo che il codice della colonna A sia associato solo al codice ean (contenete nella colonna B) senza che mi associ anche gli altri codici anzi che me li cancelli con i rispettivi codici associati.

Es.

Colonna A Colonna B

1 00000002376n0
1 0009834212343
2 0000007373459
2 0027465281937
3 20
3 0283774777472
3 028377477747

Si potrebbe creare una macro del genere: "cancella tutti i codici della colonna B che sono inferiori a 13 numeri o che contengono delle lettere o che iniziano con 5 zeri, e insieme a tali codici si devono cancellare anche i rispettivi codici della colonna A". In questo modo avrei solo nella colonna A i numeri in ordine (senza doppioni) e nella colonna B solo un codice ean associato per ogni numero.


Grazie a tutti per la disponibilità
Vi ringrazio

Attendo
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Sponsor
 

Re: Formule macro excel

Postdi Flash30005 » 20/11/13 01:31

Fai prima una copia del file (per sicurezza)

e poi prova questa macro
Codice: Seleziona tutto
Sub EliminaRighe()
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR = UR To 2 Step -1
Stringa = Range("B" & RR).Value
If Len(Stringa) < 13 Then Rows(RR).Delete
If Left(Stringa, 5) = "00000" Then Rows(RR).Delete
If IsNumeric(Stringa) Then GoTo SaltaRR
Rows(RR).Delete
SaltaRR:
Next RR
End Sub


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 10:05

Grazie per la risposta immediata, purtroppo mi cancella anche interi codici ad esempio sui primi 20 codici mi cancella tutti i codici 10 (che si riferiscono ad un prodotto) della colonna A e non mi lascia neanche uno in abbianamento all ean della colonna B

File:

CodLungo BarCode
1 - 10
1 - 8173093016189
2 - 20
2 - 8173093016165
3 - 30
3 - 8173093024641
4 - 40
4 - 8173093016219
5 - 50
5 - 8173093024658
6 - 60
6 - 8173093044717
7 - 70
7 - 8173093044724
8 - 80
8 - 8173093044731
9 - 90
9 - 8173093044748
10 - 00000000000A0
10 - 4901780916375
11 - 00000000000B0
11 - 4901780947430
12 - 00000000000C0
12 - 4901780967155
13 - 00000000000D0
13 - 4901780986279
14 - 0
14 - 4905524352030
15 - 00000000000F0
15 - 4905524351972
16 - 00000000000G0
16 - 4905524352009
17 - 00000000000H0
17 - 4905524302523
18 - 00000000000I0
18 - 4905524302561
19 - 00000000000J0
19 - 4901780916412
20 - 00000000000K0
20 - 4901780624607
20 - 4901780867158

Se io eguo tale macro mi esce questo

CodLungo BarCode
1 8173093016189
2 8173093016165
3 8173093024641
4 8173093016219
5 8173093024658
6 8173093044717
7 8173093044724
8 8173093044731
9 8173093044748
13 4901780986279
14 4905524352030
20 4901780867158

e vengono cancellati 10-11-12-15-16-17-18-19


Grazie ancora per la disponibilità

Attendo
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Flash30005 » 20/11/13 11:30

Si in effetti in certe condizioni può eliminare righe valide
Ho modificato la macro e la ripropongo
Codice: Seleziona tutto
Sub EliminaRighe()
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR = UR To 1 Step -1
Stringa = Range("B" & RR).Value
If Len(Stringa) < 13 Or Left(Stringa, 5) = "00000" Then
Rows(RR).Delete
GoTo SaltaRR
End If
If IsNumeric(Stringa) Then GoTo SaltaRR
Rows(RR).Delete
SaltaRR:
Next RR
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 11:49

grazie mille per la risposta! mi elimina tutto quello che deve eliminare, adesso però mi si è creato un altro problema o meglio ho notato questa cosa:

cerco di spiegare al meglio

avendo colonna a e b vengono a crearsi casi come questo:

20 4901780624607
20 4901780867158

61 8562007802
61 8562007819

e via dicendo

esiste una macro che mi permetta di cancellare la prima (il numero più piccolo)?
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Flash30005 » 20/11/13 13:10

No, non esiste una macro ma bisogna crearla :D

Possiamo aggiungere un successivo ciclo for.. next alla precedente ed eliminare queste righe "doppioni"
ma quante ce ne possono essere, 2, 3 o più?

Per il momento usa questa
Codice: Seleziona tutto
Sub EliminaRighe()
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR = UR To 1 Step -1
Stringa = Range("B" & RR).Value
If Len(Stringa) < 13 Or Left(Stringa, 5) = "00000" Then
Rows(RR).Delete
GoTo SaltaRR
End If
If IsNumeric(Stringa) Then GoTo SaltaRR
Rows(RR).Delete
SaltaRR:
Next RR

UR = Range("A" & Rows.Count).End(xlUp).Row
For RR1 = UR To 2 Step -1
Num1 = Range("B" & RR1).Value
Num2 = Range("B" & RR1 - 1).Value
If Range("A" & RR1).Value = Range("A" & RR1 - 1).Value Then
If Num1 <= Num2 Then Rows(RR1).Delete
If Num1 > Num2 Then
Rows(RR1 - 1).Delete
RR1 = RR1 - 1
End If
End If
Next RR1


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 13:25

Il file è costiuito da 365000 righe, ci sono tanti doppioni

Grazie per tutto
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Flash30005 » 20/11/13 13:36

allora commenta o elimina questa riga
Codice: Seleziona tutto
RR1 = RR1 - 1

che si trova nella seconda parte della macro postata per ultimo

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 13:42

Non c'è un metodo per effetture tale lavoro in modo più veloce.

grazie
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 14:19

Ciao, ho provato l'utimo codice ed è perfetto fino a 57 poi cancella 58-59-60-61-74-75-76-90 (ho fatto la prova per le prime cento righe)

1 10
1 8,17309E+12
2 20
2 8,17309E+12
3 30
3 8,17309E+12
4 40
4 8,17309E+12
5 50
5 8,17309E+12
6 60
6 8,17309E+12
7 70
7 8,17309E+12
8 80
8 8,17309E+12
9 90
9 8,17309E+12
10 00000000000A0
10 4,90178E+12
11 00000000000B0
11 4,90178E+12
12 00000000000C0
12 4,90178E+12
13 00000000000D0
13 4,90178E+12
14 0,00E+00
14 4,90552E+12
15 00000000000F0
15 4,90552E+12
16 00000000000G0
16 4,90552E+12
17 00000000000H0
17 4,90552E+12
18 00000000000I0
18 4,90552E+12
19 00000000000J0
19 4,90178E+12
20 00000000000K0
20 4,90178E+12
20 4,90178E+12
21 00000000000L0
21 4,90552E+12
22 00000000000M0
22 4,90552E+12
23 00000000000N0
23 4,90178E+12
24 00000000000O0
24 4,90178E+12
25 00000000000P0
25 4,90178E+12
26 00000000000Q0
26 4,90552E+12
27 00000000000R0
27 4,90178E+12
28 00000000000S0
28 4,90178E+12
29 00000000000T0
29 4,90552E+12
30 00000000000U0
30 4,90178E+12
31 00000000000V0
31 4,90178E+12
32 00000000000W0
32 4,90178E+12
33 00000000000X0
33 4,90178E+12
34 00000000000Y0
34 4,90178E+12
35 00000000000Z0
35 4,90552E+12
36 100
36 4,90178E+12
37 110
37 4,90178E+12
38 120
38 4,90178E+12
39 130
39 4,90178E+12
40 140
40 4,90178E+12
41 150
41 4,90552E+12
42 160
42 4,90178E+12
43 170
43 4,90178E+12
44 180
44 4,90178E+12
45 190
45 5,01349E+12
46 00000000001A0
46 8,02928E+12
47 00000000001B0
47 8,02928E+12
48 00000000001C0
48 8,02928E+12
49 00000000001D0
49 8,02928E+12
50 1,00E+00
50 8,02928E+12
51 00000000001F0
51 8,02928E+12
52 00000000001G0
52 8,02928E+12
53 00000000001H0
53 8,02928E+12
54 00000000001I0
54 8,02928E+12
55 00000000001J0
55 4,90552E+12
56 00000000001K0
56 4,90178E+12
57 00000000001L0
57 4,90178E+12
58 00000000001M0
58 8562007864
58 8562007864
59 00000000001N0
59 8562007772
59 8562007772
60 00000000001O0
60 8562007833
60 8562007833
61 00000000001P0
61 8562007802
61 8562007802
61 8562007819
62 00000000001Q0
62 4,90178E+12
63 00000000001R0
63 4,90178E+12
64 00000000001S0
64 4,90178E+12
65 00000000001T0
65 4,90178E+12
66 00000000001U0
66 4,90178E+12
67 00000000001V0
67 4,90178E+12
68 00000000001W0
68 4,90178E+12
69 00000000001X0
69 4,90178E+12
69 4,90178E+12
70 00000000001Y0
70 4,90178E+12
71 00000000001Z0
71 4,90178E+12
72 200
72 4,90552E+12
72 4,90552E+12
73 210
73 4,90552E+12
73 4,90552E+12
74 220
74 27242670853
74 27242670853
75 230
75 27242620322
75 27242620322
76 240
76 27242700567
76 27242700567
77 250
77 4,90552E+12
78 260
78 4,90178E+12
79 270
79 4,90178E+12
80 280
80 4,90178E+12
81 290
81 4,90178E+12
82 00000000002A0
82 4,90178E+12
83 00000000002B0
83 4,90178E+12
84 00000000002C0
84 4,90178E+12
85 00000000002D0
85 4,90178E+12
86 2,00E+00
86 4,90178E+12
87 00000000002F0
87 3,35583E+12
88 00000000002G0
88 4,90178E+12
89 00000000002H0
89 4,90178E+12
90 00000000002I0
91 00000000002J0
91 3,35583E+12
92 00000000002K0
92 4,90552E+12
93 00000000002L0
93 4,90178E+12
94 00000000002M0
94 4,90552E+12
95 00000000002N0
95 4,90178E+12
96 00000000002O0
96 4,90178E+12
97 00000000002P0
97 4,90178E+12
98 00000000002Q0
98 4,90178E+12
99 00000000002R0
99 4,90178E+12
100 00000000002S0
100 4,90178E+12


Grazie per l'aiuto e la pazienza
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Flash30005 » 20/11/13 14:32

Non ho capito se la macro va bene oppure va bene fino alla riga 57

comunque per accelerare il processo devi inserire 4 righe codice (due inizio macro e due alla fine) come indicato
Codice: Seleziona tutto
Sub EliminaRighe()
Application.ScreenUpdating = False   '<<<<< aggiungere qui
Application.Calculation = xlManual     '<<<<< aggiungere qui
UR = Range("A" & Rows.Count).End(xlUp).Row  '<<<< riga esistente
...
...
...
Next RR1                                                         '<<<< riga esistente
Application.Calculation = xlCalculationAutomatic     '<<<<< aggiungere qui
Application.ScreenUpdating = True                           '<<<<< aggiungere qui
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Formule macro excel

Postdi Denny1986 » 20/11/13 14:40

Ho provato adesso l'ultima macro va benissimo cancellava i numeri 58-59-60-61 perchè erano costituiti da 9 numeri e avevamo imposto invece inferiore a 13 quindi risolta, l'ultimo problema che invece lacuni codici (come il 90) hanno solo un ean interno quello con tanti zeri che giustamente elimina.

Come si puo indicare che in caso in cui trova solo un codice ean della colonna B relativo al codice della colonna A deve lasciarlo e non eliminarlo anche se corrisponde hai criteri di eliminazione indicati, perchè altrimenti viene elimniato l'intero codice della colonna A come accade per il codice 90, 142 della Colonna A.

Grazie ancora per la pazienza
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37

Re: Formule macro excel

Postdi Denny1986 » 22/11/13 19:33

ho risolto grazie di tutto
Denny1986
Utente Junior
 
Post: 10
Iscritto il: 20/11/13 00:37


Torna a Applicazioni Office Windows


Topic correlati a "Formule macro excel":


Chi c’è in linea

Visitano il forum: raimea e 29 ospiti