2016-03-30 15 views
0

Ich habe ein kleines Problem mit meinem Code, es funktioniert, wie ich will, als ich es gerade prüfte, aber als ich es in die wirkliche Arbeit stellte, stellte ich ein Problem, dass ich konnte t lösen hier ist das ProblemCode VBA stoppt Zelle im ersten Raum

der Code 2 Spalten zu anderen 2 Spalten vergleichen und das Ergebnis in anderen 3 Spalten das Problem ist, dass, wenn er die Daten aus der Zelle kopiert er stoppt, wenn es ein Leerzeichen zwischen den Zeichen so ist Kopiere nur die ersten Wörter zum Beispiel wenn ich '' Air Approval immer benötigt '' er kopiert nur '' Air '' aber nicht die Lochkette können Sie mir bitte helfen, dieses Problem zu lösen und danke im Voraus

Sub comparer() 
Dim Derlig As Long, Lig As Long, Ref As String 
Dim T_ab, D_ab As Object, T_cd, D_cd As Object 
Dim T_fgh, Cptr As Long, Separ 
Dim start As Single 

    start = Timer 
    Application.ScreenUpdating = False 

    Range("E2:G30000").Clear 

    Set D_ab = CreateObject("scripting.dictionary") 
    Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row 
    T_ab = Range("A2:B" & Derlig) 
    For Lig = 1 To UBound(T_ab) 
     Ref = T_ab(Lig, 1) & " " & T_ab(Lig, 2) 
     If Not D_ab.exists(Ref) Then D_ab.Add Ref, "" 
    Next 
    T_ab = D_ab.keys 

    Set D_cd = CreateObject("scripting.dictionary") 
    Derlig = Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row 
    T_cd = Range("C2:D" & Derlig) 
    For Lig = 1 To UBound(T_cd) 
     Ref = T_cd(Lig, 1) & " " & T_cd(Lig, 2) 
     If Not D_cd.exists(Ref) Then D_cd.Add Ref, "" 
    Next 
    T_cd = D_cd.keys 


    ReDim T_fgh(3, 0) 
    For Lig = 0 To UBound(T_ab) 
     If Not D_cd.exists(T_ab(Lig)) Then 
      Separ = Split(T_ab(Lig)) 
      ReDim Preserve T_fgh(3, Cptr) 
      T_fgh(0, Cptr) = Separ(0) 
      T_fgh(1, Cptr) = Separ(1) 
      Cptr = Cptr + 1 
     End If 
    Next 

    For Lig = 0 To UBound(T_cd) 
     If Not D_ab.exists(T_cd(Lig)) Then 
      Separ = Split(T_cd(Lig)) 
      ReDim Preserve T_fgh(3, Cptr) 
      T_fgh(0, Cptr) = Separ(0) 
      T_fgh(2, Cptr) = Separ(1) 
      Cptr = Cptr + 1 
     End If 
    Next 

    Range("F2").Resize(Cptr, 3) = Application.Transpose(T_fgh) 
    Derlig = Range("E2:H100000").Find(what:="*", searchdirection:=xlPrevious).Row 
    Range("F2:H" & Derlig).Borders.Weight = xlThin 

    Application.ScreenUpdating = True 
    MsgBox "comparaison efffectuée en " & Timer - start & " secondes" 

End Sub 
+0

ich würde beginnen durch ** dim ** ensioning Ihre Variablen richtig und geben ihnen verständliche Namen. Im Moment arbeiten Sie mit Varianten und es ist extrem umständlich zu lesen. –

+0

Hallo Danke für die Antwort, aber ich verstehe nicht, was meinst du? – mateos

+0

'Dim T_ab, D_ab Als Objekt'

Antwort

0

für alle, die interessiert sind dies ist die lösung für das problem es war einfach, aber ich konnte es einfach nicht am anfang ich brauchte nur "¤" in Separ = Split(T_cd(Lig), "¤") hinzufügen, um die gesamte kette

Verwandte Themen