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

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

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

You are not logged in.

Announcement

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


#1 2014-01-22 15:50:02

mogura
Guest

case関数で、同一フィールドの複数条件を指定したい

FM12,Win7です。
よろしくお願いします。


Aフィールドに、1、2、3、4、5、6を値一覧で設定し、レイアウトでも同じ値一覧を、そしてコントロールスタイルはチェックボックスにしています。

ここで、Bフィールドに計算式を指定して、Aフィールドの1と2、もしくは1と3、など、指定の値がそろった時だけYESを、1と4や1だけの時などはNOを返すようにCase関数を設定したいのですが、うまくいきません。

今指定している式は、Case (A = "1" and A = "2"; "Yes";"No" )です。

他のフィールドならandでうまくいくので、同じフィールドを二重指定していることになっているからなのかな、とは思ったのですが、ならばどう計算式を指定すればいいのかわかりません。。。

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

#2 2014-01-22 16:08:39

tim
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

チェックボックスのフィールド値は改行区切りのリストなんで、複数選択すると=になりません。
例えばこんな風にする。
Let(L=List("1":"2");
Case (FilterValues(L;A)=L; "Yes";"No" )
)

#3 2014-01-23 10:09:35

mogura
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

教えて頂いた式を参考にして、どうにか設定できました。
ありがとうございました!

#4 2014-01-23 10:15:49

tim
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

複数選択すると、チェックした順番によって1改行2だったり2改行1だったりするので、順番が関係ないFilterValues関数を使います。

#5 2014-01-23 10:20:36

チポ
Member

Re: case関数で、同一フィールドの複数条件を指定したい

PatternCount関数
でも有無を判定できますね。

数字の2桁以上が有るとちょっと工夫が必要ですが。。

Offline

#6 2014-01-23 10:31:23

tim
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

確かに、1~6なら=の代わりにPatternCount(A;"1") and ~~~のようにすると、最初に書いてる式と同じような形式でできますね。
FilterValuesは、指定の値がたくさんある場合でもListの中が増えるだけという利点がある。

あんまり気にしたことないけど、テキスト系の関数では
>FilterValues 関数では、大文字と小文字は区別されません
という注意点がある。

#7 2014-01-23 13:40:50

Hiro
Member

Re: case関数で、同一フィールドの複数条件を指定したい

FilterValuesの計算結果(空欄以外の)には「末尾改行」が付加されるので注意が必要です。
例えば、
    FilterValues(リスト1;リスト2)=リスト1
この論理式が「真」を返すケースはありませんから、等価判別式としては無効です。

Offline

#8 2014-01-23 14:00:23

tim
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

ああ、そうか。両方FilterValuesにするか、ValueCountするか、単に改行を追加するかを忘れてる。。。
どのようにどうにかしたのかな。

#9 2014-01-23 17:34:49

mogura
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

解決のフラグをたてるのを忘れていたと思って見に来たら、たくさんのアドバイスをありがとうございます。
実はHiroさんのおっしゃる通り、最後の改行がネックになってしまってうまくいかなかったので、

timさんの
>チェックボックスのフィールド値は改行区切りのリストなんで、複数選択すると=になりません。
と、
Listを使う
というアドバイスを参考に、手持ちのFM関数の本とにらめっこしながら、結局ちょっと違う計算式を設定したのです。
アドバイスをいただいておきながら、失礼をしているようで申し訳なかったので言い出せず・・・。
でもアドバイスをいただかなければ出来なかったです。本当に感謝しています。ありがとうございます。


私が最終的に設定したのは、

Case ( Substitute ( List ( A ) ; ¶ ; "、" ) ="1、2" or
Substitute ( List ( A ) ; ¶ ; "、" ) = "2、1" or
Substitute ( List ( A ) ; ¶ ; "、" ) = "1、3" or
Substitute ( List ( A ) ; ¶ ; "、" ) = "3、1" or ;
"Yes" ; "No")

といった感じで単純な式を手間をかけて並べたというだけです。少ない条件だったからできたと思います。
そして今、Listは改行で区切って返す関数なのでここには必要ないことに気が付き、はずした計算式にしてみたらこれでもできました。

しかし、例えばもっと設定する項目が多くなってしまって大変だったりした時、もしFilterValuesを使うとしたら、どのようにすればよかったのでしょうか?
例えば、最後に改行を追加するとしたら、、

Let(L=List("1";"2");
Case (FilterValues(L;A)=L   ←この部分    ; "Yes";"No" )
)

だと思うのですが、単純に¶を入れるだけではだめですよね?
ちょっとやってみたのですが、よくわかりませんでした。
重ね重ねお手数おかけしますが、よろしくお願いいたします。

#10 2014-01-23 18:18:47

Hiro
Member

Re: case関数で、同一フィールドの複数条件を指定したい

例えば式は、

Let([
  #FV=FilterValues(A;A);
  //▼Yes条件列挙(2値のリスト順は不問、組み合わせだけ指定)
  #L[1]=List(1;2);
    #L[2]=List(1;3);
      ・・・・
        #L[N]=List(n1;n2)
];
  Case(
    FilterValues(A;#L[1])=#FV
      or FilterValues(A;#L[2])=#FV
        or ・・・
          or FilterValues(A;#L[N])=#FV
    ; "Yes"; "No"
  )
)

Last edited by Hiro (2014-01-24 02:45:12)

Offline

#11 2014-01-24 11:59:02

tim
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

私の言った「FilterValuesは、指定の値がたくさんある場合でもListの中が増えるだけという利点がある。」は、
「選択される値がたくさん(2個でなく)」という意味なんで、組み合わせが複数の場合はList1個でというわけには...
1つの組み合わせでの値の区切りを改行以外にすれば、できなくもないか。
実際読点に置き換えてるようなんで
Let ([
A=Substitute ( FilterValues ( ValueListItems ( Get(ファイル名) ; "値一覧名" ) ; A ) ; ¶ ; "、" );//フィールド値の入力順を整頓
A=Left(A;Length(A)-1);//余分な改行の分を取る
Sets=List("1、2"; "1、3") //いくつでも書けるけど、組み合わせが1個の場合はList関数を省略する必要が
];
Case ( ValueCount ( FilterValues ( A ; Sets ) ) ; "Yes" ; "No")
)

Hiroさんのより良くなってるかは微妙。

やってみたら、これは指定した値以外にチェックされてるのがあるとNoになってしまいますね。"1,2,3"とか、"1,2、4"とか。
これは「私が最終的に設定したの」に近いと思いますけど、どっちが必要なのかな。

#12 2014-01-28 11:01:24

mogura
Guest

Re: case関数で、同一フィールドの複数条件を指定したい

お礼が遅くなってしまって本当にもうしわけありません。

必要なのは、指定値以外にチェックが入っている時はNoになる式です。
教えて頂いた式を入れて色々といじってみて、本当に勉強になりました。
timさん、Hiroさん、チポさん、本当にありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 527.6 KiB (Peak: 548.14 KiB) ]