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

Function Arrays

Function Arrays
23.07.2007 10:45:56
Peter
Deklarieren von Arrays in Function
Ich habe folgende Function geschrieben.

Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function


Das RSL(a) verursacht einen Fehler. Mit RSL(a) soll ein Wert des Arrays RSL auf Null gesetzt werden. Das Porgramm sollte bewußt so kurz sein, da ich eine Optimierung mit vielen Durchläufen habe. Wie muss ich das Umprogrammieren, damit es funktioniert?
Danke für die Unterstützung!

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Function Arrays
23.07.2007 11:03:00
Renee
Mazwara Peter,
1. Die Variable RSL ist nicht dimensioniert!
2. Dei Code ist absolut unverständlich, wieso genügt da nicht einfach die WorksheetFunction.Large ?
Was willst Du mit dieser Funktion überhaupt erreichen ?
Greetz Renee

AW: Function Arrays
23.07.2007 11:11:00
Peter
Hallo Renee,
Hier der dokumentierte Code.

Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function


Die Funktion max_spezial wird von Excel aus aufgerufen. An die


Function max_spezial wird das Array RSL übergeben. Mit RSL(a) = 0 soll der a te Wert von RSL  _
genullt werden und zwar vor der Bestimmung des n größten Werts des modifizierten RSL.
Grüße
Peter

Anzeige
AW: Function Arrays
23.07.2007 11:04:00
ransi
HAllo
Die Funktion ist in Ordnung.
Wie rufst du die Function auf ?
So geht es jedenfalls:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit
Public Sub Aufruf()
Dim arr
arr = Array(1, 37, 56, 2, 67, 111)
MsgBox max_spezial(arr, 2, 1)
End Sub

Public Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function

ransi

Anzeige
AW: Function Arrays
23.07.2007 11:13:00
Peter
Hallo Ransi,
Danke für deine Unterstützung.
Das Programm wird in Excel aufgerufen.
Hier der dokumentierte Code.

Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function


Die Funktion max_spezial wird von Excel aus aufgerufen. An die


Function max_spezial wird das Array RSL übergeben. Mit RSL(a) = 0 soll der a te Wert von RSL  _
genullt werden und zwar vor der Bestimmung des n größten Werts des modifizierten RSL.
Wie sieht dann der richtige Code aus?
Grüße
Peter

Anzeige
immer noch dunkel...
23.07.2007 11:32:43
ransi
HAllo Peter

Die Funktion max_spezial wird von Excel aus aufgerufen.


Aus einer Tabelle heraus oder wie ?
Tabelle1

 BCDE
183 21 
2  85 
3  14 
4  5 
5  65 
6  82 
7  66 
8  54 
9  36 
10  38 
11  3 
12  40 
13  4 
14  83 
15  54 
16  66 
17  17 
18  99 
19  69 
20  59 
21    

Formeln der Tabelle
ZelleFormel
B1=max_Spezial(D1:D20;2;2)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL = WorksheetFunction.Transpose(RSL)
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function

ransi

Anzeige
AW: immer noch dunkel...
23.07.2007 11:51:00
Peter
Hallo Ransi,
Obiges Bespiel funktioniert perfekt.
Wie schaut die Funktion aus, wenn die Daten nicht in einer Spalte (vertikal) sondern horizonal angeordnet sind?
Danke.
Grüße
Peter

AW: immer noch dunkel...
23.07.2007 13:37:14
ransi
HAllo
Wenn du Werte aus dem Bereich mit einer Schleife in ein Array einliest, klappt das sogar über mehrspaltige Bereiche.
Tabelle1

 BCDEF
179 38 
2  717 
3  3439 
4  7557 
5  947 
6  7417 
7  7820 
8  4173 
9  7097 
10  7995 
11     

Formeln der Tabelle
ZelleFormel
B1=max_spezial(D1:E10;2;3)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function max_spezial(RSL As Range, a As Integer, n As Integer) As Double
Dim arr
Dim L As Long
Redim arr(1 To RSL.Count)
For L = 1 To RSL.Count
    arr(L) = RSL(L).Value
Next
arr(a) = 0
max_spezial = WorksheetFunction.Large(arr, n)
End Function

ransi
ransi

Anzeige
AW: immer noch dunkel...
23.07.2007 13:49:00
Peter
Hallo Ransi,
Du bist ja wirklich ein VBA Spezialist. Kann ich von dir deine Email Adresse bitte erhalten?
Zurück zu meinem Anliegen.
Die Function soll einfach bleiben und zwar in der Art
Option Explicit

Public Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL = WorksheetFunction.Transpose(RSL)
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function


Nur mit dem Unterschied, dass die Daten zeilenförmig angeordnet sind wie z.B.
56 67 89 78 89
Das Programm


Public Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
RSL = WorksheetFunction.Transpose(WorksheetFunction.Transpose(RSL))
RSL(a) = 0
max_spezial = WorksheetFunction.Large(RSL, n)
End Function


funktioniert z.B. für zeilenförmige Arrays. Geht es auch einfacher?
Grüße
Peter

Anzeige
AW: immer noch dunkel...
23.07.2007 14:28:13
ransi
HAllo
Noch einfacher krieg ichs nicht hin:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Public Function max_spezial(RSL As Variant, a As Integer, n As Integer) As Double
Dim dummy
dummy = RSL
dummy(1, a) = 0
max_spezial = WorksheetFunction.Large(dummy, n)
End Function

ransi

Anzeige
AW: immer noch dunkel...
23.07.2007 15:04:00
Peter
Hallo Ransi,
Vielen Dank für deine großartige Unterstützung.
Dürfte ich bitte deine Email Adresse erhalten. Wenn nicht via dem Forumso, da schreib mir ein Email an peter.nachbaur@gmx.at
Danke
Grüße
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige