Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

RICONOSCIMENTO 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

RICONOSCIMENTO STRINGHE

Postdi markvis92 » 21/09/14 17:07

Salve a tutti, non sono per niente pratico di vba e per questo propongo a voi il mio problema sperando sia possibile risolverlo.
Ho diversi file excel:
1) un file principale "RIEPILOGO.xlsm" dove nel foglio "SOMMARIO" c'è una tabella strutturata nel seguente modo: colonna B nome della nazione ad esempio "FRANCIA",
"ITALIA"; colonna D i nomi di due città ad esempio "BordeauxMarsiglia" , "RomaTorino" e così via...
2) diversi file uno per ogni nazione europea esempio "FRANCIA.xlsx" , "ITALIA.xlsx" e così via... In questi file, nel foglio "output" c'è una tabella strutturata nel seguente modo
colonna A ci sono i nomi di due città ad esempio "BordeauxMarsiglia" , "RomaTorino" e così via e nelle colonne B-C-D ci sono dei numeri.

Quello che vorrei fare è questo:
1) scorrere uno ad uno i valori contenuti nella colonna D del file RIEPILOGO (ad esempio RomaTorino)
2) guardare il valore della colonna B del file RIEPILOGO adiacente al valore che stiamo cercando, dunque aprire il file nazione corrispondente e cercare la posizione delle due città (ad esempio aprire il file "ITALIA.xlsx" , cercare RomaTorino nel foglio "output" colonna A)
3) a questo punto copiare i numeri delle colonne B-C-D nel file RIEPILOGO foglio SOMMARIO colonna AR-AS-AT

La corrispondenza dei nomi delle due città non sempre coincide del tutto quindi avevo pensato che si potrebbe cercare la corrispondenza migliore che su una scala da 0 a 1, con 0 corrispondenza nulla e 1 corrispondenza massima, si sceglie quella con il valore più vicino a 1. E' importante l'ordine delle lettere e le maiuscole con le minuscole, a volte ci sono anche dei numeri insieme alle lettere nella stessa cella.

Grazie mille per il vostro aiuto.
markvis92
Newbie
 
Post: 7
Iscritto il: 21/09/14 17:02

Sponsor
 

Re: RICONOSCIMENTO STRINGHE

Postdi Zer0Kelvin » 21/09/14 21:53

Ciao.
Il problema è risolvibile, anche se la corrispondenza parziale lo complica.
Sarebbe opportuno che tu allegassi dei files di esempio su cui lavorare; almeno un esempio di Riepilogo ed un esempio di NazioneXY con anche i vari casi di corrispondenza parziale
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: RICONOSCIMENTO STRINGHE

Postdi markvis92 » 22/09/14 08:34

nazione1
nazione2
riepilogo

Come puoi vedere i nomi non sono perfettamente uguali ma sono abbastanza simili, se vengono considerati la posizione che occupano le lettere, le maiuscole e le minuscole, i numeri e i simboli credo che possa funzionare.
Magari si potrebbe implementare un codice che inizia la ricerca solo se il file nazione corrispondente è aperto altrimenti procede con la cella successiva, se tutti i file sono chiusi la ricerca fallisce e potrebbe comparire un message box con la spiegazione dell'errore.
markvis92
Newbie
 
Post: 7
Iscritto il: 21/09/14 17:02

Re: RICONOSCIMENTO STRINGHE

Postdi Zer0Kelvin » 22/09/14 10:21

Caio.
La situazione è più complessa di come poteva sembrare (i nomi possono essere composti da più parole, ci sono parole che non fanno parte dei nomi ecc...) e penso di no essere in grado di fornirti una soluzione.
Credo che per procedere occorrerebbe almeno avere un elenco di tutti i nomi delle città.
Io comunque passo la palla... :oops:
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: RICONOSCIMENTO STRINGHE

Postdi wallace&gromit » 22/09/14 14:22

Ciao, propongo di guardare il tutto in un'altra ottica:
secondo me devi lavorare prima sui file di origine dati.
Allego un esempio per Norvegia (ma si applicano facilmente anche a Svezia e presumo anche agli altri), dove si trova un elenco di partite senza suddivisione tra i nomi di squadra.
Per es. "AalesundsBodø/Glimt"
con le formule che ho aggiunto in colonna F, G, H, I ottengo in H e I i nomi delle squadre nelle singole celle: H: Aalesunds; I: Bodø/Glimt. Da lì penso che sarà più facile partire per le tue elaborazioni successive.

Le formule per arrivarci sono in F (controlla la lunghezza del nome della squadra di riferimento (in questo caso Aalesunds):
Codice: Seleziona tutto
=SE(VAL.ERRORE(B2)=7;LUNGHEZZA(A2);F3)

in G (verifica se la squadra gioca in casa o in trasferta):
Codice: Seleziona tutto
=SE(E(SINISTRA(A2;F2)=SINISTRA(A3;F2);SINISTRA(A2;F2)=SINISTRA(A4;F2));"C";"T")

in H (estrae la squadra di casa)
Codice: Seleziona tutto
=SE(G2="C";SINISTRA(A2;F2);SINISTRA(A2;LUNGHEZZA(A2)-F2))

in G (estrae la squadra in trasferta)
Codice: Seleziona tutto
=SE(G2="C";DESTRA(A2;LUNGHEZZA(A2)-F2);DESTRA(A2;F2))


ecco il link
http://www.filedropper.com/norvegiamod

P.S. la formula nella colonna G ho dovuto modificarla per problemi con l AIK in Svezia, ora fa il confronto su almeno tre partite
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: RICONOSCIMENTO STRINGHE

Postdi markvis92 » 23/09/14 16:53

se può essere d'aiuto ho già un elenco delle singole squadre (senza distinzione tra casa e fuori casa) sempre nel file delle singole nazioni. Come dovrei fare poi a collegarle alla cella completa dove ci sono entrambe le squadre? Perchè alla fine è li che devo posizionarmi.
markvis92
Newbie
 
Post: 7
Iscritto il: 21/09/14 17:02

Re: RICONOSCIMENTO STRINGHE

Postdi wallace&gromit » 23/09/14 17:56

per fare il confronto successivo è necessario che nel file di base le partite vedano distinte la squadra in casa e quella in trasferta.
Se riesci a fare il primo passo con le formule che ti ho indicato poi passiamo alla fase successiva di ricerca nel file riepilogo
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: RICONOSCIMENTO STRINGHE

Postdi markvis92 » 24/09/14 06:49

Facciamo allora caso che i file delle nazioni siano strutturati come dici tu, ovvero una tabella dove nella colonna A c'è la squadra in casa nella colonna B la squadra in trasferta e in C-D-E ci sono dei numeri. I nomi delle squadre del file delle nazioni sono, nella maggior parte dei casi, diversi da quelli del file riepilogo perché l'origine dati è differente. A questo punto come si dovrebbe procedere? Grazie mille per l'aiuto :)
markvis92
Newbie
 
Post: 7
Iscritto il: 21/09/14 17:02

Re: RICONOSCIMENTO STRINGHE

Postdi wallace&gromit » 26/09/14 20:12

ho elaborato uno spunto che deve essere ancora implementato per i tuoi dati.
Non ho più trovato sul forum il topic in cui se ne parlava, quindi ho cercato di ricostruire una macro a modo mio, ed è questa:
Codice: Seleziona tutto
Sub cerca()
UltimoDato = Cells(Rows.Count, "A").End(xlUp).Row
UltimoCerca = Cells(Rows.Count, "D").End(xlUp).Row
migliore = 0
miglioreTesto = "nessuna corrispondenza"

For ElementiDato = 2 To UltimoDato
For ElementiCerca = 2 To UltimoCerca
For lettereDato = 1 To Len(Cells(ElementiDato, 1))
riprendi:
sequenza = 0
For LettereCerca = 1 To Len(Cells(ElementiCerca, 4))
If Mid(Cells(ElementiDato, 1), lettereDato, 1) = Mid(Cells(ElementiCerca, 4), LettereCerca, 1) Then
sequenza = sequenza + 1
tieniCerca = LettereCerca
tieniDato = lettereDato
GoTo ContinuaSequenza
End If
Next LettereCerca
Next lettereDato
GoTo CercaProssimo


ContinuaSequenza:
rimanenti = Len(Cells(ElementiDato, 1)) - tieniDato + 1
For seq = 2 To rimanenti
If Mid(Cells(ElementiDato, 1), tieniDato, seq) = Mid(Cells(ElementiCerca, 4), tieniCerca, seq) Then
sequenza = sequenza + 1
If sequenza > maxpunti Then
maxpunti = sequenza
migliore = ElementiCerca
miglioreTesto = Cells(migliore, 4)

End If
GoTo ciclaSeq
End If
lettereDato = lettereDato + 1
GoTo riprendi

ciclaSeq:
Next seq
CercaProssimo:
Next ElementiCerca

inserisci:
Cells(ElementiDato, 2) = miglioreTesto
Cells(ElementiDato, 3) = maxpunti
migliore = 0
miglioreTesto = "nessuna corrispondenza"
maxpunti = 0

Next ElementiDato

End Sub

Puoi fare una prova inserendo in colonna A a partire da A2 dei nomi che vuoi e in D a partire da D2 dei nomi non necessariamente identici. La macro trascriverà la migliore corrispondenza e la sequenza di caratteri simili più lunga che ha trovato.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: RICONOSCIMENTO STRINGHE

Postdi Flash30005 » 27/09/14 06:36

Volevo dare una mano ma non mi riesce di scaricare nessuno dei file che avete linkato.

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "RICONOSCIMENTO STRINGHE":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti