Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1436to1440
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
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige