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

Blattfunction aber schnell

Blattfunction aber schnell
16.11.2004 22:20:22
Maver
Hi zusammen,
Ich habe eine VBA-Funktion die im Arbeitsblatt verwenden wird
Übergeben werden zwei Werte und ein Zellbereich
function kfinterpol (x,y,Kennfeld)
Die Function interpoliert den entsprechenden z-Wert aus dem Kennfeld
d.h. die Berechnung in der Funktion ist nicht besonders aufwendig
Langsam wird das ganze nur durch die große anzahl dieser Funktion in einem Arbeitsblatt
Wie kann ich das ganze schneller machen?
Bei Versuchen ist mir aufgefallen das die Arbeitsmappe doppelt so schnell neu berechnet wird, wenn ich die Berechnung nicht mit F9 sondern im VBA durch application.calculate starte.
Hat jemand eine Erklärung dafür ?
Gruß Maver

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blattfunction aber schnell
RAnton
Hallo Maver,
application.calculate ist das selbe wie wenn du die Taste F9 drückst. D.h. dein Arbeitsblatt wird neu berechnet.
Wenn du also steuern willst, dass dein Arbeitsblatt nur zu einem bestimmten Zeitpunkt manuell angestossen wird, stellst du die automatische Berechnung aus (opitonen) und drückst F9 zur Berechnung. Dann werden deine Funktionen auf einen Schlag durchgeführt.
Gruß
Anton
AW: Blattfunction aber schnell
16.11.2004 22:54:58
Maver
Hi Anton,
So kenne ich es auch (F9 entspricht application.calculate)
Deshalb aber auch meine Frage:
Warum rechnet sich die Arbeitsmappe schneller durch wenn es über VBA angestossen wird als über F9
Um mal eine Größenordnung zu haben.
Das Durchrechnen dauert ca 15 Sekunden über F9 tendenz steigend
Deshalb brauche ich eine Geschwindigkeitssteigerung
Die Funktion beinhaltet ca 10 Mathematische Berechnungen
und 2x Application.WorksheetFunction.Match
Könnte es etwas bringen diese Berechnung in einer DLL zu machen, und diese in Excel einzubinden ?
Gruß Achim
Anzeige
AW: Blattfunction aber schnell
RAnton
Hi Achim,
nach meinen Erfahrungen kannst du dir die DLL sparen. Es sollte mich wundern, wenn du dadurch viel mehr rausholst. Aber wenn das über F9 wirklich langsamer läuft als mit VBA direkt, dann mach doch einen Button, mit dem du VBA anstößt. Das wär doch wenigstens ein kleiner Trost.
Gruß
Anton
AW: Blattfunction aber schnell
16.11.2004 23:25:26
Maver
Hi Anton,
An die Lösung habe ich auch schon mal gedacht.
Ist halt eine Krückenlösung (Extra Symbolleiste und so)
Außerdem wäre es schon geil gewesen, das Ding so RICHTIG schnell zu machen.
Ich stell mal noch den ganzen Code hier rein, vielleicht sieht noch jemand was im Code
was zeit kostet (Range Objekte, Match Funktion oder so)
Danke auf jeden Fall mal Anton
Public

Function kfinterpol(x, y, kf As Range)
Dim i As Integer
Dim xpos1, xpos2, ypos1, ypos2 As Integer
If x > kf.Cells(1, 2) Then
xpos1 = Application.WorksheetFunction.Match(x, kf.Rows(1).Value)
xpos2 = xpos1 + 1
xval2 = kf.Cells(1, xpos2).Value
If IsEmpty(xval2) = True Then
xval1 = x
Else
xval1 = kf.Cells(1, xpos1).Value
End If
Else
xpos1 = 2
xpos2 = xpos1 + 1
xval2 = kf.Cells(1, xpos2).Value
xval1 = x
End If
If y > kf.Cells(2, 1) Then
ypos1 = Application.WorksheetFunction.Match(y, kf.Columns(1).Value)
ypos2 = ypos1 + 1
yval2 = kf.Cells(ypos2, 1).Value
If IsEmpty(yval2) = True Then
yval1 = y
Else
yval1 = kf.Cells(ypos1, 1).Value
End If
Else
ypos1 = 2
ypos2 = ypos1 + 1
yval2 = kf.Cells(ypos2, 1).Value
yval1 = y
End If
x1y1 = kf.Cells(ypos1, xpos1).Value
x2y1 = kf.Cells(ypos1, xpos2).Value
x1y2 = kf.Cells(ypos2, xpos1).Value
x2y2 = kf.Cells(ypos2, xpos2).Value
x_y1 = x1y1 + (x2y1 - x1y1) / (xval2 - xval1) * (x - xval1)
x_y2 = x1y2 + (x2y2 - x1y2) / (xval2 - xval1) * (x - xval1)
kfinterpol = x_y1 + (x_y2 - x_y1) / (yval2 - yval1) * (y - yval1)
End Function

Gruß und Dank
Achim
Anzeige
AW: Blattfunction aber schnell
Udo
Du bist schon mal gut beraten, die Variablen exakt zu deklarieren. X und y sind bei dir Variant, verschenkter Speicher.
Dim xpos1, xpos2, ypos1, ypos2 As Integer
Da ist nur ypos2 Integer, alle anderen Variant, verschenkt!
Udo
AW: Blattfunction aber schnell
17.11.2004 09:38:51
Volker
Hallo Maver,
ohne mir deinen Code zu Gemüte zu führen:
Ich hab die Erfahrung gemacht, dass die Aktualisierung des Bildschirms
einiges an Zeit kostet.
Setz an den Anfang ein Application.ScreenUpdating = False,
und ans Ende Application.ScreenUpdating = True
Hat auf meinen Arbeitsplatzrechner (nicht der Schnellste) bei bestimmten
Berechnungen die Zeit halbiert.
Gruß
Volker
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige