みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
win7 fmp13です。
フィールドを fieldA,fieldB,fieldC,field結果 を 4つ設定してます
fieldA に 判定項目A について 上、中、下
fieldB に 判定項目B について 上、中、下
fieldC に 判定項目C について 上、中、下
を入力します。
field結果 に 上記3つの結果について 上、中、下 の値を計算で自動入力したいのです。
1) A,B,Cのどれかに「下」があれば、 「下」となる。
2) 「下」が無く「中」があれば、 「中」となる。
3) 「下」「中」が無く全部「上」ならば、 「上」となる。
です。
数字であれば、MAXやMIN関数でわかるのですが、文字の場合どのような計算式を書けば良いのでしょうか。
お願いします。
Offline
Let (
ls = List ( fieldA ; fieldB ; fieldC ) ;
Case (
PatterCount ( ls ; "下" ) ; "下" ;
PatterCount ( ls ; "中" ) ; "中" ;
"上"
)
)
FilterValues() と IsEmpty() を組み合わせて使っても良いかもしれません。
Last edited by Shin (2017-01-28 10:13:14)
Offline
こんな計算式はどうでしょう
3個のフィールドをくっつけて判定します。
下の計算式のABCはそれぞれフィールドA・・・です。
Let([
$A=A;$B=B;$C=C;
$X=$a&$B&$C
];
Case(PatternCount ( $X ; "下" );"下";
PatternCount ( $X ; "中" );"中";
PatternCount ( $X ; "上" )=3;"上"
)
)
*
PatternCount ( $X ; "上" )=3;"上"
は=3をなくすとどれは一つだけ上であと空欄でも上になります。
Offline
あぁ かぶっちまった
でも式違うなぁ
いろいろあるみたいで・・・
Offline
書いてないから空欄の場合は存在しないかな。
こんな風でも
GetValue ( FilterValues ( "下¶中¶上" ; List ( fieldA ; fieldB ; fieldC ) ) ; 1 )
短そうな shin さんと tim さんので試してみます。
結果をまた報告します。
Offline
一番短い tim さんの式を使ったらうまく行きました。
GetValue ( FilterValues ( "下¶中¶上" ; List ( fieldA ; fieldB ; fieldC ) ) ; 1 )
この式の意味は、 3つのフィールド内の値を 下 中 上 の文字順優先に抽出(並べ替え)して
1番目の文字を返す。ということであってるのでしょうか。
Offline
大体そうです。同じ値が複数のフィールドにあっても1個しか抽出されないので、通常の並べ替えとはちょっと違うかな。
値やフィールドが増えた場合の変更が簡単。
値に改行があるとだめですね。
ありがとうございました。
"下¶中¶上" の順に各フィールドを検索し一番目の値を取得
GetValue ( FilterValues ( "下¶中¶上" ; List ( fieldA ; fieldB ; fieldC ) ) ; 1 )
値やフィールドが増えた場合の変更が簡単。
値に改行があるとだめ。
Offline
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 556.35 KiB (Peak: 579.8 KiB) ]