Condividi:        

Confrontare due colonne con dato su più righe

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

Confrontare due colonne con dato su più righe

Postdi ikwae » 18/06/20 07:58

Ciao a tutti sono ancora qui a chiedere il vostro prezioso aiuto… vorrei confrontare due concorsi, quello precedente
con quello successivo per estrapolare i nuovi ambi del nuovo concorso. Quindi un concorso (ad esempio il 52) in colonna
C e il concorso quello dopo (ad esempio il 53) in colonna B. Confrontando le due colonne si devono eliminare dalla colonna
B tutti gli ambi presenti in colonna C così facendo in colonna B rimangono solo i nuovi ambi che è quello che si cerca.
Sul file allegato ci sono tre fogli uno Info che spiega dettagliatamente (almeno spero) cosa si deve trovare e le insidie che
si possono riscontrare nel confronto. Un foglio Fine che è quello che si presuppone di avere. Un foglio Originali dove
si possono trovare i concorsi in originale grezzi (così come arrivano) gli stessi in ordine crescente di ripetizioni che ne
indico qualcuno…

Ambo con una sola ripetizione
BA_Gr2_C-01 - 001 ambo Milano
23

Ambo con due ripetizioni
CA_Gr1_C-11 - 040 ambo Genova
21
44

Ambo con tre ripetizioni
GE_Gr1_C-04 - 010 ambo Palermo
13
3
15

Nel foglio Originali c’è anche una parte, di entrambi i concorsi, concatenata per avere la struttura per il confronto.

L'aiuto che cerco non è una macro ma una indicazione, metodo, consiglio di come fare per "estrapolare" i nuovi ambi.
Spero che arrivano numerosi indicazioni, magari con “occhi” diversi. Ringraziando fin d’ora chi mi potrà aiutare 73 ikwae

http://www.filedropper.com/smistacolonn ... sinew3rete
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Confrontare due colonne con dato su più righe

Postdi Anthony47 » 21/06/20 20:42

Anche stavolta devi beccarti i miei suggerimenti, con l'inevitabile preambolo: non ci ho capito un'acca

Perche' e' vero che attorno ai tuoi simboli tipo BA_Gr2_C-04 - 147 ambo Firenze ci bazzico da un po', ma sempre aramaico rimangono. Nel senso che non capisco che cosa ci sia scritto dentro.

Quindi dopo aver essermi macerato senza esito sul contenuto di foglio Originali, aver letto le istruzioni su Info e il foglio FINE vagolo nel vuoto sul significato di quelle stringhe e invoco il supplemento di descrizione.

Se si trattasse semplicemente di eliminare dalla colonna B tutte le stringhe che sono presenti anche su colonna C, allora probabilmente potrebbe aiutare inserire questa formula in A2 e poi copiarla verrso il basso:
Codice: Seleziona tutto
=SE(LUNGHEZZA(B2)>10;CERCA.VERT(B2;$C$1:$C$10000;1;0);A1)


La formula restituira' l'errore #N/D sulle righe di colonna B che sono assenti in colonna C; quindi applicando il filtro automatico sulla colonna A e visualizzando solo gli errori #N/D avrai un elenco privo delle stringhe preesistenti. Tuttavia il risultato che cosi' si ottiene e' molto ridotto rispetto a quanto inserisci in foglio FINE.

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

Re: Confrontare due colonne con dato su più righe

Postdi ikwae » 21/06/20 23:53

Anthony47 ha scritto:Anche stavolta devi beccarti i miei suggerimenti, con l'inevitabile preambolo: non ci ho capito un'acca
Perche' e' vero che attorno ai tuoi simboli tipo BA_Gr2_C-04 - 147 ambo Firenze ci bazzico da un po', ma sempre aramaico rimangono. Nel senso che non capisco che cosa ci sia scritto dentro.

Mi dispiace tanto tanto veramente e aggiungo pensando che i miei post vendono letti da tante persone e, non avendo mai avuto risposte tranne che da te e, di rado da un altro programmatore ho pensato che l’oggetto non interessa oppure è complesso o non si ha tempo o noioso. Oppure la soluzione non è tanto semplice o immediata da poter dare il proprio contributo. Pensando a questo, le macro, per evitare quanto detto sopra, vorrei tentare di scriverle io fin dove arrivo almeno “allevio” una o più parti sopra descritte dato che ne servono tantissime e, di varie strutture, per automatizzare le ripetizioni.

Purtroppo qualche cosa,che non trovo in rete oppure di molto “tecnico” manca e quindi scrivo per chiedere indicazioni.

Detto questo il mio post è una richiesta di indicazioni o come fare e, in particolare, come si fanno a confrontare due stringhe, che in rete è zeppo ma nessuna che abbia come confronto due tre quattro e oltre righe contemporaneamente.

Con un esempio semplice di devono pensare come duplicati da eliminare:

in colonna B la stringa “Pippo_abc_1234” questa stringa è molto semplice da confrontare con le atre in colonna C perché è una sola

Ma se in colona B ho una stringa
Pippo_abc_1234
12
Che abbia oltre la stringa anche una cella con un numero e si deve confrontare un tutt’uno stringa e il numero 12 da confrontare in colonna C

Ma se in colona B ho una stringa
Pluto_xyx_2678
13
24
Che abbia oltre la stringa anche due celle con numeri e si devono confrontare un tutt’uno stringa e i numeri 13 e 24 da confrontare in colonna C

Ma se in colona B ho una stringa
Qui_Quo_Qua_9876
11
18
3
Che abbia oltre la stringa anche tre celle con numeri e si devono c confrontare un tutt’uno stringa e numeri 11 18 e 3 da confrontare in colonna C.

Che indicazioni, come aiuto, posso avere per confrontare da colona B in colonna C sia stringa che numeri contemporaneamente? E' un duplicato su più righe da confrontare da colonna B in colonna C contemporaneamente e, se si trovano i duplicati, si eliminano.

Ecco perché ho inserito sul foglio Originali vari modelli di stringe per avere da parte di chi mi aiuta la possibilità di trovare il confronto giusto eventualmente da indicarmi.

La tua formulla la verifico ma a me serve una indicazione per scrivermi una macro perche deve essere tutto automatizzato visto l'ato numero di stringhe che ci sono con le ripetizioni. Ringraziandoti di tutto cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Confrontare due colonne con dato su più righe

Postdi Anthony47 » 22/06/20 12:32

Non avvilirti se il tuo approccio non trova adepti...

Per capire la richiesta, si potrebbero manipolare le colonne B e C del foglio Originali in questo modo:
Immagine

A questo punto vanno eliminate le righe di colonna D che hanno un contenuto presente anche in colonna E, e le righe residue ripristinate nel formato della colonna B?

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

Re: Confrontare due colonne con dato su più righe

Postdi ikwae » 22/06/20 18:53

Gentilissimo Anthony … ottima la proposta la devo provare se riesco ad automatizzarla ma prima devo capire come hai fatto ad arrivare alla tabella dell’immagine sopra. Intuisco che hai applicato dei filtri.

In alternativa ti vorrei chiedere, che è lo scoglio che io non riesco a superare.

Codice: Seleziona tutto
Sub Ripetizione_Una()

 ur = Sheets("Laboratorio").Cells(Rows.Count, 2).End(xlUp).Row

 For N = 2 To ur
       If Not IsNumeric(Cells(N, 2)) And Not IsNumeric(Cells(N + 2, 2)) Then
       Range(Cells(N, 2), Cells(N + 1, 2)).Select

      Selection.Cut
 
 Dim bRow As Integer
 bRow = 2 'riga 2
 While Cells(bRow, 3).Value <> ""
 bRow = bRow + 1  '
 Wend
 Cells(bRow, 3).Select
ActiveSheet.Paste

End If
Next
End Sub

Questa macro seleziona la stringa con una sola ripetizione in colonna A incollandola in colonna C (funziona al 100%).

Una delle tante stringhe con una sola ripetizione
BA_Gr2_C-01 - 147 ambo Cagliari
28


La richiesta è semplice anziché copiarla in C come faccio a confrontare, ciò che ho selezionato, in colonna A con le stringe presenti con la colonna C?

Aggiungo se in colonna C la stringa con una sola ripetizione è presente la cancello dalla colonna A se invece non è presente in colonna C continua il ciclo in colonna A selezionando un’altra stringa con una sola ripetizione e ripete il ciclo fino alla fine.

Spero adesso che sia più chiaro dell’aiuto che cerco… Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Confrontare due colonne con dato su più righe

Postdi Anthony47 » 23/06/20 00:47

Ho ottenuto quel risultato usando questa macro:
Codice: Seleziona tutto
Sub Manipolab()
Dim I As Long, J As Long, KK As Long
'
Application.ScreenUpdating = False
For J = 2 To 3
    KK = 1
    For I = 2 To Cells(Rows.Count, J).End(xlUp).Row
        If Len(Cells(I, J)) > 5 Then
            bbase = Cells(I, J)
        Else
            KK = KK + 1
            Cells(KK, J + 2) = bbase & " - " & Cells(I, J)
        End If
    Next I
Next J
Application.ScreenUpdating = True
End Sub

Ma quindi procedendo come ho abbozzato, il risultato finale sarebbe quello desiderato?
Perche' se allora potresti usare questa macro:
Codice: Seleziona tutto
Sub RimuoviAB()
Dim I As Long, J As Long, KK As Long, lastB As Long, cDash As Long
Dim BArr(), CArr(), oArr(), oSh As String, myMatch, myTim As Single
Dim bBase As String, cBase As String, oBase As String
'
oSh = "FineZZ"                      '<<< Il foglio coi risultati filtrati
Sheets("Originali").Select          '<<< Il foglio coi dati di partenza
'
myTim = Timer
lastB = Cells(Rows.Count, 2).End(xlUp).Row
'lastc = Cells(Rows.Count, 3).End(xlUp).Row
ReDim oArr(1 To lastB)
'Crea array con colonne manipolate:
For J = 2 To 3
    KK = 1
    For I = 2 To Cells(Rows.Count, J).End(xlUp).Row
        If Len(Cells(I, J)) > 5 Then
            bBase = Cells(I, J)
        Else
            KK = KK + 1
            If J = 2 Then
                ReDim Preserve BArr(1 To KK + 1)
                BArr(KK) = bBase & " # " & Cells(I, J)
            Else
                ReDim Preserve CArr(1 To KK + 1)
                CArr(KK) = bBase & " # " & Cells(I, J)
            End If
        End If
    Next I
Next J
KK = 1
'Cerca e non copia le vecchie presenze:
For I = 1 To UBound(BArr)
'    KK = 1
    myMatch = Application.Match(BArr(I), CArr, False)
    If IsError(myMatch) Then
        cDash = InStr(1, BArr(I), "#", vbTextCompare)
        If cDash > 0 Then
            cBase = Trim(Left(BArr(I), cDash - 1))
            If cBase <> oBase Then
                oArr(KK) = cBase
                KK = KK + 1
                oBase = cBase
            End If
            oArr(KK) = Trim(Mid(BArr(I), cDash + 1))
            KK = KK + 1
        End If
    End If
Next I
'Scrive i risultati:
Sheets(oSh).Range("B2").Resize(UBound(oArr), 1).Value = Application.WorksheetFunction.Transpose(oArr)
Range("C:C").Copy Sheets(oSh).Range("C1")
Application.CutCopyMode = False
Debug.Print Format(Timer - myTim, "0.00")
End Sub

Va messo in un modulo standard del vba; le due istruzioni marcate <<< vanno personalizzate come da commento

La macro "spazzola" il contenuto di colonna B e crea due matrici il cui contenuto e' come da immagine allegata al messaggio di stamattina; poi "spazzola" la matrice corrispondente a colonna B e confronta ogni riga col contenuto della matrice di colonna C; se il contenuto NON e' presente allora viene copiato nell'area di uscita.
Usa matrici per cercare di velocizzare le operazioni

Immagino che la tua Sub Ripetizione_Una fosse progettata per cancellare un tipo particolare di doppione, ma il suo funzionamento non avrebbe semplificato la ricerca degli altri doppioni. Comunque per funzionare avresti dovuto scansionare tutta la colonna C per cercare pattern analoghi, oppure creare una colonna "manipolata"; che e' poi la tecnica che ho usato nella Sub RimuoviAB

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

Re: Confrontare due colonne con dato su più righe

Postdi ikwae » 23/06/20 11:46

Gentilissimo Anthony … con le tue preziose e, insostituibili indicazioni delle tue macro, sono riuscito finalmente a trovare la soluzione… anche se mancano ancora dei passaggi… la soluzione è di aver concatenato separatamente le stringe della B con le relative ripetizioni e le stringhe della colonna C con le proprie ripetizioni (entrambi senza il concorso iniziale) e una volta finito ho applicato la formattazione condizionale (duplicati) in entrambe le colonne e, in colonna B, sono rimaste (non evidenziate) le stringhe che sono esattamente uguali alla colonna B, del foglio Fine dell’allegato al primo post, ossia quello che si vuole ottenere.

I passi successivi, sono molto semplici, devo applicare una delle 100 macro che ho scaricato dalla rete per risolvere il problema del confronto prima di chiedere aiuto a pc-facile ma erano tutte a confronto di singole stringhe.
Adesso sono ottime per il semplice confronto fra singole stringhe.

Il passo successivo farò testo in colonna aggiungo il numero del concorso e ripristino le ripetizioni con le stesse macro, alla “rovescia”, che ho eseguito per il concatena. Queste procedure possono essere automatizzate (anche se intervengono più di 30 macro per adesso a fine lavoro saranno di più) ma il risultato è garantito di non perdere nessuna ripetizione che è il cuore di tutto questo lavoro di studio.

Per curiosità (dato l'alto numero di macro che intervengono) il mio pc impiega circa quattro minuti dalla colonna grezza per poi passare all’ordinamento crescente delle ripetizioni per concludere con il concatena di tutto il concorso.

Non rimane che ringraziarti per il tuo prezioso aiuto con mille e mille volte grazie cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Confrontare due colonne con dato su più righe":


Chi c’è in linea

Visitano il forum: Gianca532011 e 82 ospiti