dポイントプレゼントキャンペーン実施中!

エクセルで別のセルの値に依存する計算結果が0でないときのみセルを更新し、
0のときは前回の値のままにしたいです。
VBAは使わずに式だけで可能でしょうか。
計算に使用する別のセルの値は別のシステムから入力され、刻々と変化します。

質問者からの補足コメント

  • 具体的な内容はこのような感じです。
    例えばA1セルとA2セルに値が入力されるとします。この入力が自動的に変化します。
    それぞれを足した内容をA3セルに表示する場合、A3セルに「=A1+A2」と式を書くと、A1セルやA2セルの内容が変化するたびにA3セルも変化します。
    このとき、足し算の結果が0になる場合は前回の内容をそのままにしたいのです。VBAで実現するのは簡単ですが、これをVBAを使わずにする方法はないでしょうか。

      補足日時:2022/07/30 22:36
  • 申し訳ないのですが、少し前提が簡単になりました。
    足し算までは入力側でやってもらい、結果を書き込んでもらいます。
    0のときは空白が書き込まれます。
    なのでこちらでは複数セルの足し算の結果でなく、単一セルの値だけを参照します。
    『A3セルに「=A1+A2」』ではなく『A3セルに「=A1」』として、
    A1が空白の場合はA3セルの内容をその前の値のままにしたいです。

    『IF(A1<>"", A1, A3)』これを設定したときに循環エラーとなりました。なのであきらめたのですが、しばらくして再度同じものを設定したら循環エラーになりませんでした。循環エラーとなる場合とならない場合の違いがよく分かりません。
    現在は「反復計算を行う」は許可しておりませんが、代入だけで計算を行っていないのでこのままでも問題ないと思いますがいかがでしょうか。

      補足日時:2022/07/31 08:17

A 回答 (4件)

お試しで、A3セルに次のような式を設定してみて下さい。



=IF(SUM(A1:A2)<>0,SUM(A1:A2),A3)

なお、上記の式は循環参照になるので、再計算時に警告が出ることがあります。それが嫌なら、オプションから「反復計算を行う」にチェックを入れましょう。

さて、ここからが問題なのですが・・・、
A1、A2は他のシステムから自動で入力されるようですが、例えば、次のように変化した場合、A3はどうなって欲しいのですか?

1,2 → 「3」
3,-3 → 「5」?、それとも「3」?
    • good
    • 0
この回答へのお礼

前提条件が単純化したこともあり、上手く行きました。ありがとうございました。

お礼日時:2022/07/31 08:21

>足し算の結果が0になる場合は前回の内容をそのままにしたいのです。


>(中略)・・・これをVBAを使わずにする方法はないでしょうか。

無理です。

これは、次々に送信されてくるデータに影響を受けない「値」として、前回値をどこかバックアップしかないといけません。
自動でそんなことができる方法は VBA 以外ありません。

感想になりますが、この内容で VBA を避ける方が非合理に思います。また、仮に VBA による解決でも結構な難題かなと思います。。。

環境がないので確証なしを前置きしますが、経験上で言えば、Worksheet_Change イベントは反応しない可能性が非常に高いと考えています。数式による値変化もイベントプロシージャではキャッチできない。

したがって、何らかの手法で A3 セルの値変化を監視する処理が必要と考えました。
    • good
    • 0

こんにちは。



セルの更新、が何を意味しているのかがポイントですが、VBAなしでは無理だと思います。
VBAでやるにしても、OnTime でスケジュール、またはデータ入力のインターバルがどれくらいかにもよりますけど、その割り込み(DoEvents)を考慮しつつ無限ループによる監視処理をすることになりそうです。
オススメはOnTimeかな。
    • good
    • 1

実際に何がしたいのか分かりませんが、質問文の内容を忠実に実装することは、不可能だと思います。

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!