È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

confrontare il contenuto di due celle e ...

Ultimo Aggiornamento: 09/09/2018 09:30
Post: 6
Registrato il: 24/01/2018
Città: MILANO
Età: 46
Utente Junior
2010/13/16
OFFLINE
24/08/2018 09:50

Salve a tutti,

mi chiedevo se, in excel, fosse possibile fare come segue [SM=x423051]

1. confrontare il contenuto di due celle
2. evidenziare le parti che differiscono tra le due celle

esempio

cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE

risultato:

cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE

ho usato il grassetto come esempio, ma se evidenzia o cambia colore o mette in corsivo andrebbe bene tutto...basta che mi evidenzia le differenze a colpo d'occhio [SM=x423064]

mille grazie a chi mi può dare una mano!!!! [SM=x423047] [SM=x423047] [SM=x423047]
[Modificato da PamelinaPammyP 24/08/2018 09:50]
Post: 3.855
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
24/08/2018 11:55

Ciao Pamelina

Se i dati sono come li hai esposti la vedo piuttosto dura perchè Excel non è in grado di determinare (autonomamente) dove inizia o finisce un numero o una parola.

Se i numeri/parole fossero separati da uno spazio (o altro carattere) potrebbe essere relativamente più semplice.

Alfredo
Post: 3.856
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
24/08/2018 15:04

Ora sono fuori e non ho un pc ma se quando rientro dovesse venirmi qualche idea te la partecipo.

Alfredo
Post: 4.116
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
25/08/2018 12:07

Confermo quanto detto da alfrimpa, occorre partire da dati strutturati

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 3.857
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
25/08/2018 12:19

Andrea forse (e ripeto forse) con le RegExp si potrebbe far qualcosa ma, per quanto mi riguarda, queste non sono pane per i miei denti.

Alfredo
Post: 1.182
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
27/08/2018 07:09

Re:
PamelinaPammyP, 8/24/2018 9:50 AM:


1. confrontare il contenuto di due celle
2. evidenziare le parti che differiscono tra le due celle

esempio

cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE

risultato:

cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE




Ciao a tutti [SM=x423028]
nel Tuo esempio, "potrebbe" essere relativamente semplice...

Ma se le celle da confrontare fossero 3 o più di 3 come presumo,
rispetto a quale parametro dovrebbe essere effettuato il confronto:

un modello fisso?
la cella precedente?
la cella successiva?
una cella a caso?

Oltre a quanto ti hanno già consigliato:

riformula meglio la richiesta

allega un file con dati di fantasia e con la stessa struttura di quello su cui devi lavorare.

Ciao
Frank

[Modificato da tanimon 27/08/2018 07:18]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 6
Registrato il: 24/01/2018
Città: MILANO
Età: 46
Utente Junior
2010/13/16
OFFLINE
28/08/2018 16:55

grazie a tutti per le risposte [SM=x423047]

(scusate il ritardo ma sono stata male [SM=x423046] )

allego un file che spiega cosa mi aspetto:
1. si parte dal foglio originale che va lasciato così com'è
2. nel foglio elaborato ci dovrebbe essere la macro
3. la macro confronta il contenuto di due celle vicine (per poi passare alla riga successiva, sempre 2 celle per volta sulla stessa riga) evidenziando le lettere comuni, come ho fatto io in rosso

evidenziare ogni lettera comune sarebbe il top
evidenziare finchè le stringhe coincidono sarebbe comunque apprezzato

non posso fare ipotesi su lunghezza o posizione di lettere e/o numeri

ho letto qualcosa sulla funzione InStr( [start], string, substring, [compare] ) ... potrebbe fare al caso mio? [SM=x423051]

grazie mille a chi mi vorrà aiutare [SM=x423030]
[Modificato da PamelinaPammyP 28/08/2018 16:56]
Post: 3.863
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
29/08/2018 14:45

Ciao Pamenlina

Non sono per nulla sicuro di aver centrato l'obiettivo (anzi ne sono certo) comunque prova questa macro (che non so neanch'io come sia potuta venir fuori) sul foglio "Originale" del tuo file.

vb
Sub prova()
Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, 3).End(xlUp).Row
Set rng = Range("C2:c" & ur)
For Each cel In rng
    For i = 1 To Len(cel.Value)
        If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
            cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
        End If
    Next i
Next cel
End Sub


In pratica ogni lettera del contenuto di ogni cella in colonna C (da C2 all'ultima cella piena) viene ricercata nella corrispondente cella in colonna B e se trovata viene colorata di rosso.

Fai sapere anche se credo di aver esaurito le risorse [SM=g27828]
[Modificato da alfrimpa 29/08/2018 15:03]

Alfredo
Post: 7
Registrato il: 24/01/2018
Città: MILANO
Età: 46
Utente Junior
2010/13/16
OFFLINE
29/08/2018 17:44

Re:
alfrimpa, 29/08/2018 14.45:

Ciao Pamenlina

Non sono per nulla sicuro di aver centrato l'obiettivo (anzi ne sono certo) comunque prova questa macro (che non so neanch'io come sia potuta venir fuori) sul foglio "Originale" del tuo file.

vb
Sub prova()
Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, 3).End(xlUp).Row
Set rng = Range("C2:c" & ur)
For Each cel In rng
    For i = 1 To Len(cel.Value)
        If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
            cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
        End If
    Next i
Next cel
End Sub


In pratica ogni lettera del contenuto di ogni cella in colonna C (da C2 all'ultima cella piena) viene ricercata nella corrispondente cella in colonna B e se trovata viene colorata di rosso.

Fai sapere anche se credo di aver esaurito le risorse [SM=g27828]



[SM=x423047] [SM=x423047] [SM=x423047]

intanto grazie mille!!!
ti chiederei un favore, mi puoi commentare le righe illustrando quello che fanno? così inizio a studiarci un po' sopra [SM=x423051]

[SM=x423070] [SM=x423070] [SM=x423070]
Post: 3.864
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
29/08/2018 18:07

Ciao Pamelina provo a spiegare anche se poi comunque tu dovrai approfondire i concetti.

Con questo codice dichiaro le variabili necessarie

vb
Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range


con questo codice memorizzo nella variabile ur (ultima riga) il numero di riga dell'ultima cella piena della colonna C

vb
ur = Cells(Rows.Count, 3).End(xlUp).Row


Imposto l'intervallo da elaborare che va da C2 sino all'ultima cella piena della colonna C.

vb
Set rng = Range("C2:c" & ur)


Inizio un primo ciclo For Each che passa in rassegna ogni cella dell'intervallo rng

vb
For Each cel In rng


Inizio un altro ciclo For che esamina ogni carattere del contenuto della cella del precedente ciclo

vb
For i = 1 To Len(cel.Value)


Con queste istruzioni dico che se ogni singolo carattere della cella è contenuto nella rispettiva cella in colonna B allora me lo colori di rosso

vb
If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
End If


Chiudiamo i due cicli

vb
Next i
Next cel


si chiude la macro

vb
End Sub


Spero di essere stato chiaro ma credo che queste delucidazioni siano solo uno spunto.

Quello che ti consiglio di fare è approfondire i concetti:

1) variabili e loro tipi
2) cicli For (For i, For Each)
3) istruzione InStr()

L'istruzione Instr() cerca una stringa all'interno di un'altra e se la trova restituisce il numero di posizione.

Esempio se scrivo

vb
Instr(1, "Pamelina", "m")


Instr() mi restituirà 3 perché "m" è il terzo carattere di Pamelina a partire dall'inizio.

Ma poi la macro funziona?
[Modificato da alfrimpa 29/08/2018 18:43]

Alfredo
Post: 1.184
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
30/08/2018 13:21

Re:
PamelinaPammyP, 8/28/2018 4:55 PM:


3. la macro confronta il contenuto di due celle vicine (per poi passare alla riga successiva, sempre 2 celle per volta sulla stessa riga) evidenziando le lettere comuni, come ho fatto io in rosso

evidenziare ogni lettera comune sarebbe il top
evidenziare finchè le stringhe coincidono sarebbe comunque apprezzato





Ciao a tutti [SM=x423028]
ed un salto ad Alfredo [SM=g27811]

L'ho fatto e lo allego.

Ciao
Pamela, ci dovremmo essere, controlla e fai sapere.





Option Explicit

Sub confronta_ed_evidenzia()
Dim r As Long, n As Long
Dim parola As String, stringa As String, cercato As String
Dim test1 As Boolean, test2 As Boolean

Dim rng As Range, rng1 As Range
Dim ur As Long, ur1 As Long
Dim cellaA As Range, cellaB As Range

ur = Cells(Rows.Count, "e").End(xlUp).Row
ur1 = Cells(Rows.Count, "f").End(xlUp).Row

Application.ScreenUpdating = False

Set rng = Range("e2:e" & ur)
Set rng1 = Range("f2:f" & ur1)

For Each cellaA In rng
  parola = cellaA.Value
  stringa = cellaA.Offset(0, 1).Value

  For r = 1 To Len(parola)

    cercato = Mid(parola, r, 1)
    test1 = stringa Like "*" & cercato & "*"

    If test1 = True Then
    '===============================================================
    'Per questa riga ringrazio Alfredo: non la conoscevo. LOL
    cellaA.Characters(Start:=r, Length:=1).Font.ColorIndex = 3
    cellaA.Characters(Start:=r, Length:=1).Font.Bold = True
    '===============================================================

    End If
 Next r
Next cellaA
 
For Each cellaB In rng1
  parola = cellaB.Value
  stringa = cellaB.Offset(0, -1).Value

  For n = 1 To Len(parola)

    cercato = Mid(parola, n, 1)
    test2 = stringa Like "*" & cercato & "*"

    If test2 = True Then
    '===============================================================
    'Per questa riga ringrazio Alfredo: non la conoscevo. LOL
    cellaB.Characters(Start:=n, Length:=1).Font.ColorIndex = 3
    cellaB.Characters(Start:=n, Length:=1).Font.Bold = True
    '===============================================================
    End If
  Next n
Next cellaB


Set rng = Nothing
Set rng1 = Nothing
Application.ScreenUpdating = True
End Sub




Ciao
Frank
EDIT: avevo dimenticato l'allegato.

RE- EDIT per l'inserimento del codice nel Tag Code
[Modificato da tanimon 30/08/2018 18:56]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 3.865
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
30/08/2018 14:27

I miei più vivi complimenti Frank.

Un saluto.

Alfredo
Post: 1.185
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
30/08/2018 18:43

ciao Alfredo,
grazie, prima o poi ci sarei arrivato anche senza il tuo suggerimento ed avevo già predisposto quanto necessario ma lavorando, il tempo che mi rimane è veramente poco e per risolvere avrei fatto il giro del mondo in 2000 giorni.....
[SM=x423018]

Quella istruzione mi ha risolto un problema che credevo fosse circolare

Grande
[SM=x423028]

Ciao
Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 8
Registrato il: 24/01/2018
Città: MILANO
Età: 46
Utente Junior
2010/13/16
OFFLINE
09/09/2018 09:30

ringrazio tutti per l'ottimo risultato e ringrazio Alfredo per le spiegazioni [SM=x423065]

ora mi metto un po' a studiare quanto scritto [SM=x423024] [SM=x423029] [SM=x423051]
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 00:07. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com