If-Vergleich -> Hab ein Problem damit wie ich es am besten löse

  • Access

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von bandchef.

    If-Vergleich -> Hab ein Problem damit wie ich es am besten löse

    Hi Leute,

    ich hab folgende Problemstellung: Ich hab zwei Excel-Sheets. In einem Sheet ist der vollständige Name (Vorname, (evtl.) 2. Vorname, Nachname) in einer einzigen Spalte geschrieben. Dann gibts ein zweites Excel-Sheet in der der Vorname und der Nachname jeweils in einer Spalte stehen. Der 2. Vorname wird dort aber außen vor gelassen. Und genau das bildet das Problem. Ich muss nämlich nun Übereinstimmungen zwischen ersten und zweiten Excel-Sheet finden. Das Problem ist, nun bisheriger Code:

    Visual Basic-Quellcode

    1. If LCase(midws.Cells(a, 2)) = LCase(dbws.Cells(b, 4)) & " " & LCase(dbws.Cells(b, 5)) And flag = 1 Then
    2. d = d + 1
    3. wshilfe.Cells(d, 1) = dbws.Cells(b, 1)
    4. wshilfe.Cells(d, 2) = midws.Cells(a, 2) 'Name
    5. wshilfe.Cells(d, 3) = midws.Cells(a, 6)
    6. wshilfe.Cells(d, 4) = midws.Cells(a, 7)
    7. wshilfe.Cells(d, 5) = midws.Cells(a, 33)
    8. wshilfe.Cells(d, 6) = midws.Cells(a, 17)
    9. wshilfe.Cells(d, 7) = midws.Cells(a, 18)
    10. wshilfe.Cells(d, 8) = midws.Cells(a, 19)
    11. wshilfe.Cells(d, 9) = midws.Cells(a, 20)
    12. wshilfe.Cells(d, 10) = midws.Cells(a, 21)
    13. wshilfe.Cells(d, 11) = midws.Cells(a, 22)
    14. wshilfe.Cells(d, 12) = midws.Cells(a, 23)
    15. wshilfe.Cells(d, 13) = midws.Cells(a, 31)
    16. wshilfe.Cells(d, 17) = dbws.Cells(b, 17)
    17. wshilfe.Cells(d, 18) = dbws.Cells(b, 6)
    18. .
    19. .
    20. .



    Der Code prüft Excel-Sheet 1 auf Gleichheit mit Excel-Sheet 2 (in Bezug auf den Namen!) wobei das "zu Vergleichende" aus Excel-Sheet 2 mit dem Konkatenationsoperator auf das "Format" das Namens aus Excel-Sheet 1 gebracht wird. Problem sind nun die Namen die einen 2. Vornamen haben. Der 2. Vorname taucht nämlich NICHT in Excel-Sheet 2 auf, steht aber wohl in der Spalte in Excel-Sheet 1.

    Momentan hab ich nun immer das Problem, dass bei Namen mit 2. Vornamen mir das Programm dann keine Übereinstimmung findet, obwohl die "gleich Person" gemeint ist.

    Wie kann ich das Problem lösen? Hat da jemand eine Idee? Es wird in Excel-Sheet 1 wie in Excel-Sheet 2 eine Personen ID mitgeführt. Problem daran ist aber nun, dass in Excel-Sheet 1 die ID keine führende Nullen hat. In Excel-Sheet 2 aber führende Nullen dran geschrieben sind. Wie kann ich nun in Excel-Sheet 2 die führenden Nullen abschneiden? Das ist dann auch schon wieder schwierig für mich, weil die Anzahl der führenden Nullen variabel ist. Manchmal 2 Nullen, manchmal 3 Nullen. Wie erkenn ich das dann am besten?

    Außerdem besteht das Problem, dass Excel-Sheet 1 die ID als "Zahl" vorliegen hat und Excel-Sheet 2 als "Zahlen im Textformat" vorliegen hat.

    Danke!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bandchef“ ()

    Vergleiche die nur die ID's.

    Um die führenden Nullen wegzubekommen brauchst du diese nur (explizit) in einen Integer zu wandeln.
    Mal als Beispiel.
    Die Zelle A1 hat das Format Zahl und es steht "1" drin.
    Die Zelle B1 hat das Format Text und es steht "001" drin.

    Visual Basic-Quellcode

    1. Sub bla()
    2. Dim i As Integer, j As Integer
    3. Debug.Print ThisWorkbook.Worksheets(1).Cells(1, 2).Value
    4. Debug.Print ThisWorkbook.Worksheets(1).Cells(1, 1).Value
    5. i = CInt(ThisWorkbook.Worksheets(1).Cells(1, 1).Value)
    6. j = CInt(ThisWorkbook.Worksheets(1).Cells(1, 2).Value)
    7. If i = j Then
    8. Debug.Print ("Gleich")
    9. End If
    10. End Sub


    Theoretisch wäre die explizite Konvertierung durch Cint unnötig, weil i bzw. j bereits als Integer deklariert sind und diese implizit umgewandelt werden.

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!
    Die ID explizit in einen Integer umwandeln, damit die führenden Nullen verschwinden geht so einfach nicht, da ich nämlich unter "normalen" ID's auch ID's mit Buchstaben habe. Mittlerweile hab ich mir aber eine kleine Routine geschrieben, die das erledigt. Die sieht so aus:

    Visual Basic-Quellcode

    1. i = 1
    2. If Mid(dbws.Cells(b, 1), i, 1) = "0" Then
    3. While Mid(dbws.Cells(b, 1), i, 1) = "0"
    4. nominationSheetID = Right(dbws.Cells(b, 1), Len(dbws.Cells(b, 1)) - i) 'extractedID beinhaltet die ID ohne führende Nullen aus Nomination Sheet
    5. i = i + 1
    6. Wend
    7. Else
    8. nominationSheetID = dbws.Cells(b, 1)
    9. End If


    Ich denke, so könnte es klappen.