VBA confronto tra stringhe



  • VBA confronto tra stringhe
    di TaJean data: 21/03/2016 15:11:23

    Ciao a tutti,
    ho il seguente problema che non riesco a risolvere.
    ho un foglio A e nella colonna C si sono dei dati univoci, ad esempio mela, pera, kiwi, banana etc ed un foglio B sempre nella colonna C altri dati univoci, mela, pera, kiwi etc.

    il mio scopo è confrontare le due colonne, e i dati del foglio A non trovati nel foglio B copiati su un terzo foglio.
    ho scritto il codice ma :
    1) è lentissimo e mi chiedevo magari un altra alternativa per renderlo più efficiente. visto che le colonne possono arrivare a 25000 valori
    2) ho effettuato un test con la colonna del foglio A con 1085 valori univoci e nel foglio B con 1083 valori univoci quindi il contatore dovrebbe restituire 2 invece mi da sempre zero.
    non capisco dove sbaglio.
    grazie a tutti per l'aiuto.
     
    Dim fglpart As String
    Dim fgldest As String
    Dim pand As String
    Dim Lrisultato As Integer
    
    pand = "P1"
    fglpart = pand & "OK"
    fgldest = pand & "Report"
    cont = 0
    
    CCI = Sheets(fglpart).range("C" & Rows.Count).End(xlUp).Row
    CCI = CCI - 1
    CCI2 = Sheets(fgldest).range("C" & Rows.Count).End(xlUp).Row
    CCI2 = CCI2 - 1
    
    For ariga = 1 To CCI
       For nriga = 1 To CCI2
    Lrisultato = StrComp(Sheets(fglpart).Cells(ariga, 3), Sheets(fgldest).Cells(nriga, 3), vbTextCompare)
    If Lrisultato = Null Then
    cont = cont + 1
    End If
        Next nriga
    Next ariga
    MsgBox cont
    



  • di Raffaele_53 data: 21/03/2016 16:07:29

    Questo il metodo più veloce che conosco.
    Cambia i nomi dei fogli
     
    Option Explicit
    Option Compare Text
    Sub ricerca()
    Dim X, Ur, Rr, Rg
    Rr = 2
    Rg = 2
    Ur = Sheets("foglio1").Range("C" & Rows.Count).End(xlUp).Row
    For X = 1 To Ur 'se innizia da 1
        If Application.WorksheetFunction.CountIf(Sheets("foglio2").Range("C:C"), Sheets("foglio1").Cells(X, 3)) = 1 Then
            Sheets("foglio3").Cells(Rr, 1) = Sheets("foglio1").Cells(X, 3) ' quelli trovati
            Rr = Rr + 1
        Else
            Sheets("foglio3").Cells(Rg, 2) = Sheets("foglio1").Cells(X, 3) ' quelli doppi o nulli
            Rg = Rg + 1
        End If
    Next X
    MsgBox "fatto"
    End Sub
    



  • di TaJean data: 21/03/2016 17:48:27

    Raffaele_53 grazie davvero, ho messo i fogli corretti l'ho provata ed è perfetta.

    semplicemente geniale

    TaJean