- 締切済み
エクセル循環参照の回避
困っています。 IF関数を使い条件が一致すれば処理、不一致なら何もしない(値保持)をしたいと思っています。 例えば B1セル =if(A1=A2,処理,B1) のようにすると循環参照のポップアップが出ます。 とりあえずオプションの反復計算回数を1回にして対処していますがなんとかしたいです。 マクロを使うしかないのでしょうか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
いきなり間違いの式を挙げて質問するのでなく、どういうことをしたいのか、文章にしてみて。 初心者が独特の、勝手な発想で式を作って質問しても、他の人は普通そういう式にはしないのだから想像が難しい。 =if(A1=A2でA1セルとA2セルの値が等しい場合に「処理」をして、そうでなければB1セルの値をセットする、となるが、B1セルの値は決らないからそうはかけない。 「処理」という部分も式を書いて質問するのが常識でしょう。文字を書けるはずがない(名前定義もあるか)。 VBAだって、このままの考えをコード化しても、うまく行かないと思う。 補足が必要。
- kagakusuki
- ベストアンサー率51% (2610/5101)
その様な場合には、 =IF(A1=A2,[処理],[A1とA2が等しくない場合に、B1に表示させたい値]) という形にします。 もし、[A1とA2が等しくない場合に、B1に表示させたい値]を、簡単に変更可能にしたい場合には、例えば、C1セルに[A1とA2が等しくない場合に、B1に表示させたい値]を入力しておき、 =IF(A1=A2,[処理],C1) という形にします。
- keithin
- ベストアンサー率66% (5278/7941)
反復計算のチェックを入れます。 反復回数を指定する事が有効かどうかは「処理」の内容に依りますが,ご相談に書かれている様子だけ見る限りは反復回数を指定してもイミはありません。 【参考】 実施例: A1セルに値を記入した時刻を保持する 反復計算のチェックを入れる A1を空にしておく B1をセルの書式設定の表示形式のユーザー定義で h:mm:ss;;; を設定しておく B1に =IF(A1="",0,IF(B1=0,NOW(),B1)) と式を入れる。 参照用にC1セルに =NOW() と式を入れておいて,やはり時刻の表示形式をつけておく。 A1に値を入れたり,他のセルに値を入れてみたりF9キーを押して再計算を走らせたり,A1の値を消したりして動作を確認してみる。
- mu2011
- ベストアンサー率38% (1910/4994)
同一セルに関数とデータ入力はできない事はエクセルの常識です。 意味のないエラー回避せずにマクロか、別列表示にして下さい。
- Turbo415
- ベストアンサー率26% (2631/9774)
やりたいのはすでにB1に何か数値が入っているか、B1に数値が入ったらA1とA2を比較してと言うことになりますよね。 その辺がよく分からないのですが。後者だと式が入っているところに数値を入れようとすると式が消えちゃいます。 前者だと数値が入っているB1セルに式を入れようとすると数値が消えちゃいますけど。 ですからエクセル関数じゃ循環参照になってしまいますよ。 どうしてもというなら、マクロを組んで実行するしかないですけど。 関数を使うならif関数をB1じゃないセルで実行し、結果をB1に出す様にするしかないですよ。
- FEX2053
- ベストアンサー率37% (7991/21371)
そりゃそうです。だって、B1の内容はIF分でしか決まりませんから。Excelはあくまで「決まった値のセルを参照して、セルの値を決める」ことしか出来ません。ダイナミックにセルの内容を変えることはマクロでしか出来ないんです。 ですので、例えば、C1セルに =IF(A1=A2,処理,B1)とするんですね。で、B1セルは例えば「フォントを白」にして、入力していることを隠すとか、条件付き書式にしてA1=A2の時だけ色を変えてしまうとか・・・、とにかく「入力するセルと表示するセルを別々にする」以外に方法はありません。 マクロを使う場合、その1か所だけならそれほど難しい処理ではありませんが、これが複数個所で同じ処理をしなくちゃならないとすると、物凄く面倒な処理になる上に、処理自体もかなり重くなりますよ。