私は、1枚のシート上で動作するUDFを作成しました。この問題は、複数のシートで発生します。数式が複数のシートにある場合、1つのシートにロードすると、他のすべてのシートの出力も変わります。VBA UDFはすべてのシートの値を変更します。どのように1に制限する?
どうしてですか?私はActiveWorksシートやアクティブセルなどを使用していません。
Function customreturn(security As Range, datacheck As Range) As Variant
Dim row_num As Integer
Dim row_num2 As Integer
Dim price1 As Double
Dim price2 As Double
Dim perfo As Double
Dim blank_end As Boolean
row_num = security.Row
col_num = security.Column
row_num2 = row_num + 1
col_num2 = datacheck.Column
If WorksheetFunction.IsError(datacheck.Value) = True Then
customreturn = "No data"
Else
price1 = Cells(row_num, col_num).Value
Do While WorksheetFunction.IsError(Cells(row_num2, col_num2).Value) = True
row_num2 = row_num2 + 1
Loop
price2 = Cells(row_num2, col_num).Value
perfo = price1/price2 - 1
customreturn = perfo
End If
End Function
これは再計算された数式をリロードしますか?または、数式が入っているシート上のデータを使用する代わりに、すべてのシートで同じ情報を再計算して使用しますか? (...それは理にかなっていますか?)。それは[ボラティリティ](http://www.mrexcel.com/forum/excel-questions/271165-udf-volatile-vs-not.html) – BruceWayne
と関係があるかもしれません。1)数式を1枚のシートに読み込むと手動で 2)それは他のすべてのシートで同じ値を使用します - はい – sandboxj
また、ワークシート変数( 'Dim ws as Worksheet'、' Set ws = Sheets(security.parent.name) ')を追加してから、' ws '' Cells() 'のすべての使用の前に' '.''を実行すると、' 'security''がオンになっているシートからデータが得られていることが確認されます – BruceWayne