
ユーザー定義関数を作りました。
ところが、この関数が自動再計算をしてくれません。
どうしたら自動再計算するようになるのでしょうか?
よろしくお願いします。
ちなにこの関数は、自分のシートの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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AかBに入力があった時Cに反映、...
-
エクセルの使い方 1日=7時間45...
-
ヘッダー
-
open office で円の入った文字...
-
数式の計算結果により表示され...
-
IF関数で、時間を条件にしたい...
-
EXCELでIF関数を使って、以上や...
-
エクセルで 足し算や割り算の...
-
ゴールシークについて
-
数式の結果である数値のみカウ...
-
エクセルで比率を計算
-
Excel 関数? 文字列に...
-
エクセル97で関数同士の計算...
-
特定のセルだけ、計算式を表示...
-
エクセルで合計値が計算されない
-
【エクセル】あるセルのみ自動...
-
年次休暇の取得とのこりの自動...
-
エクセル関数を使ったら値が0に...
-
エクセル関数で、残業時間から...
-
ロータス123でセルに式を表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヘッダー
-
Excel 関数? 文字列に...
-
AかBに入力があった時Cに反映、...
-
数式の計算結果により表示され...
-
EXCELの関数に関する質問です
-
エクセルで、時間の計算をした...
-
IF関数で、時間を条件にしたい...
-
エクセル・計算式をテキストデ...
-
Excelの文字入力にタイムラグが...
-
エクセルの使い方 1日=7時間45...
-
TEXTCALCの使い方
-
エクセルでの時間計算(2時間30...
-
エクセル 月数を0.5ヶ月単位で...
-
エクセル 1万時間を越える際の...
-
エクセルでDeleteキーを...
-
IF関数で出した数値をSUM関数で...
-
sum 範囲を横に可変したいです...
-
計算結果が「0」のセルだけを「...
-
エクセルで同じ計算式を入れて...
-
エクセルで数値を50単位で切...
おすすめ情報