Live-Forum - Die aktuellen Beiträge
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
Range in Array Funktion
30.07.2015 15:55:35
VB
Hallo zusammen!
Ich versuche Folgendes zu realisieren:
Ich möchte eine Funktion schreiben, bei der der Anwender zwei Zellenbereiche (i.d.R. Teile einer Spalte) auswählen kann. In meinem Kopf stelle ich mir dies als 2 Vektoren gleicher Länge vor, die der Anwender jedoch frei wählen kann.
Innerhalb der Funktion wird dann mit den beiden Vektoren gerechnet, z.B. wird paarweise die Differenz der Vektoreintraege gebildet und hinterher ein Mittelwert ausgegeben. Was mir vermutlich helfen würde, wäre zu wissen, wie ich bei einer Range z.B. A1:A10 auf den Wert in der 5. Zelle von oben zugreifen kann!?
Hier mein Versuch, bei dem ich die Range an einen Array übergebe:

Function test(range1 As Range, range2 As Range) As Double
Dim n As Integer
Dim i As Integer
Dim h() As Double
Dim x() As Double
Dim y() As Double
'If Application.WorksheetFunction.Count(range1)  Application.WorksheetFunction.Count(range2)  _
Then MsgBox "Einlesen fehlgeschlagen"
n = Application.WorksheetFunction.Count(range1)
ReDim x(n - 1) 'n = 20 dann array von 0 bis 19
ReDim y(n - 1)
x = range1.Value 'scheint nicht zu funktionieren, ich moechte das Eingelesene als Array haben
y = range2.Value
For i = 0 To (n - 1)
h(i) = (x(i) - y(i))
Next i
test = Application.WorksheetFunction.Average(h)
End Function

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range in Array Funktion
30.07.2015 16:16:35
Rudi
Hallo,
mal als Ansatz:
Function test(range1 As Range, range2 As Range) As Double
Dim n As Integer
Dim i As Integer
Dim h() As Double
Dim x
Dim y
'If Application.WorksheetFunction.Count(range1)  Application.WorksheetFunction.Count(range2)  _
_
Then MsgBox "Einlesen fehlgeschlagen"
n = Application.WorksheetFunction.Count(range1)
x = range1.Value 'scheint nicht zu funktionieren, ich moechte das Eingelesene als Array haben
x = WorksheetFunction.Transpose(x)
y = range2.Value
y = WorksheetFunction.Transpose(y)
ReDim h(LBound(x) To UBound(x))
For i = LBound(x) To UBound(x)
h(i) = (x(i) - y(i))
Next i
test = Application.WorksheetFunction.Average(h)
End Function

Wenn du aber z.B. A1:J1 und A2:J2 als Range übergibst, geht das schief.
Gruß
Rudi

Anzeige
verallgemeinert
30.07.2015 16:55:41
Michael
Hi zusammen,
ich denke, Rudi geht es eher nicht um die Überschneidung, sondern zweidimensionale Arrays.
Das geht aber so:
Public Function test(ByVal range1 As Range, ByVal range2 As Range) As Variant
Dim cx&, cy&, rx&, ry&
Dim y As Long
Dim xa As Variant, ya As Variant
Dim xc&, xr&, yc&, yr&
'Stop
xc = range1.Columns.Count
xr = range1.Rows.Count
yc = range2.Columns.Count
yr = range2.Rows.Count
If xc  yc Or xr  yr Then
test = "#[GRÖSSE!]"
Exit Function
End If
' kannst ja mal probieren: ****************************************************
' MsgBox range1(5)     ' bei ein- oder mehrdimensionalen Ranges mit (1) bis (n)
' kannst ja mal probieren: ****************************************************
xa = range1: ya = range2
For cx = 1 To xc
For rx = 1 To xr
xa(rx, cx) = xa(rx, cx) - ya(rx, cx)
Next
Next
test = Application.WorksheetFunction.Average(xa)
End Function
Happy Exceling,
Michael

Anzeige
AW: Range in Array Funktion
30.07.2015 16:37:57
VB
Perfekt, vielen vielen Dank!
Da war ich ja nichtmal komplett auf dem Holzweg (finde ich ;), kenne mich nur mit der Syntax in VBA noch nicht so aus ).
Überschneiden dürften sich die Ranges für meinen Zweck eigentlich nie, von daher ist das kein Problem.

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige