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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) Application.Volatile利用(excel2003) 1 2023/02/06 10:11
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Excel(エクセル) エクセルでの左のセルのコピー 3 2022/07/25 12:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数で、時間を条件にしたい...
-
ヘッダー
-
エクセルの使い方 1日=7時間45...
-
エクセルで 足し算や割り算の...
-
EXCELの関数に関する質問です
-
エクセル・計算式をテキストデ...
-
エクセルで、時間の計算をした...
-
エクセルでの時間計算(2時間30...
-
計算結果が「0」のセルだけを「...
-
Excelの計算式内の文字列の一括...
-
エクセルで比率を計算
-
Excel 関数? 文字列に...
-
#DIV/0!の表示があるセルの計算
-
エクセルの計算結果が0になって...
-
エクセルで足し算と掛算を混ぜ...
-
TEXTCALCの使い方
-
エクセル 1万時間を越える際の...
-
excel 参照しているセルに色が...
-
数式の計算結果により表示され...
-
【エクセル】あるセルのみ自動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヘッダー
-
IF関数で、時間を条件にしたい...
-
エクセルの使い方 1日=7時間45...
-
計算結果が「0」のセルだけを「...
-
エクセルで、時間の計算をした...
-
数式の計算結果により表示され...
-
EXCELの関数に関する質問です
-
エクセルで 足し算や割り算の...
-
エクセルでの時間計算(2時間30...
-
excel 参照しているセルに色が...
-
Excelの計算式内の文字列の一括...
-
エクセル・計算式をテキストデ...
-
TEXTCALCの使い方
-
AかBに入力があった時Cに反映、...
-
Excel 関数? 文字列に...
-
エクセルの計算結果が0になって...
-
エクセル 月数を0.5ヶ月単位で...
-
エクセルで足し算と掛算を混ぜ...
-
エクセル 1万時間を越える際の...
-
エクセルで数値を50単位で切...
おすすめ情報