
No.2ベストアンサー
- 回答日時:
こんにちは。
大分梃子摺っていらっしゃいますね。
今回のコードでシート名の変更を捕らえたければ
Calculateイベントではなく
ユーザー定義関数そのものでやったらどうですか。
間違いなくする為に、新しいブックで以下のコードをテストしてください。
簡単の為に、"sheet1"だけの変更に対応。
---------------------------------------------
(標準モジュール)
Public OldName As String 'パブリック変数
Function Sheetname(ByVal Target As Range) As String
Application.Volatile
Sheetname = Target.Parent.Name
If OldName = "" Then
OldName = Sheetname
End If
If OldName <> Sheetname Then
MsgBox OldName & "が " & Sheetname & " に変更されました"
OldName = Sheetname
End If
End Function
---------------------------------------------
コードを書いたあと、Sheet1のA1に、=sheetname(A1) を入れておく
ようは、以前のシート名を保持しておき
ユーザー定義関数が再計算されるとき比較するだけです。
もちろん、Calculateイベントで同様のことをしてもOKですよね。
何回も言うようですが、このサンプルは、ユーザー定義関数の入っている、シート1つだけに対応です。
全てのシートに対応したい場合は、ちょっと考えてみてください。
以上です。
No.1
- 回答日時:
アイディアですが、ユーザー定義関数の末尾に
MsgBox "再計算されました"
などと、ここではMsgBoxで示しましたが、このようにユーザー定義関数の末尾で何らかの処理を行うのはどうでしょう?
あるいは、
作業セル(例えば、A1セル)を用意し、ユーザー定義関数による計算が行われれば、関数内の最終処理で作業セル(A1セル)に何らかのデータを書込む。
そうすれば、Worksheet_Changeなどのイベントでユーザー定義関数のみが再計算されたことをとらえられるかと思います。
EXCELで試してませんので、不確かなアイディアですが。
はずしていたら、すみません。
この回答への補足
さっそくありがとうございます。
現在、標準モジュールに
Function Sheetname(ByVal Target As Range) As String
Application.Volatile
Sheetname = Target.Parent.Name
End Function
とし、Sheet1のA1に =Sheetname(A1)といれています。
現在のシート名(Sheet1)が正しく表示されています。
Sheet1のシートモジュールに
Private Sub Worksheet_Calculate()
MsgBox "シート名が変更されました。"
End Sub
といれています。
これでシート名が変わったときは再計算されてMsgBoxが表示されますが、それ以外の再計算でもすべて出てくるため困っています。
関数内の最終処理で作業セルに何らかのデータを書込むとは、どういう記述をするのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Private Sub Worksheet_Calculate()のことでお聞きします
Excel(エクセル)
-
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
Calculateイベントでセルを指定したい
Word(ワード)
-
-
4
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
5
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
6
エクセル Worksheet_Calculate
Visual Basic(VBA)
-
7
メッセージを1度だけ表示したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AかBに入力があった時Cに反映、...
-
エクセルの使い方 1日=7時間45...
-
ヘッダー
-
数式の計算結果により表示され...
-
IF関数で、時間を条件にしたい...
-
Excel 関数? 文字列に...
-
エクセルで、時間の計算をした...
-
不良率の平均の出し方
-
EXCELの関数に関する質問です
-
エクセル 1万時間を越える際の...
-
エクセル・計算式をテキストデ...
-
Excelの文字入力にタイムラグが...
-
エクセルでの時間計算(2時間30...
-
エクセルでDeleteキーを...
-
【エクセル】あるセルのみ自動...
-
IF関数で出した数値をSUM関数で...
-
入力済のセルだけの平均値
-
計算結果が「0」のセルだけを「...
-
Excelの計算式内の文字列の一括...
-
ゴールシークについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヘッダー
-
AかBに入力があった時Cに反映、...
-
エクセルの使い方 1日=7時間45...
-
Excel 関数? 文字列に...
-
数式の計算結果により表示され...
-
エクセルで、時間の計算をした...
-
Excelの文字入力にタイムラグが...
-
エクセルでの時間計算(2時間30...
-
エクセル・計算式をテキストデ...
-
EXCELの関数に関する質問です
-
エクセル 1万時間を越える際の...
-
IF関数で、時間を条件にしたい...
-
エクセルでDeleteキーを...
-
エクセル 月数を0.5ヶ月単位で...
-
IF関数で出した数値をSUM関数で...
-
エクセルで足し算と掛算を混ぜ...
-
【エクセル】あるセルのみ自動...
-
エクセルで同じ計算式を入れて...
-
TEXTCALCの使い方
-
sum 範囲を横に可変したいです...
おすすめ情報