Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
544to548
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
544to548
544to548
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

benutzerdefinierte Funktion: Zellberechnung

benutzerdefinierte Funktion: Zellberechnung
13.01.2005 15:46:04
Stephan24
Hallo,
ich habe in Excel 8 eine benutzerdefinierte Funktion erstellt, die einen vorgegebenen Bereich durchsucht und immer wenn in der Zelle darüber Zins oder Bonus steht, werden die Beträge summiert:

Function Zinsen(Bereich As Range)
For Each Zelle In Bereich
If Left(Zelle.Offset(-1, 0), 4) = "Zins" _
Or Left(Zelle.Offset(-1, 0), 5) = "Bonus" Then
Zinsen = Zinsen + Zelle
End If
Next Zelle
End Function

https://www.herber.de/bbs/user/16040.xls
Da sich die Anzahl der Spalten des Bereichs ständig ändert, möchte ich für den Bereich gleich die ganzen Zeilen vorgeben. Nun berechnet Excel bei jeder Eingabe in das Blatt die Zellen neu, was wohl auch sein muss, damit sich das Ergebnis in der Funktion ändert. Die Zellberechnung dauert aber bei einem 1GHz PIII jedesmal einige Sekunden. Und je größer die Bereiche, um so länger dauert die Berechnung.
Kann man die Funktion irgendwie schneller machen?
Danke im Voraus für die Hilfe
Gruß Stephan

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: benutzerdefinierte Funktion: Zellberechnung
Volker
Hallo Stephan,
nur mal als Ansatz:
ich würd' die find-Methode nehmen
Cells.find("Zins").select
und dann mit Offset
Du kannst Dir auch Zeilen- und Spalteindizes holen
Spalte=Cells.find("Zins").row
Spalte=Cells.find("Zins").column
Damit hast Du auch die Position der zu sumierende Zellen.
Wenn Du das ganze in eine Schleife packst, mußt Du natürlich noch eine Abbruchbedingung haben, sonst fängt die Sucherei immer von vorne an.
Gruß
Volker
AW: benutzerdefinierte Funktion: Zellberechnung
14.01.2005 10:48:13
Stephan24
Hallo Volker,
gute Idee. Als Prozedur funktioniert das einwandfrei, aber leider liefert der Code als Funktion kein Ergebnis.

Function Zinsen2(Bereich As Range)
With Bereich.Cells
Set Zelle = .Find("Zins", LookIn:=xlValues)
If Not Zelle Is Nothing Then
ersteAdresse = Zelle.Address
Do
Zinsen2 = Zinsen2 + Zelle.Offset(1, 0)
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> ersteAdresse
End If
End With
End Function

Als Prozedur liefert der Code das richtige Ergebnis:

Sub test()
Set Bereich = Rows("2:12")
With Bereich.Cells
Set Zelle = .Find("Zins", LookIn:=xlValues)
If Not Zelle Is Nothing Then
ersteAdresse = Zelle.Address
Do
ZSumme = ZSumme + Zelle.Offset(1, 0)
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> ersteAdresse
End If
End With
MsgBox ZSumme
End Sub

Gruß Stephan
Anzeige
AW: benutzerdefinierte Funktion: Zellberechnung
Volker
Hi Stephan,
Ich benutze eigentlich kaum Funktionen, weill ich lieber mit globalen Var arbeite.
Reine Gewohnheit aus blutigen Anfängerzeiten.
Muß es denn unbedingt eine Funktion sein?
Vielleicht stimmt was mit dem rekursieven Aufruf nicht.
Prüf doch mal ob Zinsen2 vor der 1. Rekursion an wenigstens 0 ist.
Gruß
Volker
Wenn
AW: benutzerdefinierte Funktion: Zellberechnung
14.01.2005 18:21:29
Stephan24
Hallo Volker,
- Vielleicht stimmt was mit dem rekursieven Aufruf nicht.
- Prüf doch mal ob Zinsen2 vor der 1. Rekursion an wenigstens 0 ist.
Auch wenn ich die Rekursion durch Einsetzen einer anderen Variable vermeide, liefert die Funktion kein Ergebnis.

Function Zinsen2(Bereich As Range)
With Bereich.Cells
Set Zelle = .Find("Zins", Lookin:=xlValues)
If Not Zelle Is Nothing Then
ersteAdresse = Zelle.Address
Do
ZSumme = ZSumme + Zelle.Offset(1, 0)
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> ersteAdresse
End If
End With
Zinsen2 = ZSumme
End Function

-Muß es denn unbedingt eine Funktion sein?
Ich bin da für alles offen. Hast Du eine andere Lösung?
Gruß Stephan
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige