2017-08-01 4 views
1

シナリオ:私は、セットのコンポーネントの加重でキャッピングプロシージャを実行する関数を持っています。私はすでに試した何私が出力するExcelワークシートへの私の結果出力配列を試してみてください、私は(関数が適用されたExcelのセル上で)値のエラーを取得しておくVBAを使用してワークシートに関数結果配列を出力

問題私はこのExcel VBA function to print an array to the workbook

に答えを試みたが、私はまだ同じエラーを取得

質問:私が正しく、この手順を行うことができますどのように?この操作に問題のある関数を使用していますか?

コードの

関連部分:(DIM部品およびその他の基本的な操作は、質問の簡潔さを維持するために削除された)あなたが関数を使用して値をバック返すとを通してそれを直接書き込むべきではありません

Function Capping(ISIN As Range, Sector As Range, Weights As Range, W1 As Double, W2 As Double) As Variant 

le = UBound(ArISIN) 
ReDim Preserve ArCap(le, 8, 1) 

For c = 1 To le 
    ArCap(c, 1, 1) = ArISIN(c, 1) 
    ArCap(c, 2, 1) = ArSector(c, 1) 
    ArCap(c, 3, 1) = ArWeight(c, 1) 
Next c 

For c = 1 To le 
    s = 0 
    For i = 1 To le 
     If ArCap(c, 2, 1) = ArCap(i, 2, 1) Then 
      s = s + ArCap(i, 3, 1) 
     End If 
    Next i 
    ArCap(c, 4, 1) = s 
Next c 

For c = 1 To le 
    If ArCap(c, 4, 1) >= W2 Then 
     ArCap(c, 5, 1) = 0.03 
     ArCap(c, 6, 1) = 0.03/ArCap(c, 3, 1) * ArCap(c, 4, 1) 
    Else 
     ArCap(c, 5, 1) = "Not Capped" 
    End If 
Next c 

suc = 0 
scap = 0 
For c = 1 To le 
    If ArCap(c, 5, 1) <> "Not Capped" Then 
     scap = scap + ArCap(c, 6, 1) 
    Else 
     suc = suc + ArCap(c, 3, 1) 
    End If 
Next c 

For c = 1 To le 
    If ArCap(c, 5, 1) = 0.03 Then 
     ArCap(c, 7, 1) = ArCap(c, 6, 1) 
    Else 
     ArCap(c, 7, 1) = ArCap(c, 3, 1)/suc * (1 - s) 
    End If 
Next c 

For c = 1 To le 
    s = 0 
    For i = 1 To le 
     If ArCap(c, 2, 1) = ArCap(i, 2, 1) Then 
      s = s + ArCap(i, 7, 1) 
     End If 
    Next i 
    ArCap(c, 8, 1) = s 
Next c 

ReDim Preserve OutArray(le, 0) 
For c = 1 To le 
    OutArray(c, 0) = ArCap(c, 7, 1) 
Next c 

'this is where I am having problems:  
ActiveSheet.Range("A4:UC4").Value = WorksheetFunction.Transpose(OutArray) 
+0

別々のサブからそれを呼び出すことによって、あなたの機能をテスト - あなたがすることができますそのようにワークシートのセルに値のエラーを表示するのではなく、エラーをデバッグします。 –

答えて

1

あなたのシートに。最後の行は、次のようになります。

この関数は、目的のセルの式として呼び出します。それ以外の場合は、関数ではなくサブルーチンとして記述してください。

1

あなたはとても1D配列は、データを保持するのに十分である、単一の行に結果を書いている:

ReDim OutArray(1 To le) 

For c = 1 To le 
    OutArray(c) = ArCap(c, 7, 1) 
Next 

ActiveSheet.Range("A4").Resize(1, le) = OutArray 
関連する問題