Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Copiare doppioni di stringhe all’interno di stringhe

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

Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 14/04/20 18:12

Ciao a tutti... sono ancora qui a chiedere il vostro prezioso aiuto inerente a una questione di doppioni.
Inutile dire che ho già fatto ore di ricerche ma non ho trovato nulla che io possa utilizzare. Descrivo il problema...

Ho 594 colonne e in ogni colonna sono riportate delle stringhe vorrei intercettare tutte le stringhe uguali
e copiarle in colonna A dopo aver inserito una colonna vuota in A (spostando le altre colonne verso dx).

Riporto alcune stringe di una colonna e aggiungo che i numeri da intercettare hanno la stessa distanza.
TO_Gr2_C-01 - 108 ambo (09) Cagliari
CA_Gr2_C-01 - 124 ambo (18) Cagliari
FI_Gr2_C-01 - 011 ambo (20!) Cagliari
FI_Gr2_C-01 - 124 ambo (19) Bari
FI_Gr2_C-01 - 108 ambo (10) Bari
GE_Gr2_C-01 - 122 ambo (11) Bari

Altre stringhe di un’altra colonna
TO_Gr1_C-06 - 149 ambo (10) Cagliari
TO_Gr1_C-06 - 115 ambo (10) Cagliari
TO_Gr1_C-06 - 115 ambo (12) Cagliari

Risultato che si vuole ottenere in colonna A
TO_Gr2_C-01 - 108 ambo (09) Cagliari
FI_Gr2_C-01 - 108 ambo (10) Bari
CA_Gr2_C-01 - 124 ambo (18) Cagliari
FI_Gr2_C-01 - 124 ambo (19) Bari

Lasciare una cella libera

TO_Gr1_C-06 - 115 ambo (10) Cagliari
TO_Gr1_C-06 - 115 ambo (12) Cagliari

In allegato un foglio per eventuali prove della macro e altri fogli per maggiori info

Ringraziando anticipatamente tutti coloro che mi possano aiutare. 73 ikwae
http://www.filedropper.com/doppionihelprete
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi Anthony47 » 15/04/20 00:06

Mah...
Non ho trovato coerenza tra il contenuto del foglio TO e il foglio Demo, quindi penso di non aver capito la domanda.
Comunque al momento la mia proposta e' questa macro:
Codice: Seleziona tutto
Sub Bah()
Dim myD As Object, mIt As Object, myK
Dim J As Long, I As Long, myNext As Long
'
Columns("A:A").Insert Shift:=xlToRight
Columns("A:A").ColumnWidth = 35
Set myD = CreateObject("Scripting.Dictionary")
For J = 2 To Cells(2, Columns.Count).End(xlToLeft).Column
    myD.RemoveAll
    For I = 2 To Cells(Rows.Count, J).End(xlUp).Row
        myK = Cells(I, J)
        If Not myD.Exists(myK) Then
            myD.Add (myK), 1
        Else
            myD.Item(myK) = myD.Item(myK) + 1
        End If
    Next I
    myNext = Cells(Rows.Count, "A").End(xlUp).Row + 2
   
    For I = 0 To myD.Count - 1
        If myD.items()(I) > 1 Then
            Cells(myNext, "A").Resize(myD.items()(I), 1) = myD.keys()(I)
            myNext = myNext + myD.items()(I)
        End If
    Next I
Next J
MsgBox ("Boh...")
End Sub

Va inserita ovviamente in un modulo standard del vba, e poi eseguita avendo attivato prima il foglio TO

Se non restituisce quanto atteso allora, lavorando sul foglio TO, dovresti spiegare quali dati vanno ricopiati in colonna A.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 15/04/20 13:02

Ciao Anthony molto gentile come sempre a rispondermi …effettivamente trovando pochi
doppioni nel foglio TO e avendo più doppioni sul foglio Demo, che io sbadatamente
non ho evidenziato, ecco che le perplessità arrivano…

Comunque la macro l’ho testata su altri fogli e ho anche fatto copia e incolla di doppioni
e ti posso assicurare che li ha trovati tutti scrivendoli in colonna A. Quindi la macro fa come
da richiesta scrivendo i doppioni e, aggiungo, che in velocità è istantanea….
Quindi devo ringraziarti mille e mille volte per la tua continua disponibilità e gentilezza…


Vorrei chiedere un altro aiuto, se possibile, inerente alla macro che scorre le celle in
cerca di doppioni e mi rivolgo a tutti coloro che mi possono aiutare…

Prima di chiedere aiuto ho scaricato dalla rete tutto il possibile ore e ore di ricerca
per i doppi cicli ma 80% dei doppi cicli è tra due colonne e il 20% rimanente cerca
in una sola colonna il doppione. Lo trova solo per evidenziarlo oppure per eliminare
la riga e nessuna che lo copia da altra parte.

Inutile dire che dopo una settimana di prove (trovando difficoltà anche perché
la stringa da confrontare era all’interno di un’altra stringa) e modifiche ho
dovuto chiedere aiuto a pc-facile perché non riuscivo ad adattare, le macro trovate,
per selezionare il doppione, per scriverlo in colonna A e neanche a far ripartire
il ciclo dopo che avesse scritto qualche cosa, sicuramente errato in colonna A.

Detto questo chiedo a tutti, se possibile, una semplice macro che trova in
una sola colona con solo poche righe i doppioni e li scriva in colonna A o altra parte.
Magari con un semplice doppio ciclo tipo For_xx e scansiona la colonna a cercare
ad esempio tre Pippo in righe diverse e tre numeri ad esempio 123 sempre
su righe diverse in ua singola colonna tipo:

123
Mela
Pippo
123
Pippo
Pera
Pippo
123
Banana

In colonna A o altra parte la soluzione:
123
123
123
Pippo
Pippo
Pippo

Ringraziando anticipatamente tutti coloro che mi aiuteranno 73 ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi Anthony47 » 15/04/20 13:42

Allora, se la Sub Bah fa quel che serve in tante colonne allora lo puo' fare benissimo anche in una sola colonna, bisogna agire sulla istruzione For J = 2 To Cells(2, Columns.Count).End(xlToLeft).Column, che così come e' cicla dalla colonna B all'ultima

Se vuoi lavorare solo sulla collonna B allora la sostituirari con
Codice: Seleziona tutto
For J = 2 To 2
Questo evita di fare altri interventi sulle altre righe

Se non vuoi aggiungere una colonna a sx prima di cominciare, allora eliminerai le righe
Columns("A:A").Insert Shift:=xlToRight
Columns("A:A").ColumnWidth = 35

Se ti spaventa la "mostruosa complessità" della mia macro, essa si limita a costruire, colonna dopo colonna, un indice del contenuto delle righe, contandone le occorrenze; nella seconda parte spazzola il conteggio delle occorrenze e quelle con >1 presenza vengono scritte in colonna A.
Si appoggia per questo all'oggetto Dictionary; vedi https://docs.microsoft.com/en-us/office ... ary-object

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 15/04/20 18:30

Gentilissimo Anthony quello che hai scritto e per me Vangelo e non vorrei che tu abbia frainteso
la mia nuova richiesta di aiuto come un affronto o denigrazione alla tua prima macro se così fosse
me ne scuso e non mi permetterei mai di pensare o di fare una cosa del genere specialmente a
chi mi aiuta. Ancora molte scuse se involontariamente ho dato questa impressione non voluta.

Ho sfruttato questo post per inserire una seconda richiesta di aiuto, rimanendo inerente all’oggetto.
La lettura del secondo aiuto, è da interpretare come un ulteriore aiuto indipendentemente dalla macro
del primo aiuto. Chiedo una seconda macro per avere un “attrezzo” alternativo da inserire nelle mie
“Chicche”, che manca, un doppio ciclo da usare nelle mie innumerevole prove con macro casarecce
da smanettone. Pertanto se pensi che la tua seconda indicazione possa essere interpretata come
universale a 360° vuol dire che la leggerò con più attenzione cercando di capire come sfruttarla per altri usi.
Se invece pensi di compilare una macro come da richiesta di aiuto con un semplice doppio ciclo For o altro
su una sola colonna te ne sarei grato. Le cose importanti che cerco di capire nel ciclo sono:
selezionare, confrontare e incollare il dato.

Ringraziando anticipatamente ... Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi Anthony47 » 16/04/20 15:58

Figurati se mi offendo... Solo che non capisco perche', avendo gia' una soluzione, ne chiedi un'altra che faccia la stessa cosa in modo diverso...

Visto che insisti, prova questa:
Codice: Seleziona tutto
Sub Bah2()
Dim cList As String, dList As String, I As Long, myNext As Long
Dim LastR As Long, iCount As Long
'
cList = "B"          '<<< La colonna con la lista iniziale
dList = "A"          '<<< La colonna in cui verranno scritti i doppioni
'
myNext = 2
Range(Cells(myNext, dList), Cells(myNext, dList).End(xlDown)).ClearContents
LastR = Cells(Rows.Count, cList).End(xlUp).Row
For I = 2 To LastR
    iCount = Application.WorksheetFunction.CountIf(Cells(2, cList).Resize(LastR, 1), Cells(I, cList).Value)
    If iCount > 1 And Application.WorksheetFunction.CountIf(Cells(1, dList).Resize(myNext, 1), Cells(I, cList).Value) = 0 Then
        Cells(myNext, dList).Resize(iCount, 1).Value = Cells(I, cList).Value
        myNext = myNext + iCount
    End If
Next
MsgBox ("Completato...")
End Sub


Pero', noterai, non ti vengo dietro sul discorso del doppio loop; semplicemente perche' non ce n'e' bisogno e si puo' fare tutto in un unico passaggio.

Le cose importanti che cerco di capire nel ciclo sono:
selezionare, confrontare e incollare il dato
Come noterai, non seleziono niente; confronto usando Conta.Se, e non copio/incollo ma mi limito a scrivere il valore

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 16/04/20 18:48

Gentilissimo Anthony …

Ho letto il tuo post e noto che sembra che tu non abbia risposto alla mia richiesta di aiuto ma sono sicuro che non è così.
Per non per essere polemico ma avevo chiesto un’alternativa alla tua macro da trovare 3 Pippo e tre 123 su unica colonna
con un doppio ciclo For o altro metodo appunto per vedere come si seleziona si confronta e incolla il dato da altra parte
e te mi dici che non selezioni niente, confronti con il Conta.Se e non incolli nulla ma ti limiti a scrivere il valore.

Anche se non hai risposto alla mia domanda non lo considero negativo anzi lo considero super positivo e intuisco nella tua
risposta che mi vuoi “elevare” professionalmente quindi non mi rimane che ringraziarti per il tuo prezioso e gradito tempo
oltre alla tua cortese intuizione di aiutarmi dandomi una macro che non servono le richieste fatte. Tuttavia posso dirti che
fintanto che non ho capito la tua ultima macro come usarla per le mie macro casarecce mi mancherà il doppio ciclo con
la ricerca di un dato su unica colonna.


Ringraziandoti ancora per la tua gradita e apprezzata disponibilità oltre alla tua professionalità. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi Anthony47 » 16/04/20 19:17

Eh he, sembra che ce l'abbia con te ma, classificandoti "fidato utente", e' solo un tentativo di spingerti avanti

La prima cosa che va cercata e' l'approccio alla risoluzione del problema; un approccio povero determina inevitabilmente un risultato povero; un approccio piu' furbo e' la premessa per un risultato piu' furbo.
Fortunatamente Excel offre una bella quantita' di strumenti, che possono essere combinati per ottenere risultati spesso migliori delle aspettative.
In questo caso "la furbata" e' usare Conta.Se per capire se una riga e' duplicata e quante volte, cosi' si risolve tutto in un unico passaggio; e ti assicuro che farlo con un doppio ciclo e' piu' incasinato che non farlo in unico ciclo.

Se hai domande siamo qui...
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 16/04/20 22:30

Gentilissimo Anthony ti ringrazio per il “fidato utente” e stavo appunto “sezionando” la tua ultima
macro cercando di capire come fare a trovare soluzioni per trovare doppioni per inserire una cella
vuota ogni volta che trovo due i più doppioni.

Esempio_1: Unica colonna di ricerca da trovare doppioni
CA_Gr2_C-01 - 003 ambo (15) Genova
CA_Gr2_C-01 - 084 ambo (09) Bari
CA_Gr2_C-01 - 084 ambo (09) Bari
CA_Gr2_C-01 - 084 ambo (09) Bari
CA_Gr2_C-01 - 152 ambo (09) Cagliari
CA_Gr2_C-01 - 113 ambo (09) Cagliari
CA_Gr2_C-01 - 114 ambo (12) Firenze

Risultato finale voluto sempre nella stessa colonna
CA_Gr2_C-01 - 003 ambo (15) Genova

CA_Gr2_C-01 - 084 ambo (09) Bari
CA_Gr2_C-01 - 084 ambo (09) Bari
CA_Gr2_C-01 - 084 ambo (09) Bari

CA_Gr2_C-01 - 152 ambo (09) Cagliari
CA_Gr2_C-01 - 113 ambo (09) Cagliari

CA_Gr2_C-01 - 114 ambo (12) Firenze

Esempio_2 Oppure modificare la ricerca della stringa da copiare in colonna A sempre su una unica colonna
RM_Gr2_C-01 - 143 ambo (13) Bari
NA_Gr2_C-01 - 060 ambo (14) Firenze
TO_Gr2_C-03 - 020 ambo (20!) Torino
PA_Gr2_C-01 - 127 ambo (10) Cagliari
GE_Gr2_C-01 - 044 ambo (12) Bari

Colonna A i doppioni copiati con stringa Bari
RM_Gr2_C-01 - 143 ambo (13) Bari
GE_Gr2_C-01 - 044 ambo (12) Bari

Esempio_3 Oppure fare conteggi su celle sempre in colonna
BA_Gr2_C-01 - 145 ambo Genova 145
4
15

BA_Gr2_C-01 - 146 ambo Genova 146
8
21
5

Risultato finale la colonna B per i conteggi
BA_Gr2_C-01 - 145 ambo Genova 145
4 149-19
15 7-20

BA_Gr2_C-01 - 146 ambo Genova 146
8 154-19
21 18-20
5 23-20

E tanti altre cosucce che da hobbista smanettone vorrei fare dato che sono a casa tutto il giorno
per i motivi che tutti conosciamo e quindi con questi esempi non sono qui a trovare facili soluzioni
tipo “pappa pronta” ma affrontarli uno alla volta così passo il tempo e pensavo di lavorare con un
semplice doppio ciclo ma adesso che sono stato “promosso” cercherò altri metodi e se no li trovo
ho la certezza che con pc-facile arrivano competenti e veloci soluzioni …

Ancora ringraziandoti per la tua disponibilità. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 07/05/20 12:06

Gentilissimo Anthony perdonami se riapro il post. Con l’apertura dei giochi mi sono accorto che la macro Sub Bah() lavora bene ma non intercetta il doppione all’interno della stringa. Riletto il post mi sono accorto che c’è stata confusione con copia e incolla che riporta l’intera stringa compreso il doppione ma singolarmente non lo intercetta. L’unica indicazione giusta è il mio primo post.
Per non farti perdere tempo a rileggere il tutto riporto le fasi che la macro dovrebbe fare.
1) Inserire una colonna vuota in A
2) Scorrere tutte le colonne (che sono 594)
3) Scansionare una colonna per volta. Scorrere ogni cella della colonna. All’interno di ogni cella c’è una stringa e all’interno della stringa c’è un numero. Questo numero deve essere confrontato con gli altri numeri delle celle della stessa colonna e, se si trovano doppioni, copiarli in colonna A.
4) Lasciare una cella libera per ogni colonna che si trovano i doppioni.
Allego un file con pochissimi dati per riportare nel dettaglio cosa si cerca e cercando di non creare confusione.
Ringraziandoti per la tua preziosa disponibilità cordialmente ikwae
http://www.filedropper.com/rettificamacroba
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi Anthony47 » 08/05/20 00:43

Hummm... Se ho capito allora invece della Sub Bah prova con quest'altra:
Codice: Seleziona tutto
Sub Macchec()
Dim myD As Object, mIt As Object, myK
Dim J As Long, I As Long, myNext As Long
Dim mySplit, IJ As Long, K As Long
'
Columns("A:A").Insert Shift:=xlToRight
Columns("A:A").ColumnWidth = 35
Set myD = CreateObject("Scripting.Dictionary")
For J = 2 To Cells(2, Columns.Count).End(xlToLeft).Column
    myD.RemoveAll
    For I = 2 To Cells(Rows.Count, J).End(xlUp).Row
        myK = Mid(Cells(I, J), 2 + InStr(1, Cells(I, J), "- ", vbTextCompare))
        mySplit = Split(myK, " ", , vbTextCompare)
        myK = mySplit(0)
        If Not myD.Exists(myK) Then
            myD.Add (myK), I
        Else
            myD.Item(myK) = myD.Item(myK) & "-" & I
        End If
    Next I
IJ = 0
    For I = 0 To myD.Count - 1
    K = 0
    myNext = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Debug.Print myD.items()(I)
        mySplit = Split(myD.items()(I), "-", , vbTextCompare)
        If UBound(mySplit) > 0 Then
            IJ = IJ + 1
            For K = 0 To UBound(mySplit)
                Cells(myNext + K, "A") = Cells(CLng(mySplit(K)), J).Value
            Next K
        End If
    Next I
If IJ > 0 Then
    Cells(myNext + K, "A") = " "
End If
Next J
MsgBox ("Boh...")
End Sub

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare doppioni di stringhe all’interno di stringhe

Postdi ikwae » 08/05/20 11:21

Gentilissimo Anthony … ho provato la nuova macro sul foglio TO, del precedente allegato e, ha trovato più di 5.000 doppioni. Ho ripetuto per tutti i fogli, 11 in tutto, trovando altrettanti doppioni.
Quindi ricapitolando la macro per leggere 594 colonne e scrivere in colonna A più di 5.000 doppioni ha impiegato meno di un secondo. Rimangono solo i dovuti, meritatissimi e obbligatori ringraziamenti.
Ringraziandoti ancora mille e mille volte per la tua gentilezza e pazienza cordialmente ikwae.

******************************
E' molto difficoltoso entrare se non si ricorda la password anche seguendo le facili procedure!!!
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 164
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Copiare doppioni di stringhe all’interno di stringhe":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti