|  
                                             
	Erst einmal den "Schleifen - Fehler" ausgebügelt schaut der Code wohl so aus 
Sub Artikelzuordnung()
'Artikel aus Tabellenblatt Materialinformation zu dem jeweiligen Complaint zuordnen.
'leere Artikelnummernfelder mit n/a füllen
Dim s As Integer
Dim i As Integer
   ThisWorkbook.Worksheets("query_export_results").Activate
   i = 2
   Do While Cells(i, 1) <> " "
      s = 2
    
      Do While Cells(s, 1) <> " "
         If Cells(i, 1).Value = Worksheets("Material Information").Cells(s, 1) Then
            If Worksheets("Material Information").Cells(s, 3).Value = "Yes" Then
               Worksheets("Material Information").Cells(s, 10).Copy Destination:=Worksheets _
                ("query_export_results").Cells(i, 3) 'Gerätetyp in Complaintübersicht in Spalte C (Machine Type) kopieren
            Else
            
               Worksheets("Material Information").Cells(s, 5).Copy Destination:=Worksheets _
                 ("query_export_results").Cells(i, 4)       'Artikelnummer in Complaintübersicht in Spalte D kopieren
               Worksheets("Material Information").Cells(s, 6).Copy Destination:=Worksheets _
                 ("query_export_results").Cells(i, 5) 'Artikelbezeichnung in Complaintübersicht in Spalte E Kopieren.
            End If
            
         End If
         s = s + 1
         
      Loop
                
      i = i + 1
      
   Loop
End Sub
	Damit greift der Vergleich aber max. 1 x und dann knallt deine Variable s an das Ende seiner Fahnenstange - Loop bis max. Integer Zahl *) 
	 
	*) arbeite ich mit Variablen die Zellzeilen ansprechen, dann wähle ich den "natürlichen" Datentyp LONG 
	 
	Was in deinem Fall aber nur das sinnlose Hochzählen verlängert, denn 
	 
	ThisWorkbook.Worksheets("query_export_results").Activate 
	 
	Du operierst also aus einem aktiven Arbeitsblatt und vergleichst eine Zelle daraus mit einer Zelle aus einem anderen Arbeitsblatt - OHNE 
	der zweiten Zelle einen Bezug zum anderen mitzugeben 
	 
	Do While Cells(i, 1) <> " " 
	      s = 2 
	    
	      Do While Cells(s, 1) <> " " 
	 
	 
	Ergo werden hier nicht zwei Zellen miteinander verglichen, da VBA ohne fehlenden Bezug immer die Zelle aus dem aktiven Arbeitsblatt versteht 
	 
	Zelle ist nicht leer und Zellinhalt = Zellinhalt, die Schleife wird nie unterbrochen 
     |