Zellinhalt über mehrere Zellen kopieren mit WENN und User Form

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    Zellinhalt über mehrere Zellen kopieren mit WENN und User Form

    Guten Morgen zusammen,

    ich bin leider nur Anfängerin im Thema VBA und stehe jetzt vor einer Aufgabe, die ich selbst nicht so leicht gelöst bekomme... aber vielleicht ist es ja für jemanden von euch kein Problem?

    Ich habe zwei Listen mit Artikeln, wobei ein Artikel nicht über eine Artikelnummer, sondern über vier Zellen (Spalten A-D) eindeutig identifiziert wird. Jetzt brauche ich ein Makro, das mir am Ende eine Liste in einem weiteren Tabellenblatt ausgibt, die alle Artikelkombinationen enthält, die in mind einer der zwei Tabellen steht. Sortiert werden soll das ganze nach Artikelfamilien (erkennt man an den ersten drei Buchstaben der Artikelnummer (=eine der vier Zellen), mehrere Buchstabenkombinationen sind in einer Familie)

    Vorgestellt habe ich mir das so:
    1. Dialogfenster öffnet sich mit Auswahl der zu analysierenden Familie (am besten Dropdown-Menü, habe im Internet gelesen dass das über UserForms möglich sei? Als Beispiel: Familen Food und Non-Food, zur Familie Food gehören z.B. Artikel mit 3DC und A2S zu Beginn der Artikelnummer)
    2. Lese ersten Datensatz aus Tabelle 1
    3. Prüfe, ob Datensatz zur zu analysierenden Familie gehört
    4. Wenn nein, lese nächsten Datensatz, Wenn ja, Prüfe ob Artikelkombination (=4 nebeneinanderstehende Zellen bereits in Ausgabebereich enthalten sind)
    5. Wenn nein, schreibe Artikelkombination in Ausgabebereich, wenn ja, lese nächsten Datensatz
    6. bis Ende Tabelle 1, dann selbes Vorgehen mit Tabelle 2

    Ich habe schon direkt zu Anfang Probleme, dieses Menü mit den Familien einzurichten und tue mich auch schwer mit der Kombination aus vier Zellen, deshalb kann ich euch nicht wirklich einen Anfangscode bieten... Danke euch schon mal :)

    LG Sabine
    so?

    Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim lrow As Long
    3. Dim lrow2 As Long
    4. Dim artikelnr As Range
    5. Dim artikelnr2 As Range
    6. lrow = Sheets("Tabelle1").Cells(Sheets("Tabelle1").Rows.Count, 1).End(xlUp).Row 'die 1 sthet für collumn A
    7. lrow2 = Sheets("Tabelle2").Cells(Sheets("Tabelle2").Rows.Count, 1).End(xlUp).Row
    8. Sheets("Tabelle1").Range("A:A").Interior.ColorIndex = 0
    9. For Each artikelnr In Sheets("Tabelle1").Range("A1:A" & lrow).Cells
    10. For Each artikelnr2 In Sheets("Tabelle2").Range("A1:A" & lrow2).Cells
    11. If artikelnr = artikelnr2 Then
    12. artikelnr.Interior.ColorIndex = 5
    13. Else
    14. End If
    15. Next
    16. Next
    17. lrow2 = Sheets("Tabelle2").Cells(Sheets("Tabelle2").Rows.Count, 1).End(xlUp).Row + 1
    18. For Each artikelnr In Sheets("tabelle1").Range("A1:A" & lrow).Cells
    19. If Left(artikelnr, 3) = "3DC" Or Left(artikelnr, 3) = "A2S" Then
    20. If artikelnr.Interior.ColorIndex = 5 Then
    21. Else
    22. Sheets("tabelle2").Range("A" & lrow2) = artikelnr
    23. Sheets("tabelle2").Range("A" & lrow2).Offset(0, 1) = artikelnr.Offset(0, 1)
    24. Sheets("tabelle2").Range("A" & lrow2).Offset(0, 2) = artikelnr.Offset(0, 2)
    25. Sheets("tabelle2").Range("A" & lrow2).Offset(0, 3) = artikelnr.Offset(0, 3)
    26. lrow2 = lrow2 + 1
    27. End If
    28. End If
    29. Next
    30. Sheets("Tabelle1").Range("A:A").Interior.ColorIndex = 0
    31. End Sub

    r0tzi schrieb:

    so?

    Quellcode

    1. If artikelnr = artikelnr2 Then

    Hallo R0tzi,

    danke für deine Antwort! Wie gesagt, ich bin wirklich nicht so bewandert in Sachen VBA und kenne definitiv nicht alles aus deinem Code, aber ich verstehe es so, dass hier "nur" die Artikelnummern verglichen werden. Für meine Aufgabe ist das leider nicht ausreichend, da meine Artikel mit unterschiedlichem Baujahr zb diesselbe Artikelnummer haben.

    Ich habe mich jetzt auch mal dran versucht und komme eben an der Stelle nicht weiter in der ich die Kombination aus vier Zellen abgleichen will. (Bitte nicht wundern, ist Schul-VBA von vor Jahren, sind bestimmt noch einige andere Fehler drin)



    Quellcode

    1. Rem Kombinationen einfügen
    2. Sub Überprüfung_Kombinationen()
    3. Rem Vorlauf
    4. Rem Deklarieren
    5. Dim Modell As String
    6. Dim Jahr As Integer
    7. Dim Werk As Double
    8. Dim Land As String
    9. Dim Modell2 As String
    10. Dim Jahr2 As Integer
    11. Dim Werk2 As Double
    12. Dim Land2 As String
    13. Dim Zähler As Integer
    14. Rem Initialisieren
    15. Zähler = 0
    16. Zähler2 = 0
    17. Zähler_Ausgabe = 0
    18. Rem 1. Datensatz lesen
    19. Modell = Worksheets("2016 Grund").Cells(2.1)
    20. Jahr = Worksheets("2016 Grund").Cells(2.2)
    21. Werk = Worksheets("2016 Grund").Cells(2.3)
    22. Land = Worksheets("2016 Grund").Cells(2.4)
    23. Modell2 = Worksheets("2017 Grund").Cells(2.1)
    24. Jahe2 = Worksheets("2017 Grund").Cells(2.2)
    25. Werk2 = Worksheets("2017 Grund").Cells(2.3)
    26. Land2 = Worksheets("2017 Grund").Cells(2, 4)
    27. Rem Hauptlauf
    28. Rem Prüfung Vorjahr
    29. While Modell <> ""
    30. If Left(Modell, 3) = Worksheets("Start").Cells(3.3) Or Left(Modell, 3) = Worksheets("Start").Cells(4.3) Or Left(Modell, 3) = Worksheets("Start").Cells(5.3) Or Left(Modell, 3) = Worksheets("Start").Cells(6.3) Then
    31. If Intersect(Modell & Jahr & Werk & Land, Range(Worksheets("Rechnung").Cells(3.1), Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 4))) Is Nothing Then
    32. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 1) = Modell
    33. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 2) = Jahr
    34. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 3) = Werk
    35. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 4) = Land
    36. Zähler_Ausgabe = Zähler_Ausgabe + 1
    37. End If
    38. End If
    39. Zähler = Zähler + 1
    40. Modell = Worksheets("2016 Grund").Cells(2 + Zähler, 1)
    41. Jahr = Worksheets("2016 Grund").Cells(2 + Zähler, 2)
    42. Werk = Worksheets("2016 Grund").Cells(2 + Zähler, 3)
    43. Land = Worksheets("2016 Grund").Cells(2 + Zähler, 4)
    44. Wend
    45. Rem Prüfung aktuelles Jahr
    46. While Modell2 <> ""
    47. If Left(Modell2, 3) = Worksheets("Start").Cells(3.3) Or Left(Modell2, 3) = Worksheets("Start").Cells(4.3) Or Left(Modell2, 3) = Worksheets("Start").Cells(5.3) Or Left(Modell2, 3) = Worksheets("Start").Cells(6.3) Then
    48. If Intersect(Modell2 & Jahr2 & Werk2 & Land2, Range(Worksheets("Rechnung").Cells(3.1), Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 4))) Is Nothing Then
    49. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 1) = Modell2
    50. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 2) = Jahr2
    51. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 3) = Werk2
    52. Worksheets("Rechnung").Cells(3 + Zähler_Ausgabe, 4) = Land2
    53. Zähler_Ausgabe = Zähler_Ausgabe + 1
    54. End If
    55. End If
    56. Zähler2 = Zähler2 + 1
    57. Modell2 = Worksheets("2016 Grund").Cells(2 + Zähler2, 1)
    58. Jahr2 = Worksheets("2016 Grund").Cells(2 + Zähler2, 2)
    59. Werk2 = Worksheets("2016 Grund").Cells(2 + Zähler2, 3)
    60. Land2 = Worksheets("2016 Grund").Cells(2 + Zähler2, 4)
    61. Wend
    62. Rem Nachlauf
    63. MsgBox ("Kombinationen 2016:" & Zähler + 1 & "& Kombinationen 2017:" & Zähler2 + 1)
    64. End Sub
    Hallo,

    ja nur die Artikelnummer wird verglichen. was du tun kannst, du kann den String zusammensetzen aus allen 4 Zellen.

    Quellcode

    1. code = artikelnr & artikelnr.Offset(0, 1) & artikelnr.Offset(0, 2) & artikelnr.Offset(0, 3)
    2. code2 = artikelnr2 & artikelnr2.Offset(0, 1) & artikelnr2.Offset(0, 2) & artikelnr2.Offset(0, 3)
    3. If code = code2 Then


    du vergleichst also die 2 strings auf beiden tabellenblätter miteinander

    dann bekommst du eine hoffe ich einmaligen "code" der dann verglichen wird.
    Also was der code macht, er vergleicht die artikelnummern und die, die bereits existieren, werden blau markiert. die blau markierten, werden NICHT kopiert, sondern nur die nicht markierten.

    nach dem durchlauf, wird das blau auch wieder entfernt für den nächsten durchlauf. ich handhabe vba recht einfach.. wenn du noch fragen zu einem spezifischen punkt hast....