AW: Zellwerte aus verschiedenen Tabellen sammeln
29.02.2008 15:25:33
fcs
Hallo Hans-Jörg,
du solltest keine Verschachtelung machen. Gibt wegen der vielen WENNs und SVERWEISE ein Problem.
Besser ist hier zu Addieren. Ergebnis 0 bedeutet dann ggf. nicht gefunden.
=WENN(ISTFEHLER(SVERWEIS(A2;Tabelle1!$A:$AA;1;FALSCH));0;
SVERWEIS(A2;Tabelle1!$A:$AA;27;FALSCH))+
WENN(ISTFEHLER(SVERWEIS(A2;Tabelle2!$A:$AA;1;FALSCH));0;
SVERWEIS(A2;Tabelle2!$A:$AA;27;FALSCH))+ u.s.w.
Eine Alternative wäre eine benutzerdefinierte VBA-Funktion:
Function SVERWEIS_Tabs(Suchen As Variant, _
Tabellenbereich As Variant, _
Tabelle1Bereich As Range, _
TabelleLetzteBereich As Range, _
SpalteWert As Long, _
Optional boVerweis As Boolean = True) As Variant
'SVERWEIS über mehrere Tabellen
'Suchen = gesuchter Wert
'Tabellenbereich = Bereich über meherere Tabellen: Tabelle1:Tabelle7!$A:$AA
'Dieser Parameter ist erforderlich, damit bei Änderungen in den Blättern zwischen _
1. und letem Blatt das Formelergebnis aktualisert wird.
'Tabelle1Bereich = Bereich in der 1. Tabelle: Tabelle1!$A:$AA
'TabelleLetzteBereich = Bereich in der letzten Tabelle: Tabelle7!$A:$AA
'Die Zell-Bereiche für die 3 Bereiche müssen identisch sein, damit Berechnungen _
und Aktualisierung der Formelergebnisse korrekt erfolgen.
'SpalteWert = Spalte im Bereich aus der das Ergebnis ausgelesen werden soll
'boVerweis = entspricht der Funktion des 4. parameters in SVERWEIS-Funktion
'Formelbeispiel: _
=SVERWEIS_Tabs(A2;Tabelle1:Tabelle7!$A:$AA;Tabelle1!$A:$AA;Tabelle7!$A:$AA;27;FALSCH)
Dim iIndex As Integer, Tabelle1 As String, Tabelle2 As String, Zellen As Range
Dim Bereich As String
Tabelle1 = Tabelle1Bereich.Parent.Name
Tabelle2 = TabelleLetzteBereich.Parent.Name
Bereich = Tabelle1Bereich.Address
On Error GoTo fehler
SVERWEIS_Tabs = "#NV"
For iIndex = Worksheets(Tabelle1).Index To Worksheets(Tabelle2).Index
Set Zellen = Worksheets(iIndex).Range(Bereich)
SVERWEIS_Tabs = Application.WorksheetFunction.VLookup(Suchen, Zellen, SpalteWert, _
boVerweis)
Exit For
weiter:
Next
Exit Function
fehler:
Resume weiter 'falls VLookup nichts findet
End Function
Das Ganze wird bei 5000 Datenzeilen jedoch ziemlich rechenintensiv.
Gruß
Franz