初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-10-02 03:26:03

eddie
Member

If関数中での複数条件の記述方法

お世話になっております。FMP11 Mac 使用です。

かなり基本的なことで恥ずかしいのですが、手持ちの資料ではわからないので質問させてください。
If関数中に複数の条件を同列で並べるときの記述方法はどうなっているでしょうか?

[例1]
If関数において、(テーブルA::フィールドA="x") と (テーブルB::フィールドB="y") の両方の条件を両方満たす式

[例2]
If関数において、PatternCount(テーブルA::フィールドA;"abc") ≥ 1 と PatternCount(テーブルB::フィールドB;"def") ≥1 の両方を条件を満たす式

[例3]
If関数において、(テーブルA::フィールドA="x")  と PatternCount(テーブルB::フィールドB;"def") ≥1 の両方の条件を両方満たす式

[例4]
If関数において、 IsEmpty(テーブルA::フィールドA) と not IsEmpty(テーブルB::フィールドB) の両方の条件を両方満たす式

それぞれ、
If ( テーブルA::フィールドA="x" and テーブルB::フィールドB="y" ; ..... ) のように and で結んでみたりしたのですが、上手くいきません。

Ifの入れ子にすればできるのはわかるのですが、条件が3つになった場合や、or を含む場合は複雑になるので、記述方法(ルール)を教えていただけるとありがたいです。
よろしくお願い致します。

Offline

#2 2014-10-02 06:38:36

Moz
Member

Re: If関数中での複数条件の記述方法

例はすべて and のようなので、例1だけ。
If ( テーブルA::フィールドA="x" and テーブルB::フィールドB="y" ; 1 ; 0 )
条件を満たせば 1 です。

なぜうまく行かないのか分かりませんが、もしダメなら計算式を載せてみては如何でしょう。
複数の条件を満たす場合は and 、いずれかの条件を満たす場合は、 or です。
複合する場合は ( ) で囲います。

例)複合条件(and)のいずれか(or)を満たすとしたい場合
( x = 1 and y = 2 ) or ( x = 2 and y = 0 )

もし、条件と結果が複数セットあって、条件1 ならば 結果1 条件2 ならば 結果2 条件3 ならば 結果3 としたい場合、Case を使います。

Offline

#3 2014-10-02 07:00:22

wader
Member

Re: If関数中での複数条件の記述方法

条件が複数といっても全部テーブルがAとBで違ってますから、どういう条件なのかが自分でもわかってないのでは。

Offline

#4 2014-10-02 07:17:13

Moz
Member

Re: If関数中での複数条件の記述方法

あっ!(書き方ばかり見て、中身をよく見ていなかった)

うまく動かない計算式だけでなく現在のテーブルの構成なども書き出してみては如何でしょう?

Last edited by Moz (2014-10-02 07:17:42)

Offline

#5 2014-10-02 14:18:40

eddie
Member

Re: If関数中での複数条件の記述方法

Mozさま、waderさま、
早速のご回答ありがとうございます。
おかげさまで上手くいきました。なんと If ( not IsEmpty(テーブルA::フィールド) and (テーブルB::フィールドB) ; ..... ) という書き方をしていました。。

これを、
If ( not IsEmpty(テーブルA::フィールド) and not IsEmpty (テーブルB::フィールドB) ; ..... ) としたり、あるいは
If ( not IsEmpty(テーブルA::フィールド and テーブルB::フィールドB) ; ..... ) としてみたら、どちらも上手くいきました。

基本的なことがわかっておらず恥ずかしい限りですが、大変勉強になりました。ありがとうございました。

Offline

#6 2014-10-03 01:36:38

eddie
Member

Re: If関数中での複数条件の記述方法

すみません、少し嘘をつきました。
> If ( not IsEmpty(テーブルA::フィールド and テーブルB::フィールドB) ; ..... )
これだとうまくいきませんでした。。
なかなか細かいルールは理解できませんが、いずれにせよ目の前の問題は解決しました。改めてお礼申し上げます。

Offline

#7 2014-10-03 06:05:52

Moz
Member

Re: If関数中での複数条件の記述方法

> If ( not IsEmpty(テーブルA::フィールド and テーブルB::フィールドB) ; ..... )

どのような時に不成立になるのでしょう?
テーブルA::フィールド and テーブルB::フィールドB は真偽を返すので not IsEmpty は「1(真)」になるかと......

蛇足かも知れませんが、ふたつのフィールドの値をつなぐ場合は「&」を使います。

eddieさん、ご覧の皆さま、すみません。
not IsEmpty を IsEmpty と思い込んでアホなことを書き込んでいました。(修正済です)

Last edited by Moz (2014-10-03 07:52:14)

Offline

#8 2014-10-07 07:18:14

eddie
Member

Re: If関数中での複数条件の記述方法

Mozさま
ありがとうございます。考え直したら当たり前のことでした。。

本来はフィールドAとフィールドBの両方に入力されている場合のみを条件指定したかったのですが、
> If ( not IsEmpty(テーブルA::フィールドA and テーブルB::フィールドB) ; ..... )
これだとAかBのいずれかに入力されていれば条件を満たしてしまいますよね。ドモルガンの法則で ¬(A∧B) = ¬A ∨ ¬B ですので。

本来欲しかったのは ¬A ∧ ¬B の条件を満たすものだったので、
If ( not IsEmpty(テーブルA::フィールド) and not IsEmpty (テーブルB::フィールドB) ; ..... )
これで正しいはずですよね。

実際起こった不具合も片方しか入力がないものまで条件に入ってきてしまうことでした。
関数を書くだけでもいろいろ考えないといけないですね。勉強になりました。ありがとうございました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 518.74 KiB (Peak: 523.28 KiB) ]