Condividi tramite

Confronto celle con vba

Anonimo
2015-08-10T12:18:54+00:00

Buongiorno,

ho cercato nel forum un argomento che potesse aiutarmi ma sinceramente non sono riuscito a trovarlo.

In pratica in un foglio excel ho bisogno di confrontare due colonne e cioè A1 con D1, A2 con D2,....,An con Dn che devono essere uguali fra loro (A1=D1, A2=D2 ecc.,) se questo non accade e uno dei confronti non rispetta la condizione, ho bisogno di un msg che mi indichi la cella della colonna D che non rispetta il requisito di uguaglianza con la corrispondente cella nella colonna A.

Grazie per la collaborazione.

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
  1. Anonimo
    2015-08-11T06:20:18+00:00

    Ciao Antonio, 

    Grazie!

    Prego!

    Per chiudere questo thread, vorrei gentilmente chiederti di segnare le risposte risolutive come Risposta. In questo modo, tu aiuterai anche coloro che potrebbero cercare soluzioni ai problemi simili negli archivi della Community.

    ===

    Regards,

    Norman

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2015-08-10T14:12:00+00:00

    Con il vb? Ci sarebbero altri modi.

    Comunque, questo codice confronta A1 con D1, ecc. del Foglio1 e ti avverte dove non c'è uguaglianza.

    MsgBox cella per cella:

    Public Sub m_1()

        Dim sh As Worksheet

        Dim lRiga As Long

        Dim lng As Long

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        With sh

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

            For lng = 1 To lRiga

                If .Cells(lng, 1).Value <> .Cells(lng, 4).Value Then

                    MsgBox "Celle: A" & lng & " - D" & lng & " diverse"

                End If

            Next

        End With

        Set sh = Nothing

    End Sub

    Unico MsgBox finale:

    Public Sub m_2()

        Dim sh As Worksheet

        Dim lRiga As Long

        Dim lng As Long

        Dim s As String

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        With sh

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

            For lng = 1 To lRiga

                If .Cells(lng, 1).Value <> .Cells(lng, 4).Value Then

                    s = s & "Celle: A" & lng & " - D" & lng & " diverse" & vbNewLine

                End If

            Next

        End With

        MsgBox s

        Set sh = Nothing

    End Sub

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-11T06:09:58+00:00

    Grazie!

    0 commenti Nessun commento
  2. Anonimo
    2015-08-10T14:55:36+00:00

    Grazie mille faccio una prova e ti riferisco.

    0 commenti Nessun commento
  3. Anonimo
    2015-08-10T14:17:27+00:00

    Ciao Antonio,

    In pratica in un foglio excel ho bisogno di confrontare due colonne e cioè A1 con D1, A2 con D2,....,An con Dn che devono essere uguali fra loro (A1=D1, A2=D2 ecc.,) se questo non accade e uno dei confronti non rispetta la condizione, ho bisogno di un msg che mi indichi la cella della colonna D che non rispetta il requisito di uguaglianza con la corrispondente cella nella colonna A.

    Supponendo che una semplice formula non sia sufficiente, prova qualcosa del genere:

    • Alt-F11 per aprire l'editor di VBA
    • Alt-IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range, Rng2 As Range, rCell As Range

        Dim LRow As Long

        Dim arr As Variant, arr2 As Variant

        Dim arrOut() As Variant

        Dim i As Long, j As Long, k As Long

        Dim sMsg As String

        Const sFoglio As String = "Foglio1"                      '<<=== Modifica

        Const primaColonna As String = "A"                     '<<=== Modifica

        Const secondaColonna As String = "D"                 '<<=== Modifica

        Const primaRiga As Long = 2                                '<<=== Modifica

        Const sStr As String = _

              "Le celle non uguale sono:"

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        With SH

            LRow = LastRow(SH, .Columns(primaColonna))

            Set Rng = .Range(primaColonna & primaRiga). _

                      Resize(LRow - primaRiga + 1)

            Set Rng2 = .Range(secondaColonna & primaRiga). _

                       Resize(LRow - primaRiga + 1)

        End With

        arr = Rng.Value

        arr2 = Rng2.Value

        For i = 1 To UBound(arr)

            If UCase(arr(i, 1)) <> UCase(arr2(i, 1)) Then

                j = j + 1

                ReDim Preserve arrOut(j)

                arrOut(j) = Rng.Cells(i).Address(0, 0) _

                          & vbTab _

                          & Rng2.Cells(i).Address(0, 0)

            End If

        Next i

        If CBool(j) Then

            sMsg = sStr & Join(arrOut, vbNewLine)

        Else

            sMsg = "Tutte le celle confrontate sono uguale"

        End If

        Call MsgBox(Prompt:=sMsg, _

                    Buttons:=vbInformation, _

                    Title:="CONFRONTO")

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

    End Function

    '<<========= 

    • Alt-Q per chiudere l'editor di VBA e tornare a Excel.
    • Alt-F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester | Esegui

    ===

    Regards,

    Norman

    0 commenti Nessun commento