Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Benutzerdef.Funktion funzt nicht

Benutzerdef.Funktion funzt nicht
26.10.2007 10:42:00
Walter
Hallo Excel Fans,
ich habe mir mittels der Find-Methode eine SVerweis ähnliche Funktion gebastelt, die jedoch im gegensatz zum SVerweis auch mehrere Treffer finden kann und diese dann addiert.
Funktioniert auch prima im Direktbereich, jedoch nicht als Worksheet Function (Tabellenblatt-Funktion)
Ich erhalte den Fehlerwert Wert#!
Hier der Code:

Private Function FindSum(Suchbegriff As Range, Bereich As Range, Optional intOffset As Integer = _
0) As Double
'Berücksichtigt alle Treffer in einem bestimmten Bereich und Summiert die Treffer
'Mit Offset kann man auf Werte in Nachbarzellen verweisen (ähnlich dem SVerweis)
Dim rngArray As Range
Dim rngTreffer As Range
Dim dblSumme As Double
Set rngArray = Find_Range(Suchbegriff.Value, Bereich)
If Not rngArray Is Nothing Then
For Each rngTreffer In rngArray
If IsNumeric(rngTreffer) Then
dblSumme = rngTreffer.Offset(0, intOffset).Value + dblSumme
End If
Next rngTreffer
End If
FindSum = dblSumme
End Function



Private Function Find_Range(Find_Item As Variant, _
Search_Range As Range, _
Optional LookIn As Variant, _
Optional LookAt As Variant, _
Optional MatchCase As Boolean) As Range
Dim c As Range
Dim firstAddress As String
If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
If IsMissing(LookAt) Then LookAt = xlWhole 'xlPart '
If IsMissing(MatchCase) Then MatchCase = False
With Search_Range
Set c = .Find(What:=Find_Item, _
LookIn:=LookIn, _
LookAt:=LookAt, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=MatchCase, _
SearchFormat:=False)
If Not c Is Nothing Then
Set Find_Range = c
firstAddress = c.Address
Do
Set Find_Range = Union(Find_Range, c)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End Function


Die FindRange ist überigens nicht von mir und gibt ein Array aller gefundenen Zellen zurück.
Gruß Walter

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Weshalb nicht per SUMMEWENN
26.10.2007 10:57:53
NoNet
Hallo Walter,
meine erste Vermutung war, das "PRIVATE" wegzulassen, aber auch damit funktionierte es nicht.
Weshalb programmierst Du das eigentlich selbst und verwendest nicht die Funktion SUMMEWENN (VBA: SUMIF) ?
Hier ein Beispiel :
MsgBox Application.Worksheetfunction.SumIf([A1:A100],[B1])
Oder auch mit dem OFFSET 2 :
MsgBox Application.Worksheetfunction.SumIf([A1:A100],[B1],[C1:C100])
Gruß, NoNet

AW: Weshalb nicht per SUMMEWENN
26.10.2007 11:14:00
Walter
Vielen Dank,
das funktioniert natürlich viel besser
Ich habe gar nicht an die Summe Wenn gedacht

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige