Hi Lukas,
der folgende Code sucht zuerst in Zeile 1 die Zellen mit den Begriffen "Bereich", "MatNr" und "Ausgabe" und schreibt sie jeweils auf die betreffende Variable. Im weiteren Verlauf des Codes wird dann die Spaltennummer der gefundenen Zelle (Spaltennummer der jeweilgen Variablen) verwendet:
Sub Zuordnung()
Dim objDic As Object
Dim Bereich As Variant
Dim lngLetzte As Long
Dim lngZeile As Long
Dim lngZaehler As Long
Dim rngZelle As Range
Dim arrDaten As Variant
Dim blnFilter As Boolean
Dim rngBereich As Range
Dim rngMatNr As Range
Dim rngAusgabe As Range
Set rngBereich = Rows(1).Find("Bereich", lookat:=xlWhole) '<== Zelle suchen in der "Bereich" steht
Set rngMatNr = Rows(1).Find("MatNr", lookat:=xlWhole) '<== Zelle suchen in der "MatNr" steht
Set rngAusgabe = Rows(1).Find("Ausgabe", lookat:=xlWhole) '<== Zelle suchen in der "Ausgabe" steht
Set objDic = CreateObject("Scripting.Dictionary")
lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Bereich = Range(Cells(2, rngMatNr.Column), Cells(2, rngMatNr.Column).End(xlDown))
For lngZeile = LBound(Bereich) To UBound(Bereich)
objDic(Bereich(lngZeile, 1)) = 0
Next
arrDaten = objDic.keys
If Not ActiveSheet.AutoFilterMode Then
Range("A1").CurrentRegion.AutoFilter
Else
blnFilter = True
End If
For lngZaehler = LBound(arrDaten) To UBound(arrDaten)
Range("A1").CurrentRegion.AutoFilter field:=rngMatNr.Column, Criteria1:=arrDaten(lngZaehler)
For lngZeile = 2 To lngLetzte
If Cells(lngZeile, 1).EntireRow.Height > 0 Then
For Each rngZelle In Range(Cells(2, rngBereich.Column), Cells(lngLetzte, rngBereich.Column)).SpecialCells(xlCellTypeVisible)
If InStr(Cells(lngZeile, rngAusgabe.Column), rngZelle) = 0 Then Cells(lngZeile, rngAusgabe.Column) = Cells(lngZeile, rngAusgabe.Column) & ";" & rngZelle
Next rngZelle
Cells(lngZeile, rngAusgabe.Column) = Mid(Cells(lngZeile, rngAusgabe.Column), 2)
End If
Next lngZeile
Next lngZaehler
If blnFilter = False Then Range("A1").CurrentRegion.AutoFilter
End Sub
Damit spielt es keine Rolle, in welcher Spalte die einzelnen Begriffe stehen - sie müssen nur so geschrieben sein, wie sie im Code stehen. Falls sie anders heißen musst du das nur entsprechend im Code anpassen - ich habe die betreffenden zeilen mit einem Kommentar versehen.
Bis später, Karin