2016-10-25 7 views
0

VBA for Excelで書いているinsheet関数に問題があります。私が最終的に達成しようとしているのは、ワークシート上のセル内から呼び出され、呼び出されるセルの下のデータポイントの範囲を出力するExcel関数です(たとえば、財務データプロバイダのExcel関数= BDPブルームバーグ)。出力するデータポイントの数がわからないので、あらかじめ出力範囲を指定することはできません。Excel VBA:シート機能コードがシート上の他のセルにアクセスできない

エクセルでは、関数の呼び出し元のセルとは別に、関数内のシート上のセルを編集することはできません。

私はこの問題のために、問題を特定するための簡単なプログラムを作成しました。

以下の関数は、= test(10)経由でExcelシートから呼び出されたとき、呼び出されたセルの下に1から10までの整数のリストを生成します。

コードは非常に単純ですが、この式が呼び出されるワークシート(#Valueエラーを除く)では何も起こりません。私は、例えばのように、コードの他のいくつかの仕様を試してみました:

Function test(number As Integer) 

Dim tempRange As Range 
Set tempRange = Worksheets("Sheet1").Range(Application.Caller.Address) 

For i = 1 To number 
tempRange.Offset(i, 0) = i 
Next i 

End Function 

を不思議なことに、このコードの最後の作品では、コマンド「のDebug.Print tempRange.addressは」住所を印刷んどの機能からが呼び出されます。

問題は、ワークシート内の値をワークシート関数内から更新しているようです。誰かが別の方法でこれを達成することが可能かどうかについていくつか指導してください。 Excelの計算方法は、その前提に構築されているので、

おかげで多くは、J

+0

[ExcelでUDFを使用してワークシートを更新する]の可能な複製(http://stackoverflow.com/questions/23433096/using-a-udf-in-excel-to-update-the-worksheet) – Comintern

答えて

1

ユーザー定義関数は、彼らがに入力されたセルの値を変更することが許可されています。

この制限を回避する方法では、変更する結果や場所をキャッシュしてafter calculateイベントで書き直したり、可能な循環性や無限ループを処理したりするなど、恐ろしいことがあります。

最も簡単な解決策は、必要以上に多くのセルに複数セルの配列式を入力することです。

しかし、実際にこれを行う必要があるなら、いくつかの配列リサイザ機能を持つGovertのExcel DNAを見ることをお勧めします。 Resizing Excel UDF results

0

検討:

Public Function test(number As Integer) 
    Dim i As Long, ary() 
    ReDim ary(1 To number, 1 To 1) 

    For i = 1 To number 
     ary(i, 1) = i 
    Next i 

    test = ary 
End Function 

を細胞のブロックを選択し(この場合、C1からC10を介して)、およびアレイが入力:

=test(10) 

enter image description here

配列数式は + だけでなくキーを入力してくださいはCtrl +Shiftキーを入力する必要があります。

関連する問題