みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんにちは。質問させてください。
使用環境はFM18です。
「チェック」という1つのフィールドをチェックボックスにして値を3つ入れます。
例えば A B C とチェックボックスがあったとして、If で判定する場合
If チェック="A"
はAのみチェックが入っていた場合のみ判定となり、AとBがチェックされてる判定は
If チェック="A" and チェック="B" となります。
A と B にチェックがされている時に
If チェック="A" で判定がしたい場合は List(チェック) などで一度Listにしたあとに
判定する方法しかないでしょうか?
他にもっと簡単な方法があれば教えて下さい。
チェックボックスセットを設定したフィールドの値を確認すれば分かると思いますが、
値一覧から複数の値を選択した場合は選択した値が改行区切りで入力されるという動きをします。
"A" と "B" にチェックをしたら "A¶B" と入力した場合と同じということです。
この状態では チェック のみでも List ( チェック ) でも結果は同じです。確認されましたか?
Listを使っても評価の計算式として チェック = "A" では "A" のみチェックされた状態の評価になってしまいます。
どうしても チェック = "A" を使わなくてはいけませんか?何をしたいのかちょっとよく分かりません。
"A" にチェックされているか否か(Aを含むか否か)であれば PatternCount ( チェック ; "A" ) で評価できます。
※値一覧に "A" と "BAA" などAを含む値が複数ある場合は別途考える必要がありますが。
"簡単な" とか "スマートな" 計算式やスクリプトを求める方がいらっしゃいますが、
大切なのはスマートさより求めている結果を正しく出せることと、あとから分かりやすいことです。
※あとから見直した時に何をしているのかイチイチ考えなくていけない計算式やスクリプトはNGです。
Last edited by Moz (2019-09-01 19:15:39)
Offline
FilterValuesを使うのが定石でしょうか。
Case(
FilterValues(チェック;"A¶B")=FilterValues("A¶B";"A¶B"); "AとBの二択結果値";
FilterValues(チェック;"A")=FilterValues("A";"A"); "Aのみ一択結果値"
)
※【上式修正】
イケナイ!
チェック順を補正しないといけないですね。
Case(
FilterValues("A¶B";チェック)=FilterValues("A¶B";"A¶B"); "AとBの二択結果値";
FilterValues(チェック;"A")=FilterValues("A";"A"); "Aのみ一択結果値"
)
Last edited by Hiro (2019-09-02 11:10:38)
Offline
FilterValues をスッカリ忘れて長々とアホなことを......失礼しました。
Hiroさんの計算式で両辺に FilterValues 使っているのは Values 系関数の末尾の¶への対応でしょうか。
チェックボックスを B → A の順にチェックした場合を考えると二択時の評価は
SortValues ( FilterValues ( チェック ; "A¶B" ) ) = FilterValues ( "A¶B" ; "A¶B" )
としても良いかも知れません。
Offline
Filterしたら数だけ見る方がちょっとシンプルかな。
複数選択時は
ValueCount(FilterValues(調べるリスト;チェックボックス))=選択数
単数時は
FilterValues(調べる値;チェックボックス)<>""
> AとBがチェックされてる判定は
> If チェック="A" and チェック="B" となります
皆さんの回答から、
もうお気づきと思いますが、
ではないですよね。
視点を変えて、
チェック項目一つごとの複数のフィールドにすると
考えが簡単になるのでは。
Offline
Pages: 1
[ Generated in 0.006 seconds, 12 queries executed - Memory usage: 515.05 KiB (Peak: 519.59 KiB) ]