[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Worksheet_Changeについて』(泰裕)
VBA初心者です。
以下を参照して、Enterキーを押さずに、特定のBF2セルに関数が入っていて、その結果が変わると、値が変わるようにしたいと思っているのですが、以下の現状では、変わりません。
アドバイスいただければ幸いです。宜しくお願いいたします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub If Target.Address <> "$BF$2" Then Exit Sub If Target.Value <> "" And IsNumeric(Target.Value) Then Application.EnableEvents = False Call Posting_Output Application.EnableEvents = True End If End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
計算結果でChangeイベントは動きません。 なので、BF2セルが参照しているセル(数式に入力されているセルをコードに記す)が変更された場合、に変更されてはいかがですか? 例えばBF2に入力されている式が、=A1+B1であれば、 If Target.Address <> "$BF$2" Then Exit Sub の部分を Select Case Target.Address(0, 0) Case "A1", "B1" Application.EnableEvents = False Call Posting_Output Application.EnableEvents = True Case Else Exit Sub End Select などど修正してみてはどうですか?
(稲葉) 2020/01/31(金) 08:24
(1) Worksheet_Calculate を使う ただし、どこが再計算されたセルかはわからないので、 毎回調べることになります。
(2) ユーザー定義関数にする。 Posting_Outputが 何をしているのか書いないのでわかりませんが、 >特定のBF2セルに関数が入っていて、その結果が変わると、値が変わるようにしたい のであれば、ユーザー定義関数にするのが一番妥当 (´・ω・`) 2020/01/31(金) 08:37
セル内編集中にマクロの起動はできません。(再計算もされないですよね?)
そういった挙動を実現したければ、
シート上にActiveXコントロールのテキストボックスを配置しそこに入力します。
セルにリンクさせて、再計算を強制したら行けるかも?(アイデアだけ実装したことはありません)
(まっつわん) 2020/01/31(金) 09:13
まっつわんさん >セル内編集中にマクロの起動はできません。(再計算もされないですよね?) もちろんセルの編集中は再計算されません。なので計算結果も変わりません。 なので、 >特定のBF2セルに関数が入っていて、その結果が変わると 関数の結果が変わるということは、編集が確定されて再計算されているということ。
もいちど書きますが、BF2セルを参照するユーザー定義関数を作成するのが一番簡単です。 ただし、ユーザー定義関数でできることには限りがあるので、 やりたいことの内容によります。 (´・ω・`) 2020/01/31(金) 09:29
この種の質問は珍しくないですが、仕様が曖昧なことが多いです。
つまり、この意味が厳密に意識されていない。 ↓ >その結果が変わると
計算諸ファクターに変化は有ったのだが、結果値が前と同じだった場合、 Posting_Outputを作動させるのか、させないのか。
作動させないとなると、以前の値は何だったかを判定しなければならなくなります。 それは結構厄介なので、まずその点を明らかにして貰った方がいいと思う。
(半平太) 2020/01/31(金) 10:07
> If Target.Count > 1 Then Exit Sub > If Target.Address <> "$BF$2" Then Exit Sub > If Target.Value <> "" And IsNumeric(Target.Value) Then
ついでに気になったこと。
1行目のチェックは、2行目のチェックに含まれるので不要です。
BF2セルの数式にVLOOKUP関数が使用されているので、 該当なしだった場合、トラブる可能性があります。
(半平太) 2020/01/31(金) 10:27
>まっつわんさん >>セル内編集中にマクロの起動はできません。(再計算もされないですよね?) >もちろんセルの編集中は再計算されません。なので計算結果も変わりません。 >なので、 >>特定のBF2セルに関数が入っていて、その結果が変わると >関数の結果が変わるということは、編集が確定されて再計算されているということ。
>Enterキーを押さずに
>その結果が変わると
どっちに主眼を置くかですね。
Enterキーを押さずにどんどん結果を変えてみたいかと思いましたが。。。。
(まっつわん) 2020/01/31(金) 11:20
どう書き替えたらできなかったんですかね? ユーザー定義関数は良い案ですね。 Call Posting_Output がどのような処理なのかわかれば、もう少し具体的にアドバイスできそうですね。 (稲葉) 2020/01/31(金) 12:34
> どう書き替えたらできなかったんですかね?
現実的には問題ないのでしょうが、理屈としては 第2引数の変更もウォッチする必要があるので、Addressプロパティだと苦しいかもです。 ↓ VLOOKUP($B$1,$J$4:$K$23,2,FALSE)
(半平太) 2020/01/31(金) 13:20
Adrressでダメなら・・・Intersect? ずれにしろご指摘されている通り、 「値が同じだった場合」の処置がわからないと手が出せませんね。 調べたら使ったことないプロパティで.Precedentsなんてあったので、同じシート内で完結するなら これでもいいかもしれませんね。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("BF2").Precedents) Is Nothing Then Exit Sub 'Precedentsはシートをまたぐ参照に対応していない Else '処理 End If End Sub
(稲葉) 2020/01/31(金) 14:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.