
ユーザー定義関数を作りました。
ところが、この関数が自動再計算をしてくれません。
どうしたら自動再計算するようになるのでしょうか?
よろしくお願いします。
ちなにこの関数は、自分のシートのB2とsheet1~sheet4のB9を比較して、正しければB9の4つ右のセルの値を合計して返すものです。
=SheetLook($B$2,"sheet1,sheet2,sheet3,sheet4",B9,4)
コードです。
Function SheetLook(参照元 As Variant, 比較対象シート As String, 比較対象セル As Range, 参照セル位置 As Integer) As Variant
Dim i As Integer
Dim rng As Range
Dim sss As Variant
Dim kei As Variant
Dim cnt As Integer
sss = Split(比較対象シート, ",")
kei = 0
cnt = 0
For i = 0 To UBound(sss)
Set rng = Sheets(sss(i)).Range(比較対象セル.Address)
If 参照元 = rng Then
kei = kei + rng.Offset(0, 参照セル位置)
cnt = cnt + 1
End If
Next
If cnt <> 0 Then
SheetLook = kei
Else
SheetLook = ""
End If
End Function
No.3ベストアンサー
- 回答日時:
こんにちは。
まず、そのユーザー定義関数は、ちょっと無理があるかもしれませんね。
どこかというと、
Set rng = Sheets(sss(i)).Range(比較対象セル.Address)
この部分です。文字で入れて、シートを認識させるのは悪くはないけれども、そのコードにはブックの概念が、ここには含まれていません。
臨時の措置としては、
Set rng = ThisWorkbook.Sheets(sss(i)).Range(比較対象セル.Address)
のようにしないと、ActiveWorkbook のシートを探すようになります。
本格的には、
'---------------------------
On Error Resume Next
Dim myRng As Range
Dim myBk As Workbook
Set myRng = Application.Caller
If myRng Is Nothing Then 'ルーチンで使った場合
Set myBk = ThisWorkbook
'Set myBk = ActiveWorkbook ''いずれか
Else
Set myBk = myRng.Parent.Parent
End If
'-----------------------------
For i = 0 To UBound(sss)
Set rng = myBk.Sheets(sss(i)).Range(比較対象セル.Address) '**
なお、
>この関数が自動再計算をしてくれません。
Volitile を入れると、引数の参照先の変更があったときにも、再計算がされます。
Volitile を入れなければ、引数の直接の変更があったときに、再計算がされます。だから、本来は、どちらでもよいことです。
その代わりに、このような方法もあります。
=SheetLook($B$2,"sheet1,sheet2,sheet3,sheet4",B9,4)+NOW()*0
Volitile でも、上記のようにしても、必ず、再計算してしまいますから、ワークシートを変更がなくても、開いただけでCalculate の命令があったというように、Excelは解釈してしまいますから、変更があった(ThisWorkbook.Saved =False) となって、保存を要求されます。
No.2
- 回答日時:
>私のExcel2003では、変化有りませんでした。
Application.Volatile は有効なはずです。
オプション 計算方法のチェックはOK?
オプション 計算方法のチェックは自動でした。
いろいろやってみると、動くときと動かないときがあるようです。
そして、一度動いたシートでは動き続けました。
規則性はちょっと掴めませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AかBに入力があった時Cに反映、...
-
エクセルの使い方 1日=7時間45...
-
ヘッダー
-
Excelの文字入力にタイムラグが...
-
数式の計算結果により表示され...
-
EXCELの関数に関する質問です
-
エクセルで足し算と掛算を混ぜ...
-
IF関数で、時間を条件にしたい...
-
エクセルで勤怠管理表で休憩時...
-
エクセルで数値を50単位で切...
-
Calculateイベントでセルを指定...
-
エクセルで、時間の計算をした...
-
エクセルでの時間計算(2時間30...
-
エクセルで、マイナスの場合一...
-
エクセル・計算式をテキストデ...
-
小数点第1位が0のときROUNDUP...
-
入力済のセルだけの平均値
-
IF関数で出した数値をSUM関数で...
-
エクセル 1万時間を越える際の...
-
エクセルで時間の差の出し方は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AかBに入力があった時Cに反映、...
-
ヘッダー
-
数式の計算結果により表示され...
-
Excel 関数? 文字列に...
-
エクセルの使い方 1日=7時間45...
-
エクセルで、時間の計算をした...
-
エクセル 1万時間を越える際の...
-
IF関数で、時間を条件にしたい...
-
EXCELの関数に関する質問です
-
エクセル・計算式をテキストデ...
-
Excelの文字入力にタイムラグが...
-
エクセルでDeleteキーを...
-
IF関数で出した数値をSUM関数で...
-
エクセルでの時間計算(2時間30...
-
TEXTCALCの使い方
-
エクセル 月数を0.5ヶ月単位で...
-
エクセルで数値を50単位で切...
-
【エクセル】あるセルのみ自動...
-
Excelの計算式内の文字列の一括...
-
Excel(エクセル)でフィルター...
おすすめ情報