Übergeben Sie einen Bereich in eine benutzerdefinierte Funktion innerhalb einer Zelle
Hallo, ich bin mit VBA in Excel und übergeben zu müssen, in die Werte aus beiden Bereichen in eine benutzerdefinierte Funktion innerhalb einer Zelle die Formel. Die Funktion sieht wie folgt aus:
Public Function multByElement(range1 As String, range2 As String) As Variant
Dim arr1() As Variant, arr2() As Variant
arr1 = Range(range1).value
arr2 = Range(range2).value
If UBound(arr1) = UBound(arr2) Then
Dim arrayA() As Variant
ReDim arrayA(LBound(arr1) To UBound(arr1))
For i = LBound(arr1) To UBound(arr1)
arrayA(i) = arr1(i) * arr2(i)
Next i
multByElement = arrayA
End If
End Function
Wie Sie sehen können, bin ich versucht, übergeben Sie die string-Darstellung der Bereiche auf. Im debugger kann ich sehen, dass Sie ordnungsgemäß übergeben, und die erste sichtbare problem tritt auf, wenn es versucht zu Lesen arr1(i) und zeigt als "subscript out of range". Ich habe auch versucht, die übergabe der Palette an sich (also range1 als Angebot...), aber ohne Erfolg.
Mein bestes Verdacht war, dass es sich um das Aktive Blatt, da hieß es von einem anderen Blatt aus der mit der Formel den Namen des Tabellenblattes ist Teil der saite), aber das war gebannt, da ich versuchte, Sie beide aus dem gleichen Blatt, und indem Sie das Blatt in den code.
BTW, die Formel in der Zelle sieht wie folgt aus:
=MITTELWERT(multByElement("A1:A3","B1:B3"))
oder
=MITTELWERT(multByElement("Meine Tabelle1!A1:A3","Meine Tabelle1!B1:B3"))
wenn ich rufen Sie es aus einem anderen Blatt.
Das ist eine gute Idee, die ich gedacht hätte, sondern lieber versuchen, dieses heraus, weil der Platz auf dem Blatt und der möglichen Erweiterung machen würden, von dieser Funktion Gebrauch.
InformationsquelleAutor Luis | 2010-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, siehe den Kommentar Remou Links, denn das ist wirklich das, was Sie tun sollten, hier. Sie sollten nicht brauchen, VBA überhaupt zu bekommen ein element-Weise Multiplikation von zwei arrays.
Sekunde, wenn Sie wollen, mit zu arbeiten Reicht, Sie können tun, dass durch die Erklärung Ihrer Funktion, die Argumente vom Typ Range. So könnten Sie
und nicht auflösen müssen strings zu Auswahl Referenzen selbst. Die Verwendung von Zeichenfolgen verhindert, dass Excel aus aktualisieren der Querverweise, wie die Dinge bewegt in Ihrem Arbeitsblatt.
Schließlich der Grund, warum Sie Ihre Funktion schlägt fehl, die Art und Weise es nicht, weil das array, das Sie bekommen, von den 'Wert' einer multi-cell-Reihe ist zwei-dimensional, und Sie brauchen Zugang zu seinen Elementen mit zwei indices. Da es aussieht wie Sie beabsichtigen, (element-wise) multiplizieren von zwei Vektoren, Sie würde entweder
oder
je nachdem, welche Ausrichtung Sie erwartet Ihre Eingabe. (Beachten Sie, dass wenn Sie dies tun, mit VBA, die Ausrichtung, was im Prinzip eine 1-D-array wichtig ist, aber wenn Sie Folgen Sie Remou Beratung über Excel wird das richtige tun, unabhängig davon, ob Sie Zeilen oder Spalten oder einen Bereich von Referenzen oder bei array-literalen.)
Als Epilog, es sieht auch wie Sie Sie nicht verwenden 'Option Explicit'. Google herum für einige Tiraden auf, warum du wahrscheinlich immer wollen, dies zu tun.
InformationsquelleAutor jtolle