Hallo,
die Aussicht auf die Lebensrettungsmjedaille
brachte mich zu folgendem Code
(bitte Änderung des Makronamens berücksichtigen!):
Sub MatchesSammeln()
'es werden alle Einträge gesammelt, bei denen ISIN und STK/Nominal(o) übereinstimmen
'Bei Match wird Spalte AA in eine neue Datei ausgegeben
'Es können Werte AA auch doppelt ausgegeben werden
Const Isin = "ISIN"
Const STK1 = "Nominal (o)"
Const STK2 = "STK"
Const AA = "AA"
Const Datei = "Daten_Aus.xlsx"
Dim SIsin1 As Long, SIsin2 As Long, SStk1 As Long, Sstk2 As Long, Saa As Long
Dim zeile As Long, Erg() As String, anz As Long, FName, NewWB As Object, found, firstaddr
Dim Q1 As Object, Q2 As Object
Set Q1 = ThisWorkbook.Sheets(1)
On Error Resume Next
Set Q2 = Workbooks(Datei).Sheets(1)
On Error GoTo 0
If Q2 Is Nothing Then 'Datei öffnen
OM: FName = Application.GetOpenFilename("Exceldateien (*.xlsx), *.xlsx", , "Datei " & Datei & " öffnen")
If FName = False Then Exit Sub
If InStr(1, FName, Datei) = 0 Then
MsgBox "Der Dateiname entspricht nicht der Vorgabe " & Datei & ". Dateiauswahl wiederholen"
GoTo OM
End If
Set Q2 = Workbooks.Open(FName)
Set Q2 = Q2.Sheets(1)
End If
On Error Resume Next
With Q1 'Spalten bestimmen
SStk1 = .Rows(1).Find(what:=STK1, lookat:=xlWhole, MatchCase:=True).Column
SIsin1 = .Rows(1).Find(what:=Isin, lookat:=xlWhole, MatchCase:=True).Column
End With
With Q2
Sstk2 = .Rows(1).Find(what:=STK2, lookat:=xlWhole, MatchCase:=True).Column
SIsin2 = .Rows(1).Find(what:=Isin, lookat:=xlWhole, MatchCase:=True).Column
Saa = .Rows(1).Find(what:=AA, lookat:=xlWhole, MatchCase:=True).Column
End With
If Err.Number > 0 Then
MsgBox "Eine der Spaltenüberschriften " & STK1 & ", " & STK2 & ", " & Isin & ", " & AA & " wurde nicht gefunden.", vbCritical
Exit Sub
End If
ReDim Erg(1 To 1)
For zeile = 2 To Q1.Cells(Rows.Count, SIsin1).End(xlUp).Row
Set found = Q2.Columns(SIsin2).Find(what:=Q1.Cells(zeile, SIsin1), lookat:=xlWhole)
If Not found Is Nothing Then
firstaddr = found.Address
Do
If Q1.Cells(zeile, SStk1) = Q2.Cells(found.Row, Sstk2) Then 'Match found
anz = anz + 1
ReDim Preserve Erg(1 To anz)
Erg(anz) = Q2.Cells(found.Row, Saa)
End If
Set found = Q2.qolums(SIsin2).FindNext(found)
Loop Until found.Address = firstaddr
End If
Next zeile
If anz > 0 Then
Set NewWB = Workbooks.Add
For zeile = 1 To anz
NewWB.Sheets(1).Cells(zeile, 1) = Erg(zeile)
Next zeile
FName = Application.GetSaveAsFilename("", "Excel-Arbeitsmappe (*.xlsx),*.xlsx", , "Datei speichern unter")
If VarType(FName) <> 11 Then ActiveWorkbook.SaveAs Filename:=FName, FileFormat:=xlOpenXMLWorkbook
Else
MsgBox "kein Match"
End If
End Sub
Wenn etwas nicht klappt, schreib bitte
genau, was nicht klappt, und poste die Dateien ohne Daten, aber mit den Spaltenüberschriften, ein paar Testdaten mache ich mir dann zurecht.