Benutzerdefinierte Array-Function

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 8.0 (Office 97)
nach unten

Betrifft: Benutzerdefinierte Array-Function
von: Jochen
Geschrieben am: 16.05.2002 - 09:16:50

Hallo,
ich verwende benutzerdef. Funktionen, die ein Array übergeben bekommen und selbst ein (genauso großes) Array zurückliefern. Aus irgendeinem Grund arbeiten diese Funktionen nur bis zu einer Array-Größe von 5460 Elementen. Bei jeder größeren Elementzahl liefert die Funktion lediglich "#WERT!". Kennt jemand die Ursache oder weiß jemand Abhilfe?

Der Algorithmus entsprich dem von Microsoft vorgeschlagenen; das ganze sähe z.B. für ein Programm zum Quadrieren einer Zahl so aus:

Function Quadrat(Bereich As Range) As Variant
Dim temp As Variant
Dim i As Integer, j As Integer

temp = Bereich.Value

If IsArray(temp) Then
For i = 1 To UBound(temp, 1)
For j = 1 To UBound(temp, 2)
temp(i, j) = temp(i, j) ^ 2
Next j
Next i
Else
temp = temp ^ 2
End If
Quadrat = temp
End Function

nach oben   nach unten

Re: Benutzerdefinierte Array-Function
von: Hans W. Herber
Geschrieben am: 16.05.2002 - 09:36:18

Hallo Jochen,

teste mal folgenden Funktionsaufruf, einige hunderttausend Elemente sollten verkraftet werden:


Sub Aufruf()
   With Range("A1")
      Worksheets(2).Range(.CurrentRegion.Address).Value = _
         Quadrat(.CurrentRegion)
      MsgBox .CurrentRegion.Cells.Count
   End With
End Sub

hans

nach oben   nach unten

Re: Benutzerdefinierte Array-Function
von: Jochen
Geschrieben am: 16.05.2002 - 10:40:04

Hallo Hans,
vielen Dank für den Lösungsvorschlag. Mein Problem ist allerdings etwas anders gelagert, was ich aber nicht deutlich genug zum Ausdruck gebracht habe:
Über "Namen vergeben" definiere ich einen Vektor (z.B. "Eingabwerte"), der eine variable, bis etwa 8500 Elemente große Menge an Eingabewerten enthält. Diese kann ich dann im Diagramm darstellen, ohne mich um die tatsächliche Anzahl an Daten zu kümmern. (Das läuft - wie bei den kursierenden Excel-Funktionsplottern auch - über BereichVerschieben().) Aus diesen Daten werden weiterhin über eine etwas längliche (benutzerefinierte) Funktion neue Daten errechnet, die ebenfalls im Diagramm stehen sollen.
Indem ich nun die UDF über "Namen vergeben" ("NeueDaten" wird z.B. definiert als =Quadrat(Eingabedaten)) direkt in einer Variablen berechnen lasse, spare ich mir die ganzen Zellen auf dem Arbeitsblatt und kann die Ergebnisdaten direkt im Diagramm darstellen. Daneben kann man die Ergebnisdaten sehr einfach über z.B. =Max(Ergebnisdaten) etc. auswerten.
Hierfür muss die Funktion "Array-tauglich" sein, was sie mit dem von mir geposteten Code auch ist. Aber leider eben nur für knapp 5500 Elemente...

nach oben   nach unten

Re: Benutzerdefinierte Array-Function
von: Hans W. Herber
Geschrieben am: 16.05.2002 - 10:43:49

Hallo Jochen,

die Größe der Arrays ist durch Arbeitsspeicher begrenzt, die Anzahl der möglichen, nicht gebundenen Datenpunkte in Diagrammen unterliegt Restriktionen, die Versionsabhängig sind.
Du kannst also mit Bezug auf einen Tabellenblattbereich in einem Diagramm zigtausende von Datenpunkten zuweisen, was Dir über die Zuweisung über ein Array nicht gelingt.

Hier vermute ich das Problem.

hans


nach oben   nach unten

Re: Benutzerdefinierte Array-Function
von: Jochen
Geschrieben am: 16.05.2002 - 11:26:05

Ich denke mittlerweile auch, dass es eine durch Excel vorgegene Elementbegrenzung ist. Was die Datenpunkte im Diagramm betrifft, so kann man schon weit über 5000 Punkte durch ein Array übergeben. Allerdings ist die Zahl der durch VBA an ein Worksheet-Array übergebenen Elemente limitiert. Näheres dazu habe ich mittlerweile gefunden unter:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q177991

Vielen Dank nochmal. Ich werde den Gesamtbereich jetzt in zwei Einzelarrays aufteilen müssen...

Jochen

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Benutzerdefinierte Array-Function"