[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザー定義関数の再計算?』(human) 常にアクティブシートの一つ前のシートのセル内容を参照する関数を作成したのですが 関数を入力した後に手前のシートのセルの値を変更しても、関数の戻り値が更新されません Application.Calculateを実行しても更新されず、関数を入れ直すと変更した値が表示されます。 数十枚のシートがあり、都度関数を入れ直さなければ機能しない状態です。そもそも関数自体に問題が あるのでしょうか? 解決策は有りますでしょうか。宜しくお願いします。
WindowsXP Excel2003
Function myref(cel As Range) If ActiveSheet.Index > 1 Then myref = Sheets(ActiveSheet.Index - 1).Range(cel.Address).Text Else myref = "参照できません" End If End Function
再計算させるタイミングを考えないとダメですよね。 シートがアクティブになった時とか。 (bbq)
>そもそも関数自体に問題があるのでしょうか?
まあ、問題があるのか となれば、「ある」のでしょうねえ!! 再計算を行うトリガーとなる引数がない と言うことですよね?
Function myref(cel As Range)
この宣言で セルに =myref(a1)
等と関数を記述してしまっては、当該シートのセルA1を引数に渡している事になりますからねえ・・・。
上記の記述では、当該シートのセルA1を更新しないと関数は 再計算されませんね!!
「再計算を行うトリガーとなる引数がない関数」というのは、出来の良い関数ではありません。
他の考え方で対処する方法がないか 熟考してください。
が、場合によってはこの手の関数が必要なこともあるかもしれません。
再計算を行うトリガーとなる引数がない関数の作成方法
まず、
「ツール」----「オプション」とクリックし、オプションダイアログを表示させ、 「計算方法」タブの計算方法を「自動」に設定してください。
次に問題の関数ですが、
Function myref(cell_add As Variant) As Variant Dim sht As Object Application.Volatile On Error Resume Next Set sht = Application.Caller.Parent.Previous If Err.Number = 0 Then myref = sht.Range(cell_add).Text Else myref = "参照できません" End If On Error GoTo 0 End Function
としてください。
運用方法は、 セルに
=myref("A1") 等と指定して下さい。
但し、上記の関数を多用すると、ブックの動作が遅くなりますよ!!
一例ですが、試してみて下さい
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.