Macro copiare una sola volta nomi ripetuti da elenco dati

Anonimo
2017-07-02T10:16:12+00:00

Buongiorno, 

Avrei bisogno di aiuto nel compilare una macro che mi permetta di selezionare e copiare delle celle da un elenco lunghissimo di dati, solo nel caso in cui il nome all'interno della cella non sia uguale al nome nella cella precedente. I nomi sono in ordine alfabetico, quindi non è possibile trovare lo stesso nome all'inizio e alla fine dell'elenco, per questo motivo ho considerato solo il controllo con la cella precedente.

Non so se mi son spiegata, comunque vi scrivo sotto quello che ho pensato io, ma che purtroppo non funziona.

//

Sub contaUNIT()

Sheets("Foglio1").Select

Ur = Range("A" & Rows.Count).End(xlUp).Row

r = 2

j = 22

Do Until r > Ur

   If Cells(r, 1) = "BID" Then

        If Cells(r, 3) = "REJ" Or Cells(r, 3) = "ACC" Then

            If Cells(r, 5) <> Cells(r - 1, 5) Then

                Cells(r, 5).Copy Destination:=Worksheets("tot").Cells(j, 6)

                Cells(r, 16).Copy Destination:=Worksheets("tot").Cells(j , 7)

            End If

            r = r + 1

            j = j + 1

        End If

    End If

Loop

End Sub

//

Ho provato a farlo andare togliendo la funzione DO UNTIL, cioè quindi solo considerando la riga r, e in effetti funziona. Non sono pratica di questo linguaggio e magari sto sbagliando qualcosa, spero che voi mi possiate aiutare.

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

2 risposte

Ordina per: Più utili
  1. Anonimo
    2017-07-02T15:01:01+00:00

    Ciao Norman,

    prima di tutto grazie mille della risposta. 

    Dovrei aver risolto il mio problema, nel senso che era un problema di come avevo inserito i dati in "Foglio1".

    Comunque, avrei un altro problema da risolvere adesso. Si tratterebbe di costruire una macro in grado di, data una lista di 10 nomi, cercare ognuno dei nomi nell'elenco dati e quando li trova copia delle celle sulla stessa riga; in poche parole: 

    leggo nome1, guardo in tutte le righe dell'elenco se una data cella corrisponde a nome1, se sì, copio dei valori presenti in celle della stessa riga, ma in differenti colonne; una volta controllate tutte le righe dei dati per il nome 1, passo al nome 2 e ripeto tutto, considerando le celle di arrivo in cui copiare i valori spostate di tot celle (ex. 5) a destra, e così via fino al nome 10.

    Non so se sono stata chiara, comunque mando uno screenshot dei dati:

    Praticamente, ho 11 differenti nomi (colonna P) in cui posso avere BID o OFFER, io seleziono solo BID, e per tutti i BID solo quelli che nella colonna 2 hanno ACC o REJ; nella colonna F ho i numeri da 1 a 24, io vorrei selezionare per ogni valore da 1 a 24 la lista di celle della colonna E e I, per ogni nome della colonna P.

    questi sono i possibili valori che posso trovare nella colonna P, e per ognuno vorrei un una tabella come la seguente:

    Spero di essere stata abbastanza chiara. Allego il codice scritto da me.

    \

    Sub zonalBID()

    Sheets("Foglio1").Select

    Ur = Range("A" & Rows.Count).End(xlUp).Row

    imax = Range("AC" & Rows.Count).End(xlUp).Row

    i = 2

    j = 1

    c = 16

    r = 2

    riga = 5

    ora = 1

    ore = 24

    Do Until i > imax

        Name = Cells(i, 29).Text

        For ora = 1 To ore

            Do Until r > Ur

                If Cells(r, c) = Name Then

                    If Cells(r, 1) = "BID" Then

                        If Cells(r, 3) = "REJ" Or Cells(r, 3) = "ACC" Then

                             If Cells(r, 6).Value = ora Then

                                    Cells(r, c).Copy Destination:=Worksheets("BID").Cells(5, j)

                                    Cells(r, c).Offset(0, -11).Copy Destination:=Worksheets("BID").Cells(riga, j + 1)

                                    Cells(r, c).Offset(0, -7).Copy Destination:=Worksheets("BID").Cells(riga, j + 2)

                                    riga = riga + 1

                                End If

                            End If

                        End If

                    End If

            r = r + 1

            Loop

        j = j + 3

        Next ora

    Loop

    End Sub

    \

    Grazie ancora,

    E

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-07-02T12:28:45+00:00

    Ciao elep,

    Benvenuto alla Community!

    Avrei bisogno di aiuto nel compilare una macro che mi permetta di selezionare e copiare delle celle da un elenco lunghissimo di dati, solo nel caso in cui il nome all'interno della cella non sia uguale al nome nella cella precedente. I nomi sono in ordine alfabetico, quindi non è possibile trovare lo stesso nome all'inizio e alla fine dell'elenco, per questo motivo ho considerato solo il controllo con la cella precedente.

    Non so se mi son spiegata, comunque vi scrivo sotto quello che ho pensato io, ma che purtroppo non funziona.

    //

    Sub contaUNIT()

    Sheets("Foglio1").Select

    Ur = Range("A" & Rows.Count).End(xlUp).Row

    r = 2

    j = 22

    Do Until r > Ur

       If Cells(r, 1) = "BID" Then

            If Cells(r, 3) = "REJ" Or Cells(r, 3) = "ACC" Then

                If Cells(r, 5) <> Cells(r - 1, 5) Then

                    Cells(r, 5).Copy Destination:=Worksheets("tot").Cells(j, 6)

                    Cells(r, 16).Copy Destination:=Worksheets("tot").Cells(j , 7)

                End If

                r = r + 1

                j = j + 1

            End If

        End If

    Loop

    End Sub

    //

    Ho provato a farlo andare togliendo la funzione DO UNTIL, cioè quindi solo considerando la riga r, e in effetti funziona. Non sono pratica di questo linguaggio e magari sto sbagliando qualcosa, spero che voi mi possiate aiutare.

    In che modo non funziona il tuo codice?

    Mentre credo che il codice possa essere migliorato, io l'ho provato con i seguenti dati di prova:

    Eseguendo il tuo codice, sul foglio Tot, ottengo i seguenti risultati:

                                

    Quindi, ti chiederei gentilmente di postare degli screenshot di una copia esemplificativa dei tuoi dati e i risultati aspettati.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento