Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UDF braucht sehr lange für Berechung, warum?

Forumthread: UDF braucht sehr lange für Berechung, warum?

UDF braucht sehr lange für Berechung, warum?
15.07.2015 15:55:52
Peter
Guten Tag
Ich setzte die UDF in einer Tabelle ein, nur in einer Spalte von Zeile 4 - 1000. Es braucht x Minuten, bis die Berechnung erfolgt ist. Weshalb? Kann ich den Code optimieren?
Ich greife auf die vorhergehende Zahl in der Spalte. Je nach übergebenem Code kommt die nächste volle Zehnerzahl (Code = 1), die Zahl wird um 1 erhöht (Code = 2)oder es erfolgt keine Ausgabe (alle übrigen numerischen Codes).
Gruss, Peter
Function p_Val(Code As Long, Optional xNull As Long)
'übernimmt Wert aus obiger Zelle und addiert je nach übergebenem Code einen Wert
'ohne optinales Argument 1 werden ausgeblendete Zellen ignoriert
Dim zNr As Long, sNr As Long, strTab As String
strTab = Application.Caller.Parent.Name
zNr = Application.Caller.Row
sNr = Application.Caller.Column
With ThisWorkbook.Sheets(strTab)
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If .Rows(zNr).Hidden = False Or xNull = 1 Then
If WorksheetFunction.IsNumber(.Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then p_Val = 1 Else p_Val = .Cells(zNr, sNr)
Select Case Code
Case 1
p_Val = WorksheetFunction.Round(p_Val / 10, 0) * 10
p_Val = p_Val + 10
Case 2
p_Val = WorksheetFunction.Round(p_Val / 10, 0) * 10
p_Val = p_Val + 1
Case Else
p_Val = ""
End Select

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UDF braucht sehr lange für Berechung, warum?
15.07.2015 15:56:57
Peter
.... am Schluss steht natürlich noch
End With
End Function

AW: UDF braucht sehr lange für Berechung, warum?
15.07.2015 18:29:15
Michael
Hi Peter,
undeklarierte Variablen kosten Zeit, und Du hast den Rückgabetyp der Funktion nicht definiert - die Funktion gibt Zahlenwerte zurück, aber *auch* ganz unten eine leeren String.
Wenn das Ding nur bei Code= 1 oder 2 eine Zahl zurückgeben soll, würde ich das in der Zelle entsprechend verformeln...
=WENN(ODER(A1=1;A1=2);p_Val(A1;0);"")

... dann wird p_Val nur aufgerufen, wenn sie tatsächlich benötigt wird.
Das solltest Du selbst anpassen können.
Ich habe ein paar Kleinigkeiten geändert:
Option Explicit
Function p_Val(Code As Long, Optional xNull As Long)
Dim zNr As Long, sNr As Long, strTab As String
strTab = Application.Caller.Parent.Name
zNr = Application.Caller.Row
sNr = Application.Caller.Column
If Code  1 And Code  2 Then
p_Val = ""
Else
With ThisWorkbook.Sheets(strTab)
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If .Rows(zNr).Hidden = False Or xNull = 1 Then
If WorksheetFunction.IsNumber(.Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then p_Val = 1 Else p_Val = .Cells(zNr, sNr)
p_Val = WorksheetFunction.Round(p_Val / 10, 0) * 10
If Code = 1 Then p_Val = p_Val + 10 Else p_Val = p_Val + 1
End With
End If
End Function

Schöne Grüße,
Michael

Anzeige
AW: UDF braucht sehr lange für Berechung, warum?
16.07.2015 09:46:38
Peter
Hallo Michael
Danke für alle Hinweise. Ich habe das umgesetzt.
Gruss, Peter
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige