Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Confrontare stringhe uno a molti

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

[Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 12:53

Ho un altro problema da risolvere :roll: Questa volta ho preparato un esempio per essere il più chiaro possibile nell'esporre il problema

Come vedete dall'immagine ho due tabelle e devo confrontare ognuna delle stringhe della seconda tabella con le stringhe della prima tabella. Ognuna delle stringhe è composta da 3 celle in entrambe le tabelle e contengono testo/numero.

Credo sia utile la funzione strcomp() ma non sono riuscito a selezionare il range delle stringhe

Immagine
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Sponsor
 

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 14:04

Ciao,
con gli intervalli che hai proposto in:
A) "F5" scrivi
Codice: Seleziona tutto
=C5 & D5 & E5
e copia in basso fino a "F11" per la prima tabella

B) "F17" scrivi
Codice: Seleziona tutto
=C17 & D17 & E17
e copia in basso fino a "F26" per la seconda tabella

C) "G17" scrivi
Codice: Seleziona tutto
=SE(E(F17<>""; CONTA.SE($F$5:$F$11; F17)>0); 1; 0)
e copia in basso fino a "G26"


Prova e ... sono QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 14:20

Stavo cercando di trovare una soluzione con VBA poichè le tabelle non sono soltanto quelle due ma molte di più. Una volta buttato giù il codice per le prime due tabelle lo estendo a tutte le altre. Ho provato con la funzione strcomp() ma non riesco a definire i range di celle su cui fare la comparazione
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 14:25

Ciao,
sicuramente l'esempio che hai fatto serviva a farci capire cosa ti occorre va ed avevi semplificato l'effettiva necessità

Di quante righe/colonne/tabelle si tratta?
Spesso non vale la pena di utilizzare il VBA ma bastano le formule!

Tu come te le cavi con il VBA e la programmazione?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 15:29

Con VBA benino. Sono circa 300 tabelle su 20000 righe. Così disposte (zoom 20%)

Immagine

Ho già fatto qualcosina (giusto per darti un'idea)
Codice: Seleziona tutto
Sub Newposition()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim startrow As Long
  Dim i As Integer
  Dim a As String
 
 
  Set wb = ActiveWorkbook '?
  Set ws = wb.ActiveSheet '?
  a
  startrow = 62
  For i = 1 To 58
    If strcomp(Range((Cells(startrow + i,2), [Cells(startrow + i, 4)]).Value),
   
   
    then Range(Cells(startrow + i, K)).Value = "Y"
   
    Else
    End If
   
   
  Next i
 
  startrow = startrow + 60
 
  Set ws = Nothing
  Set wb = Nothing
End Sub
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 16:20

Ciao,
le tabelle sono effettivamente una sotto l'altra?
La distanza tra l'inizio di una e quello dell'altra è sempre la stessa ?

Sai cosa significa gestire gli inizi e la fine di 300 tabelle non alla stessa distanza?
Si ouò fare una nuova tabella su un altro foglio nella quale mettere gli intervalli di ogni tabelle ...


Un file di esempio si può avere?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 16:29

Qui il file di esempio
http://speedy.sh/Z7Svc/Book-forum.xlsx

Le tabelle sono equidistanti come puoi vedere e il controllo devo farlo a partire dalla seconda tabella. Come vedi per la prima tabella ho già inserito il parametro "Y" nella colonna G per tutte le righe. Quindi il codice devo applicarlo a partire dalla seconda
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 16:41

Ciao,
la tua effettiva esigenza è quella di ottenere per ogni titolo e per giorno il suo andamento ?

Oppure ... conviene sapere bene cosa vuoi ottenere e poi vedere come farlo perchè quanto avevi chiesto inizialmente (sapere se è presente mediante "0" e "1"), a mio avviso, ti è poco utile ma .. vedi tu
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 17:28

La mia esigenza è proprio quella di verificare a partire dalla seconda tabella in poi:
- Per la tabella 2: Quali delle righe della tabella 2 è già presente nella tabella 1?
- Per la tabella 3: Quali delle righe della tabella 3 è già presente nella tabella 2?
- ecc ecc ecc...

Nella colonna G ho l'output che sarà "Y" nel caso in cui non è presente nella tabella precedente e "" nel caso in cui è presente nella tabella precedente. Per questo ho utilizzato strcomp(). L'obbiettivo è di comparare ogni singola riga di ogni tabella con le righe della tabella precedente.
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 17:38

Ciao,
si può fare ma mi sfugge l'utilità.

Cosa farai quando troverai un titolo nella tabella precedente?
e quando NON lo troverai?

Per mia impostazione prima voglio capire "lo scopo dei giochi" e poi cerco la soluzione e ... spesso ci guadagno perchè in corsa le esigenze cambiano e se avessi fatto qualcosa fin dall'inizio avrei probabilmente dovuto buttare tutto e rifarlo ...

Spiegato mi sono, Ah ????
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 17:44

Molto semplice: una volta che trovo per ogni tabella le righe nuove (quelle "Y") le trasferisco in nuovo foglio così da ottenere per ogni giorno le righe nuove che sono quelle che mi interessano.
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 19:42

Ciao,
si ma che elaborazioni fai poi con i dati?
Non sarebbe meglio avere tutti i dati uno sotto l'altro e poi con una pivot opportunamente costruita avere le informazioni che ti occorrono?

Io quando mi dedicavo al trading on line e seguivo vari titoli facevo qualcosa di simile scaricandomi le quotazioni dal sito del Sole 24 Ore cui mi ero registrato.

Io insisto perchè mi immedesimo in te e cerco di capire cosa ti può essere più utile e comodo produrre.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 20:19

Non si tratta di quotazioni e dato che devo utilizzarlo soltanto una volta per estrarre le righe che mi interessano credo che un code VBA sia la soluzione migliore
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 20:58

Ciao,
solo per essere sicuro di aver capito: quanto ti avevo proposto con le formule ti dava i risultati attesi?

Se la risposta è "SI" allora "traduco" le formule in una macro scritta in VBA.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 21:21

Si riprovate adesso adattandole al foglio che ho postato e funzionano
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 21:45

Ciao,
bene.
Appena posso vedo di darti uno spunto sul quale lavorare.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 30/09/13 23:01

ricky53 ha scritto:Ciao,
bene.
Appena posso vedo di darti uno spunto sul quale lavorare.


Credo di essere arrivato a buon punto ma non sono ancora riuscito ad ottenere i "Y" per distinguere le nuove righe

Codice: Seleziona tutto
Sub Newposition()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim startrow As Long
  Dim firstrow As Long
  Dim i As Integer
  Dim n As Integer
 
  Set wb = ActiveWorkbook '?
  Set ws = wb.ActiveSheet '?
  startrow = 62
  firstrow = 2
   For i = 1 To 58
         
       For n = 1 To 58
       If StrComp((Cells(startrow + i, 2) & Cells(startrow + i, 4)), (Cells(firstrow + n, 2) & Cells(firstrow + n, 4)), vbTextCompare) = 0 Then
       Cells(startrow + i, 13) = ""
       Else
       Cells(startrow + i, 14) = Y
       End If
       
       Next n
       
    firstrow = firstrow + 60
    startrow = startrow + 60
   Next i
 
  Set ws = Nothing
  Set wb = Nothing
End Sub

anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 30/09/13 23:20

Ciao,
prova questo codice
Codice: Seleziona tutto
Option Explicit
Option Compare Text
Sub Newposition()
    Dim StartRow As Long, EndRow As Long, LastRow As Long, RR_I As Long, RR_F As Long, RR_App As Long
    Dim I As Long, J As Long, X As Long
    Dim Inizio As Double
   
    Columns("H").ClearContents ' <<===== Modifica se occorre
   
    Inizio = Timer
    LastRow = Range("F" & Rows.Count).End(xlUp).Row
    Range("H3:H" & LastRow) = "-" ' <<===== Modifica se occorre
    RR_App = 1
   
    For X = 3 To LastRow / 60 + 1
        StartRow = Range("F" & RR_App).End(xlDown).Row + 1
        EndRow = Range("F" & StartRow).End(xlDown).Row
        If EndRow > LastRow Then
            GoTo Fine
        End If
        RR_I = StartRow + 60
        RR_F = Range("F" & RR_I).End(xlDown).Row
        RR_App = EndRow
        For I = StartRow To EndRow
            For J = RR_I To RR_F
                If Cells(I, "C") & Cells(I, "D") & Cells(I, "E") = Cells(J, "C") & Cells(J, "D") & Cells(J, "E") Then
                    Cells(I, "H") = "Y" ' <<===== Modifica se occorre
                End If
            Next J
        Next I
    Next X
Fine:
    MsgBox "Elaborazione Effettuata in:  " & Format(Timer - Inizio, "0.000") & "  secondi"
End Sub


Il codice scrive le "Y" nella colonna "H", modifica, se occorre, le istruzioni dove ho riportato il commento !



Nel tuo codice devi scrivere
Codice: Seleziona tutto
Cells(startrow + i, 14) = "Y"

e NON
Codice: Seleziona tutto
Cells(startrow + i, 14) = Y

Però viene scritta una sola "Y" per ogni tabella, oltretutto sposta di una riga per ogni tabella
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Confrontare stringhe uno a molti

Postdi anonimo13 » 01/10/13 10:09

Ricky non funziona, ho le "Y" su tutte (meno una) le righe di ogni tabella. Lavoro su entrambi i codici e vedo se riesco ad uscirne
anonimo13
Utente Junior
 
Post: 30
Iscritto il: 24/02/12 23:41

Re: [Excel] Confrontare stringhe uno a molti

Postdi ricky53 » 01/10/13 10:13

Ciao,
hai provato il mio codice di esempio ?

Io ho provato, sul tuo file, sia con le formule che con il codice ed ottengo le stesse cose.

Il file sul quale provi è lo stesso di quello che hai inviato a noi ???
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Confrontare stringhe uno a molti":


Chi c’è in linea

Visitano il forum: Lucio Peruggini e 3 ospiti

cron