Condividi:        

confronta testo parziale in cella

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

confronta testo parziale in cella

Postdi wittelsbach » 26/03/13 23:05

Avrei bisogno di confrontare due celle e di aver restituito esito positivo anche se tra le due vi sia una corrispondenza parziale. Ovvero:
cella1 "mario rossi" ---> cella2 "luigi rossi" ***** ESITO POSITIVO

E' possibile effettuare un confronto come questo nella maniera più semplice possibile?

Grazie,
wittelsbach
Utente Senior
 
Post: 249
Iscritto il: 17/09/05 08:55

Sponsor
 

Re: confronta testo parziale in cella

Postdi ricky53 » 26/03/13 23:51

Ciao,
prova con la funzione "TROVA".
Per le modalità di utilizzo leggi la guida che ottieni digitando "=TROVA(" in una cella
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. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: confronta testo parziale in cella

Postdi Anthony47 » 27/03/13 02:39

Ovviamente con Trova bisogna gia' sapere quale parola cercare...

In alternativa si puo' usare una Funzione ad hoc; poiche' wittelsbach non si e' sciupato a definire quali regole vuoi utilizzare mi sono inventato che basta ci sia una parola (stringa separata da uno spazio) lunga almeno 3 caratteri in comune per avere esito positivo. Per questo inserisci in un Modulo standard il seguente codice:
Codice: Seleziona tutto
Function wComm(ByVal primo As String, ByVal secondo As String) As Boolean
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=98797
'Uso:
'  =WCOMM(PrimaFrase;SecondaFrase)
'  restituisce Vero se hanno almeno una parola in comune
'  per parola si intende una stringa separata nella frase almeno da uno spazio
'
Dim my1Split, my2Split, I As Long, J As Long
my1Split = Split(primo, " "): my2Split = Split(secondo, " ")
'DLen = 0
For I = 0 To UBound(my1Split)
    For J = 0 To UBound(my2Split)
        If Len(my1Split(I)) > 2 And Len(my2Split(J)) > 2 Then
            If UCase(my1Split(I)) = UCase(my2Split(J)) Then
                wComm = True: Exit Function
            End If
        End If
    Next J
Next I
End Function
Poi nel tuo foglio userai una formula del tipo
Codice: Seleziona tutto
=WCOMM(PrimaFrase;SecondaFrase)

Restituira' Vero se le due frasi hanno almeno una parola in comune.
Per le mie definizioni, "amore" e "d'amore" non danno esito positivo; ma "amore" e "d' amore" (notare lo spazio
in "d' amore") si.

Fanne buon uso...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: confronta testo parziale in cella

Postdi wittelsbach » 27/03/13 10:43

Grazie mille dell'aiuto. Il Modulo di Anthony è perfetto e sofisticato. In ogni caso basterebbe capire se esiste una funzione che associa, forzatamente, anche se non vi sia una corrispondenza precisa. Ad esempio utilizzando gli asterischi, se non sbaglio posso impostare una porzione di parola verso la quale restituirebbe una corrispondenza.
Con la formula semplicissima =CONTA.SE(A1;"*ro*") ROSSI (cella1) E ROSS (cella2) DAREBBERO ESITO POSITIVO.

E' possibile effettuare uno STRINGA.ESTRAI dalla cella1 ed inserire il dato tra gli asterischi?
wittelsbach
Utente Senior
 
Post: 249
Iscritto il: 17/09/05 08:55

Re: confronta testo parziale in cella

Postdi Anthony47 » 27/03/13 11:14

La formula con la funzione Trova suggerita da Ricky da lo stesso risultato senza bisogno di usare asterischi; es
Codice: Seleziona tutto
=TROVA("ros";A2)
Ti restituira' un valore se la stringa e' presente oppure #Valore se assente.
Mi pare sia quello che ti serve...

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

Re: confronta testo parziale in cella

Postdi wittelsbach » 27/03/13 16:57

Ok, ma se al posto di "ros" dovessi cercare un testo all'interno di una cella, come posso fare? Cioè se all'interno di A1 ci fosse "ross", la formula TROVA(a1;A2) funzionerebbe allo stesso modo? Lo chiedo perché i confronti con il TROVA dovrebbero essere effettuati su molteplici righe e dovrei automatizzare le formule con un trascinamento consecutivo.
wittelsbach
Utente Senior
 
Post: 249
Iscritto il: 17/09/05 08:55

Re: confronta testo parziale in cella

Postdi ricky53 » 27/03/13 18:27

Ciao,
SI.
Tu hai provato?

ATTENZIONE: se trascini/copi devi mettere il "$" nella formula. Ossia al posto di "A1" devi scrivere "A$1".
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. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: confronta testo parziale in cella

Postdi scossa » 26/07/13 17:04

Anthony47 ha scritto:In alternativa si puo' usare una Funzione ad hoc; poiche' wittelsbach non si e' sciupato a definire quali regole vuoi utilizzare mi sono inventato che basta ci sia una parola (stringa separata da uno spazio) lunga almeno 3 caratteri in comune per avere esito positivo. Per questo inserisci in un Modulo standard il seguente codice:
Codice: Seleziona tutto
Function wComm(ByVal primo As String, ByVal secondo As String) As Boolean
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=98797
'Uso:
'  =WCOMM(PrimaFrase;SecondaFrase)
'  restituisce Vero se hanno almeno una parola in comune
'  per parola si intende una stringa separata nella frase almeno da uno spazio
'
Dim my1Split, my2Split, I As Long, J As Long
my1Split = Split(primo, " "): my2Split = Split(secondo, " ")
'DLen = 0
For I = 0 To UBound(my1Split)
    For J = 0 To UBound(my2Split)
        If Len(my1Split(I)) > 2 And Len(my2Split(J)) > 2 Then
            If UCase(my1Split(I)) = UCase(my2Split(J)) Then
                wComm = True: Exit Function
            End If
        End If
    Next J
Next I
End Function
Poi nel tuo foglio userai una formula del tipo
Codice: Seleziona tutto
=WCOMM(PrimaFrase;SecondaFrase)

Restituira' Vero se le due frasi hanno almeno una parola in comune.
Per le mie definizioni, "amore" e "d'amore" non danno esito positivo; ma "amore" e "d' amore" (notare lo spazio
in "d' amore") si.


Ciao Anthony,

mi è piaciuta la tua UDF, ed ispirandomi ad essa ne ho creata una simile un po' più "articolata".

L'udf WordIntersect() confronta le singole parole (riconoscendo anche gli apostrofi) delle due stringhe passate come argomenti (obbligatiori) distinguendo o meno tra maiuscole e minuscole in base al terzo argomento (facoltativo) e:

    - se esiste una parola in comune, la restituisce (default), oppure restituisce VERO, dipende dal 4° argomento (facoltativo);

    - se non esiste una parola in comune, restituisce l'errore #N/D (default), oppure restituisce FALSO o una stringa vuota, dipende dal 4° argomento (facoltativo).

Alcuni Esempi di uso:
Codice: Seleziona tutto
=WordIntersect(A1;B1)
=WordIntersect(A1;B1;0;VERO)
=WordIntersect(A1;B1;1)
=WordIntersect(A1;B1;1;FALSO)
=WordIntersect(A1;B1;;FALSO)


Questo il codice della UDF:
Codice: Seleziona tutto
'----------------------------------------------------------------------------------------------------
' Function  : WordIntersect(Arg1, Arg2, [Arg3=vbTextCompare], [Arg4 = VbTriState ])
' Author    : scossa
' Date      : 26/07/2013
' Purpose   : confronta le singole parole di due stringhe
'             e restituisce la parola se almeno una è in comune
'             Per default il confronto non distingue tra maiuscole e minuscole,
'             ma impostando il terzo argomento a 0 o FALSO la distinzione viene fatta.
'             Se NON viene trovata una corrispondenza:
'               - se il quarto argomento è omesso o è -2 viene restituita l'errore #N/D
'               - se il quarto argomento è 0 o FALSO viene restituito FALSO
'               - se il quarto argomento è VERO o un numero > 0 viene restituito ""
'             Se  VIENE trovata una corrispondenza:
'               - se il quarto argomento è omesso o è -2 viene restituita la parola,
'                 altrimenti viene restituito VERO
'----------------------------------------------------------------------------------------------------
'

Function WordIntersect(ByVal sSentence1 As String, _
  ByVal sSentence2 As String, _
  Optional ByVal vbCompText As VbCompareMethod = vbTextCompare, _
  Optional ByVal bRetErr As VbTriState = vbUseDefault) As Variant
 
  Dim arrSentence1() As String
  Dim j As Long
 
  arrSentence1 = Split(Replace(sSentence1, "'", " "), " ")
  sSentence2 = "#" & Replace(Replace(sSentence2, "'", " "), " ", "#") & "#"
 
  'se non trova corrispondenza:
  Select Case bRetErr
    Case vbUseDefault 'argomento mancante o -2
      'restituisce l'errore #N/D:
      WordIntersect = CVErr(Excel.xlErrNA)
    Case vbFalse ' 0 o FALSO
      'restituisce FALSO
      WordIntersect = False
    Case Else 'VERO o qualsiasi altro valore
      'restitutisce ""
      WordIntersect = ""
  End Select
 
  For j = 0 To UBound(arrSentence1)
    If InStr(1, sSentence2, "#" & arrSentence1(j) & "#", Abs(vbCompText)) > 0 Then
      'se l'argomento bRetErr manca o è -2 restituisce la prima parola in comune
      'altrimenti restituisce VERO
      WordIntersect = IIf(bRetErr = vbUseDefault, arrSentence1(j), True)
      Exit For
    End If
  Next j

End Function


Spero aver fatto cosa gradita.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: confronta testo parziale in cella

Postdi Anthony47 » 26/07/13 23:33

Ciao scossa,
Ogni scambio ha un suo valore, proprio del concetto di knowledge share.
La funzione che avevo pubblicato era derivata da un lavoro piu' complesso che cercava in un doc word i paragrafi contenenti le parole provenienti da stringhe di ricerca, "pesandole" successivamente in funzione della "distanza" per creare un indice di attinenza. Purtroppo nei doc in Italiano il risultato era alquanto scarso e il progetto completo e' rimasto in qualche hard disc in soffitta, mentre delle udf tengo un archivio piu' a portata di mano.

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


Torna a Applicazioni Office Windows


Topic correlati a "confronta testo parziale in cella":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti