Ich habe folgendes Vorhaben in Excel mittels VBA:
Eine Excel-Datei hat zwei Tabellenblätter. Im Blatt "Nummern" stehen zeilenweise Datensätze, bestehend aus je zwei Nummern und dazugehörigen Info-Texten. Die Nummern in Spalte A beginnen immer mit einer 2, die in Spalte B immer mit einer 3.
Diese Nummern sollen nun an die richtigen Stellen im Blatt "Gesamtliste" kopiert werden. Die Position (d.h. Zeile und Spalte), wohin eine Nummer in die Gesamtliste kopiert werden soll, ergibt sich so:
- Die Bezeichnung der Spalte ergibt sich bei einer 2er-Nummer aus den ersten drei Stellen des Inhalts, der in der Spalte "Größe" im Blatt "Nummern" steht (hier: 200). Bei einer 3er-Nummer ergibt sich die Bezeichnung der Spalte auch aus diesen drei Stellen plus einem "S" (hier: 200S).
- Die Bezeichnung der Zeile ergibt sich aus dem Materialkurztext, wobei die drei Punkte immer ... nur ein Platzhalter für die Größe (hier 200) sind. Für diese Aufgabe habe ich schon folgenden Test-Code hier aus dem Forum bekommen:
Sub Suche()
Dim lZ As Long, i As Long, wo As Integer, lZGesamt As Long
Dim Inhalt As String, Inhalt1 As String
Dim wksGesamt As Worksheet, wksNrn As Worksheet
Dim c As Range
Dim Startadresse As String
Set wksGesamt = Worksheets("Gesamtliste")
Set wksNrn = Worksheets("Nummern")
wksNrn.Activate
lZ = Cells(Rows.Count, 3).End(xlUp).Row + 1
For i = 2 To lZ
Inhalt = Cells(i, 3).Value
wo = InStr(1, Inhalt, " DS", 1)
If wo > 0 Then
Inhalt = Mid(Inhalt, 1, wo - 1)
Cells(i, 7) = Inhalt
' nun die Texte in der Gesamtliste suchen
wksGesamt.Activate
lZGesamt = wksGesamt.Cells(Rows.Count, 1).End(xlUp).Row
With wksGesamt.Range("A3:A" & lZGesamt)
Inhalt1 = Left(Inhalt, Len(Inhalt) - 6) ' Suche ohne die 200 C
Set c = .Find(Inhalt1, LookIn:=xlValues, lookAt:=xlPart)
If Not c Is Nothing Then
Startadresse = c.Address
Do
Application.Goto Reference:=wksGesamt.Range("A" & c.Row)
MsgBox "Gesuchter Begriff: " & Inhalt & Chr(10) & "Gefundener Begriff: " & c.Value & Chr(10) & "in Zeile: " & c.Address
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Startadresse
End If
End With
wksNrn.Activate
End If
Next i
End Sub
Dieser Code sollte nur noch statt einer MsgBox die passende Zeile ausspucken, in der der Suchtext gefunden wird.
Ein Beispiel: Die Nummer 20011687 aus der Basistabelle muss in Zelle F108, die 30014394 muss an Position G108. Hier die Datei: https://www.herber.de/bbs/user/37144.xls
Grüße und vielen Dank schon mal,
Matthias