En passant une gamme de Excel Fonction Définie par l'Utilisateur et de l'affecter à un tableau

Je suis en train de

  1. passer deux gammes - plusieurs lignes de colonne unique à une fonction définie par l'utilisateur dans Excel 2007,
  2. à l'attribuer à un tableau pour le traitement.

Quelqu'un peut-il me dire comment faire pour attribuer une telle gamme à un tableau?

La plage n'est pas constante comme je suis en utilisant un UDF dans des cellules différentes pour les différentes données donc je ne peut pas utiliser e,g, Range("A1:A10")

Le code fonctionne lorsque je viens d'utiliser Data1.Rows.Cells(i, 1) au lieu des tableaux. Mais je pense qu'il est préférable d'utiliser une dimensions des tableaux pour plus d'efficacité.

Voici mon code actuel

Function Sample(Data1 As Range, Data2 As Range) As Double

 'Size of Data1 and Data2
 Dim rows As Integer
 rows = Data1.Rows.Count 

 'Declaring two one dimensional arrays
 Dim data1Array(rows) As Double --- Getting error here
 Dim data2Array(rows) As Double --- Getting error here

 Dim diff As Double
 Dim average As Double
 Dim i As Integer

 'Assigning Range to Array
 data1Array = Data1 --- Getting Error here
 data2Array = Data2 --- Getting Error here

 average = 0
 diff = 0

 For i = 1 To rows

   diff = data1Array(i) - data2Array(i)

   If diff < 0 Then
     diff = diff * -1
   End If

   average = diff + average

 Next i

 Sample = average/rows

End Function
Déclarer Data1Array et Data2Array comme des Variantes (affectation de plages pour eux, ne fonctionnera pas sinon).
Merci pour la correction, la deuxième erreur a disparu. Mais d'abord, on est toujours là. Maintenant, je peux accéder à des données dans Data1Array mais à travers deux dimensions, comme cela Data1Array(i,1). Peut-il être comme ça Data1Array(i) c'est à dire une dimension?
D'abord-plutôt ne pas utiliser rows comme nom de variable - c'est le mot-clé dans Excel VBA...
Déclarer votre tableau de variables de cette façon: Dim data1Array as Variant. Dimension de votre tableau sera mis automatiquement lorsque la ligne data1Array = Data1 est appelé.
oui. Application.Transpose pouvez forcer une seule ligne ou une seule colonne 2D variante en 1D. Voir ci-dessous

OriginalL'auteur MrA2Z | 2013-04-11