excel - foglio con 2 colonne - ricerca elementi di una colonna esistenti anche nell'altra

Anonimo
2012-05-19T09:42:25+00:00

Ciao a tutti.

Pongo un problema relativo al confronto tra i contenuti di due colonne in Excel.

In particolare ho un foglio con due colonne affiancate (A e B).

Ognuna delle due contiene un elenco di nomi e cognomi, che posso agevolmente mettere in ordine alfabetico.

Ho la necessità di verificare quali elementi della prima colonna sono presenti anche nella seconda e quali no. A tale scopo sarebbe utile trovare un metodo (penso sia necessaria una macro) per evidenziare, ad esempio con un colore di sfondo, le celle della prima colonna il cui contenuto è presente anche in una qualsiasi cella della seconda colonna.

Siccome sono centinaia (o migliaia di elementi per ciascuna delle due colonne) mi è impossibile procedere a mano.

Ringrazio chi vorrà darmi qualche suggerimento, tenendo conto che la mia conoscenza del visual basic è pressoché nulla, anche se ho una buona conoscenza di excel e posso anche fare semplici operazioni di editing di codice (ad es. sostituire l'indirizzo di una cella con quello di un'altra).

Ciao.

Massimo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-05-19T15:33:39+00:00

Ad un primo terst (molto veloce però) mi sembra che funzioni. Grazie!

Farò ulteriore test e poi ti farò sapere.

Grazie.

Massimo

Restando alle macro, molto più veloce perchè non cicla la colonna B, non fa nessun select, ecc.:

Public Sub m()

    Dim lRiga As Long

    Dim lng As Long

    Dim lCont As Long

    Dim rng As Range

    With ActiveSheet

        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        Set rng = .Range("B2:B" & lRiga)

        For lng = 2 To lRiga

           lCont = Evaluate("=COUNTIF(B2:B" & lRiga & ",A" & lng & ")")

           If lCont > 0 Then

            .Range("A" & lng).Interior.ColorIndex = 3

            End If

        Next

    End With

    Set rng = Nothing

End Sub 

Ma potresti risolvere senza macro con la formattazione condizionale.

  1. Seleziona la cella A2
  2. Formato
  3. Formattazione condizionale
  4. La formula è:: =CONTA.SE($B$2:$B$10;$A3)>0      (modifica il Range della colonna B con il tuo)
  5. Pulsante: Formato e dai il formato che vuoi alla cella
  6. Ok
  7. Seleziona la cella A2
  8. Clic su copia formato
  9. Passa io mouse sulle celle della colonna A

In alternativa seleziona le celle della colonna A a parttire dalla

  1. Formato
  2. Formattazione condizionale
  3. La formula è:: =CONTA.SE($B$2:$B$10;$A3)>0      (modifica il Range della colonna B con il tuo)
  4. Prosegui fino al punto 6 precedente

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-05-19T11:35:46+00:00

un primo abbozzo di macro potrebbe essere questo

Sub Evidenzia()

   nomecella = "pippo"

   UR = Range("B" & Rows.Count).End(xlUp).Row

   While nomecella <> ""

      nomecella = ActiveCell.Value

      For Each c In Range("B1:B" & UR)

        If c.Value = nomecella Then

           ActiveCell.Select

           With Selection.Interior

            .Color = 65535

           End With

           Exit For

         End If

      Next

      ActiveCell.Offset(1, 0).Activate ' si sposta di 1 riga

    Wend

End Sub

seleziona la prima cella utile della colonna A e lancia la macro

La risposta è stata utile?

0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-05-19T17:30:24+00:00

    Public Sub m()   

        Dim lRiga As Long

        Dim lng As Long

        Dim lCont As Long

        Dim rng As Range

        With ActiveSheet

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

            Set rng = .Range("B2:B" & lRiga)

            For lng = 2 To lRiga

               lCont = Evaluate("=COUNTIF(B2:B" & lRiga & ",A" & lng & ")")

               If lCont > 0 Then

                .Range("A" & lng).Interior.ColorIndex = 3

                End If

            Next

        End With

        Set rng = Nothing

    End Sub 

     

    si vede la mano del maestro, infatti perché non sfruttare le funzioni già messe a disposizione ?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-05-19T13:49:27+00:00

    Ad un primo terst (molto veloce però) mi sembra che funzioni. Grazie!

    Farò ulteriore test e poi ti farò sapere.

    Grazie.

    Massimo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-05-19T13:41:52+00:00

    Molte grazie.

    Faccio un test per vedere come funziona.

    La risposta è stata utile?

    0 commenti Nessun commento