18.06.2018, 12:37
Hallo ich möchte gerne zwei Tabellenblätter durchsuchen und dann die Ergebnisse in ein neues Tabellenblatt eintragen.
Erklärung:
Die Reiter "Report" und "All Users" nach den werten aus dem Reiter "Organization1" durchsuchen. Die Ergebnisse sollen in einem neuen Reiter landen, dieser bekommt den Namen aus A1 in Organization1 aber auf 31 Zeichen begrenzt.
Als erstes muss der Reiter "All Users" durchsucht werden. Und Zwar die Spalte K ab Zeile 46 nach dem MFC aus C2 Organization1 und die Spalte D nach A1 Organization 1
Dann muss der Reiter "Report" durchsucht werden. In der Spalte B ab Zeile 9 nacha A1 aus Organization und in H ab Zeile 9 nach G2 aus Organization 1
Die Ergebnisse müssen miteinander verglichen werden. Ein User der sowohl in "All Users" als auch in "Reports" auftaucht ist nicht relevant. Ein User der nur in "All Users" auftaucht soll in dem neu erstellten Reiter eingetragen werden.
Ein Beispiel dafür wie der neue Reiter aussehen soll findet ihr in der Tabelle.
Jetzt soll nach der nächsten Kombination gesucht werden Also A1 C3 und G3
A1 bleibt immer gleich
Das Ergebnis soll ans Ende der im 1. Schritt erstellten Tabelle geschrieben werden.
Das ganze soll für alle Wertepaare durchgeführt werden.
Sobald kein weiterpaar eingetragen ist kann abgebrochen werden.
Ich habe keine Idee, wie ich die Werte Vergleichen soll. Ausserdem werden bei mir auch werte eingetragen die nicht eingetragen werden sollten z.B. B9 aus "Reports" obwohl ich erst ab B10 die werte kopiere.
Im Anhang findet ihr eine kleine Beispieltabelle sowie ein Foto der Fehler.
Ich hoffe ihr könnt mir weiterhelfen.
Mein Code:
Erklärung:
Die Reiter "Report" und "All Users" nach den werten aus dem Reiter "Organization1" durchsuchen. Die Ergebnisse sollen in einem neuen Reiter landen, dieser bekommt den Namen aus A1 in Organization1 aber auf 31 Zeichen begrenzt.
Als erstes muss der Reiter "All Users" durchsucht werden. Und Zwar die Spalte K ab Zeile 46 nach dem MFC aus C2 Organization1 und die Spalte D nach A1 Organization 1
Dann muss der Reiter "Report" durchsucht werden. In der Spalte B ab Zeile 9 nacha A1 aus Organization und in H ab Zeile 9 nach G2 aus Organization 1
Die Ergebnisse müssen miteinander verglichen werden. Ein User der sowohl in "All Users" als auch in "Reports" auftaucht ist nicht relevant. Ein User der nur in "All Users" auftaucht soll in dem neu erstellten Reiter eingetragen werden.
Ein Beispiel dafür wie der neue Reiter aussehen soll findet ihr in der Tabelle.
Jetzt soll nach der nächsten Kombination gesucht werden Also A1 C3 und G3
A1 bleibt immer gleich
Das Ergebnis soll ans Ende der im 1. Schritt erstellten Tabelle geschrieben werden.
Das ganze soll für alle Wertepaare durchgeführt werden.
Sobald kein weiterpaar eingetragen ist kann abgebrochen werden.
Ich habe keine Idee, wie ich die Werte Vergleichen soll. Ausserdem werden bei mir auch werte eingetragen die nicht eingetragen werden sollten z.B. B9 aus "Reports" obwohl ich erst ab B10 die werte kopiere.
Im Anhang findet ihr eine kleine Beispieltabelle sowie ein Foto der Fehler.
Ich hoffe ihr könnt mir weiterhelfen.
Mein Code:
Code:
Sub Schaltfläche15_Klicken()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim wksO As Worksheet, wksX As Worksheet
Dim i As Long, blnNeu As Boolean
Dim iLastrow1 As Long, iLastrow2 As Long
Set wksO = ThisWorkbook.Worksheets("Organization1")
iLastrow1 = Sheets("All Users").Cells(Rows.Count, 4).End(xlUp).Row
iLastrow2 = Sheets("Report").Cells(Rows.Count, 2).End(xlUp).Row
If Len(wksO.Cells(1, 1)) > 0 Then
If f_x(Left(wksO.Cells(1, 1), 31)) Then
Set wksX = Worksheets(Left(wksO.Cells(1, 1), 31))
Else
Set wksX = Worksheets.Add
wksX.Name = Left(wksO.Cells(1, 1), 31)
blnNeu = True
End If
For i = 2 To 7
Sheets("All users").Range("$A$46:$Y$" & iLastrow1).AutoFilter Field:=4, Criteria1:=wksO.Cells(1, 1)
Sheets("All users").Range("$A$46:$Y$" & iLastrow1).AutoFilter Field:=11, Criteria1:=wksO.Cells(i, 3)
Sheets("Report").Range("$A$9:$O$" & iLastrow2).AutoFilter Field:=2, Criteria1:=wksO.Cells(1, 1)
Sheets("Report").Range("$A$9:$O$" & iLastrow2).AutoFilter Field:=8, Criteria1:=wksO.Cells(i, 7)
Sheets("All users").Range("E47:E" & Sheets("All users").Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Destination:=wksX.Range("A" & wksX.Cells(Rows.Count, 1).End(xlUp).Row + 1)
Sheets("Report").Range("B10:B" & Sheets("Report").Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Destination:=wksX.Range("A" & wksX.Cells(Rows.Count, 1).End(xlUp).Row + 1)
With wksX
If blnNeu Then
.Cells(1, 1) = wksX.Name
.Cells(2, 1) = "User"
.Cells(2, 2) = "MFC"
.Cells(2, 3) = "Training Titel"
End If
.Range(.Cells(.Cells(.Rows.Count, 2).End(xlUp).Row + 1, 2), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2)) = wksO.Cells(i, 3)
.Range(.Cells(.Cells(.Rows.Count, 3).End(xlUp).Row + 1, 3), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 3)) = wksO.Cells(i, 7)
End With
Next
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Calculate
End Sub
Function f_x(ByVal strTab As String) As Boolean
On Error Resume Next
f_x = Not Worksheets(strTab) Is Nothing
End Function