2016-04-13 14 views
0

n x m data arrayを取得しましたが、ループを使用せずにその配列のサブセットの平均値を計算しようとしています。VBAのインデックス関数をダイナミックレンジに使用する方法

Excelでは、私は、例えば使用することができます。

x = AVERAGE(INDEX(A1:A100,20,1):INDEX(A1:A100,50,3)) 

しかし、VBAにこれを変換する方法がわからないし。以下は私にエラーを与える:

x = Worksheetfunction.Average(Worksheetfunction.Index(ArrayX,20,1):Worksheetfunction.Index(ArrayX,50,3)) 

私はちょうど関数間で":"を使用することはできませんと仮定しています。どのように私はそれを回避することができますか?助けを感謝します!

+0

ArrayXが実際に配列の場合は、配列できません。それが 'Range'ならば、希望するセルから別の' Range'を作ります。 – GSerg

答えて

0

あなたは、行番号と列番号の配列を渡すことによって、あなたの配列のサブセットを抽出するためにApplication.Indexを使用することができます。

x = WorksheetFunction.Average(Application.Index(ArrayX, [row(20:32)], Array(1, 2, 3))) 

注意をWorksheetFunction.Indexはこのために動作しないことに、あなたはApplication.Indexを使用する必要があります。また、配列には65536行の制限があります。

+0

お返事ありがとうございます。これは、行()の入力が実際の数値であるときに機能しますが、それらが変数の場合は、実行時エラー1004が発生します。WorksheetFunctionクラスのAverageプロパティを取得できません。たとえば、行(12:24)は動作しますが、行(m:n)(m = 12、n = 24)は動作しません。私のコードでは、mとnはCount関数によって決定されます。とにかくこれをラウンド?再度、感謝します! – LYang

+0

'評価(ROW("&m& ":&n&") ")'を使用してください – Rory

+0

チャームのように働いて..ありがとう! – LYang

関連する問題