Hi,
ich würde die Sache in etwa so angehen ( das ist keine komplette Lösung ! ):
Option Explicit
Sub Beispiel_z2_q1()
Dim rngData As Excel.Range
With Worksheets("q1")
' nach Daten in Spalte B filtern
Set rngData = MyFilterFunc("aa", .Columns("B"))
If Not rngData Is Nothing Then
' nur Daten aus Spalten A, B und D beachten
Set rngData = Intersect(rngData.EntireRow, .Range("A:A, B:B, D:D"))
' Daten kopieren (Beispiel):
rngData.Copy Worksheets("z2").Range("A1")
End If
End With
End Sub
Public Function MyFilterFunc( _
SearchFor As String, _
SearchIn As Excel.Range, _
Optional SearchOrder As XlSearchOrder = xlByColumns _
) As Excel.Range
Dim rngData As Excel.Range
Dim rngResult As Excel.Range
Dim strFirstAddr As String
Set rngResult = SearchIn.Find(SearchFor, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=SearchOrder, MatchByte:=False)
strFirstAddr = rngResult.Address
Do
If Not rngData Is Nothing Then
Set rngData = Union(rngData, rngResult)
Else
Set rngData = rngResult
End If
Set rngResult = SearchIn.FindNext(rngResult)
Loop While rngResult.Address <> strFirstAddr
Set MyFilterFunc = rngData
End Function
Entweder schreibt man für die sechs aufgezählten Fälle (z1 bis z6) jeweils im Quellcode händisch was zu tun ist, oder man definiert sich das in einem mehrdimensionalen Datenfeld (oder Struktur). Dann ließe sich dies in einer kurzen Schleife automatisiert abarbeiten.
Man definiert also derart:
- Spalte B, Zeilen mit Inhalt "aa" innerhalb q1, q2 und q3 -> z2
- Spalte B, Zeilen mit Inhalt "bb" innerhalb q1, q2 und q3 -> z3
- ...
Da die Quellen überall gleich sind, läuft man diese sechs also durch und in jedem Durchgang "schaut" man jede Quellen hinein, sucht nach dem gewünschten Inhalt in Spalte B (siehe Beispiel_z2_q1) und kopiert die Daten ans jeweilige Ziel.
|