Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1244to1248
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

VBA Code beschleunigen

VBA Code beschleunigen
Horst
Hallo Excel-Freaks,
ich verwende folgenden VBA-Code in einem ziemlich großen, vielfach verknüpften .xls, der leider nur sehr langsam abläuft. Gibt es eine Möglichkeit die Funktion umzuschreiben und zu beschleunigen?
Option Explicit
Sub Berechnung()
End Sub
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Public Function Semivola(Bereich As Range) As Double
Dim Anzahl%, varianzsumme As Double, zelle As Range, Mittelwert As Double
With Application.WorksheetFunction
Anzahl = .Count(Bereich)
Mittelwert = .Average(Bereich)
For Each zelle In Bereich
If .IsNumber(zelle) = True Then
If zelle 

Besten Dank vorab!
Gruß, Horst

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Code beschleunigen
07.01.2012 00:05:16
Josef

Hallo Horst,
UDF's sind nun mal um Welten langsamer als Excelfunktionen.
Events und Berechnung ausschalten bring dabei überhaupt nichts.
Probier mal diese Version.
Public Function Semivola(Bereich As Range) As Double
  Dim strRef As String
  
  Application.Volatile
  
  strRef = "'" & Bereich.Parent.Name & "'!" & Bereich.Address(0, 0)
  
  Semivola = Evaluate("(SUM(IF((" & strRef & "<AVERAGE(" & strRef & _
    "))*(ISNUMBER(" & strRef & ")),((" & strRef & "-AVERAGE(" & strRef & _
    "))^2)))/COUNT(" & strRef & "))^0.5")
  
End Function



« Gruß Sepp »

Anzeige
AW: VBA Code beschleunigen
07.01.2012 00:13:16
Horst
Servus Sepp,
hab's bereits getestet, funktioniert super schnell und perfekt wie immer!!
Hab' besten Dank!
Gruß, Horst
Der nicht blaue Teil deines Codes dürfte in der...
07.01.2012 04:18:57
Luc:-?
…hier dargestellten Form auch gar nicht fktionieren, Horst,
sondern höchstens Syntaxfehler liefern (Position von End Sub)! ;-)
Gruß Luc :-?
PS @Sepp: Langsamer ja, aber gleich um Welten? Das hängt doch wohl auch sehr von der Programmierg ab (nicht nur bei Evaluate-Verwendung)! Der Rest ist wohl der VBA-Kompilierungsmethode geschuldet; ist halt nicht direkt in den XlKorpus integriert, was wohl auch immer noch bedingt für einige später hinzugefügte xlFktt gilt. „Events und Berechnung ausschalten bringt dabei überhaupt nichts” bezweifle ich ebenfalls — manches lässt sich kaum anders beherrschen, egal, ob mit oder ohne udFktt (hängt natürl auch von der Hardware ab und davon, ob die xlAutomatik die richtige Berechnungsreihenfolge hinbekommt, denn nicht alles kann immer deren Logik untergeordnet wdn). Meine Erfahrung sagt mir eher, dass Application.Volatile kaum was bringt … ;-)
Dir & Horst natürlich noch ein GutsNeus! Luc :-?
Anzeige
AW: Der nicht blaue Teil deines Codes dürfte in der...
07.01.2012 13:17:55
Horst
Hallo zusammen,
die Rechenzeitersparnis bei Application.Volatile ist schon spürbar, wenngleich es etwas schneller gehen dürfte. Gibt es noch andere Möglichkeiten? Hardware ist ein Quadcore mit 2,4 Ghz und 4 GB RAM, HD 500 GB.
Interessanterweise habe ich bei obiger Formel das Problem, dass bei großen Sheets mit vielen Verknüpfungen sich manche Bereiche von Zellen nicht berechnen lassen. Beispielsweise lässt sich SEMIVOLA(B8:B4276) fehlerfrei berechnen, bei Eingabe von SEMIVOLA(B4277:4721) tritt der Fehler #Wert auf. Kopiere ich das gleiche Sheet in eine neue Arbeitsmappe ist der Fehler weg. (Arbeitsspeicherproblem?)
Gruß, Horst
Anzeige
AW: Der nicht blaue Teil deines Codes dürfte in der...
07.01.2012 13:32:38
Josef

Hallo Horst,
Application.Volatile hat mit der Geschwindigkeit gar nichts zu tun, es bewirkt nur, dass die UDF neu berechnet wird.
Also bei funktioniert SEMIVOLA() auch bei 100.000 Zellen ohne Probleme, allerdings langsamer als die von mir in deinem vorherigen Thread zu diesem Thema gepostete Formel-Alternative.

« Gruß Sepp »

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige