人に聞けない痔の悩み、これでスッキリ >>

困っています。
IF関数を使い条件が一致すれば処理、不一致なら何もしない(値保持)をしたいと思っています。

例えば
B1セル =if(A1=A2,処理,B1)
のようにすると循環参照のポップアップが出ます。

とりあえずオプションの反復計算回数を1回にして対処していますがなんとかしたいです。
マクロを使うしかないのでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

いきなり間違いの式を挙げて質問するのでなく、どういうことをしたいのか、文章にしてみて。


初心者が独特の、勝手な発想で式を作って質問しても、他の人は普通そういう式にはしないのだから想像が難しい。
=if(A1=A2でA1セルとA2セルの値が等しい場合に「処理」をして、そうでなければB1セルの値をセットする、となるが、B1セルの値は決らないからそうはかけない。
「処理」という部分も式を書いて質問するのが常識でしょう。文字を書けるはずがない(名前定義もあるか)。
VBAだって、このままの考えをコード化しても、うまく行かないと思う。
補足が必要。
    • good
    • 0

 その様な場合には、



=IF(A1=A2,[処理],[A1とA2が等しくない場合に、B1に表示させたい値])

という形にします。
 もし、[A1とA2が等しくない場合に、B1に表示させたい値]を、簡単に変更可能にしたい場合には、例えば、C1セルに[A1とA2が等しくない場合に、B1に表示させたい値]を入力しておき、

=IF(A1=A2,[処理],C1)

という形にします。
    • good
    • 0

反復計算のチェックを入れます。


反復回数を指定する事が有効かどうかは「処理」の内容に依りますが,ご相談に書かれている様子だけ見る限りは反復回数を指定してもイミはありません。



【参考】
実施例:
 A1セルに値を記入した時刻を保持する

反復計算のチェックを入れる
A1を空にしておく
B1をセルの書式設定の表示形式のユーザー定義で
h:mm:ss;;;
を設定しておく
B1に
=IF(A1="",0,IF(B1=0,NOW(),B1))
と式を入れる。
参照用にC1セルに
=NOW()
と式を入れておいて,やはり時刻の表示形式をつけておく。
A1に値を入れたり,他のセルに値を入れてみたりF9キーを押して再計算を走らせたり,A1の値を消したりして動作を確認してみる。
    • good
    • 0

同一セルに関数とデータ入力はできない事はエクセルの常識です。


意味のないエラー回避せずにマクロか、別列表示にして下さい。
    • good
    • 0

やりたいのはすでにB1に何か数値が入っているか、B1に数値が入ったらA1とA2を比較してと言うことになりますよね。


その辺がよく分からないのですが。後者だと式が入っているところに数値を入れようとすると式が消えちゃいます。
前者だと数値が入っているB1セルに式を入れようとすると数値が消えちゃいますけど。
ですからエクセル関数じゃ循環参照になってしまいますよ。
どうしてもというなら、マクロを組んで実行するしかないですけど。
関数を使うならif関数をB1じゃないセルで実行し、結果をB1に出す様にするしかないですよ。
    • good
    • 1

そりゃそうです。

だって、B1の内容はIF分でしか決まりませんから。Excelはあくまで「決まった値のセルを参照して、セルの値を決める」ことしか出来ません。ダイナミックにセルの内容を変えることはマクロでしか出来ないんです。

ですので、例えば、C1セルに =IF(A1=A2,処理,B1)とするんですね。で、B1セルは例えば「フォントを白」にして、入力していることを隠すとか、条件付き書式にしてA1=A2の時だけ色を変えてしまうとか・・・、とにかく「入力するセルと表示するセルを別々にする」以外に方法はありません。

マクロを使う場合、その1か所だけならそれほど難しい処理ではありませんが、これが複数個所で同じ処理をしなくちゃならないとすると、物凄く面倒な処理になる上に、処理自体もかなり重くなりますよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル if文で偽判定のとき、何も起こらないようにしたいのですが・・・

宜しくお願いします。

エクセル2003のif文で、偽の判定の時に何も起こらない状態にしたいのですがどうすればいいのでしょうか?


例えば



=if(A1=A2,"○","")


とすると偽の判定のときに空欄になってしまいますよね?
既に文字が入力されているところにコピペしても、偽の判定ならば打ち込まれた文字が残るようにしたいのですが・・・・

教えて頂ければと思います。

宜しくお願いいたします。

Aベストアンサー

=IF(A1=A2,"○","元の文字列")

ひょっとしてこういうことですか?

QExcel関数IFの循環参照について

お世話になります。
IF関数で、c1のセルに
=IF(a1>=90,b1-1,(IF(a1>=80,b1-2,b1-3)))
という式を作りました。
b1の値によって、c1は -1 等になりますが、c1の最低値は 0 にしたいのです。
e1 に、この結果を表示し、c1 は e1 を参照すれば可能ですが、外の方法は無いでしょうか?

Aベストアンサー

MAX(...と書こうとしたら既に回答されてしまった。

それはさておき、「B1-」をまとめる書き方もあります。参考までに。

=MAX(0,B1-IF(A1>=90,1,IF(A1>=80,2,3)))

QIF関数 条件に一致しない場合はそのままのデータを

はじめまして、宜しくおねがいします。


Excelデータシートに、

A列
1 いちごケーキ
2 メロン
3 チョコレートケーキ

B列
=IF(COUNTIF(A1,"*ケーキ*"),"ケーキ","フルーツ")
=IF(COUNTIF(A2,"*ケーキ*"),"ケーキ","フルーツ")
=IF(COUNTIF(A3,"*ケーキ*"),"ケーキ","フルーツ")

として、

B列に
ケーキ
フルーツ
ケーキ


この様なデータを取得していましたが、

条件のケーキに一致しない場合、
フルーツではなく、メロンとなるように
A2のデータをそのまま取得したいのです。


色々な検索ワードでググってみたのですが、
回答が得られず困っています。


もし、お分かりの方がいらっしゃいましたら助けてください。
お願いいしたます。

Aベストアンサー

=IF(COUNTIF(A1,"*ケーキ*"),"ケーキ","フルーツ")

ではなく

=IF(COUNTIF(A1,"*ケーキ*"),"ケーキ",A1)

でどうですか?


もちろん、この関数を下にコピーしていただければ
A1の部分は
A2、A3・・・と相対的にコピーされます

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QSUMIF関数で、「ブランク以外を合計」を指定したい

SUMIF(範囲,検索条件,[合計範囲])
の、検索条件部分に、
「セル内に数字、文字をとわず、とにかく何か入力されていたら合計する」
といった意味合いの条件を指定したいのですが、その方法がわかりません。

画像で説明させていただくと、
A2のセルにSUMIF関数を用いて、
文字が入力されているc,d,e列の数値を合計し、
90という結果が欲しい、ということです。

どなたかご教授をお願いいたしますm(__)m

Aベストアンサー

こんばんは。

なんか皆さん難しく考えすぎのような・・・
SUMIF関数でできますよ。検索条件を空白以外とすればいいだけです。
=SUMIF(B2:F2,"<>",B1:F1) でできます。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QSUMIFS関数でOR条件を使いたい場合の関数

Excel2010を使用しています。
家計簿を作成しているのですが、SUMIFS関数でOR条件を使用したい場合どのように書けばよいでしょうか。

図は、明細と合計欄です。
ピンクのセルが円、それ以外はドルです。
合計欄のように、円とドルをそれぞれ分けて項目毎の合計額を出したいです。
セルE21のように、円の場合は「MUFJ」「ゆうちょ」ですので、MUFJとゆうちょのSUMIFS関数合計値を足しています。
これを、1行にまとめたいのですが、適切な関数はないでしょうか?
SUMIFSではOR条件が使えないようですので・・・・・・

明細行に円・ドルの列を追加すれば簡単なのですが、明細行の列はこれ以上増やしたくないので、できれば数式のほうで処理できればと思っています。

よろしくお願いいたします。

Aベストアンサー

例示のデータなら以下のような数式になります。

=SUM(SUMIFS($C$2:$C$14,$D$2:$D$14,{"MUFJ","ゆうちょ"},$B$2:$B$14,B21))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング