みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
年齢、性別、職業、のフィールドがあり、希望としては、これらをカンマ区切りで結合したいのですが、
(例:年齢=38、性別="男"、職業="会社員"の場合には、【結果】フィールドには「38,男性,会社員」となって欲しい
条件がいくつかあります。
(1)フィールドが空欄のときには計算しない。カンマもつけない。
(2)別のフィールドにフラグがあり、年齢フラグ、性別フラグ、職業フラグ、それぞれが1のときのみ、計算する。フィールドに値があっても、フラグが0のときには計算しない
できればカスタム関数で実装したいのですが、いい手はありますでしょうか?
どなたかお知恵を拝借できれば幸いです。よろしくお願いします。
以下は、自分で書いてみた、計算フィールドですが、年齢フラグが0のとき、全て計算されない、というバグがあります。どこを直せば良いのでしょうか?
------------------以下ソース--------------------
Let([
$$Ketsugou = If ( not IsEmpty (年齢) and 年齢フラグ; 年齢 );
$$Ketsugou = If ( not IsEmpty (年齢) and not IsEmpty (性別); $$Ketsugou & If ( $$Ketsugou ≠ "" and 性別フラグ; "," & 性別 );
$$Ketsugou & If ( $$Ketsugou = "" and 性別フラグ; 性別 )
);
$$Ketsugou = If ( not IsEmpty (年齢) + not IsEmpty (性別) > 0 and not IsEmpty (職業); $$Ketsugou & If ( $$Ketsugou ≠ "" and 職業フラグ; "," & 職業 );
$$Ketsugou & If ( $$Ketsugou = "" and 職業フラグ; 職業 )
)
];
$$Ketsugou
)
------------------以上ソース--------------------
Offline
ちょっと要件の割に式が複雑過ぎるので、以下のようにしてみてはどうでしょう。
Let([
#s = IF(年齢フラグ and not isEmpty(年齢) ; 年齢 & ",")
& IF(性別フラグ and not isEmpty(性別) ; 性別 & ",")
& IF(職業フラグ and not isEmpty(職業) ; 職業 & ",")
];
Left(#s ; Length(#s)-1)
)
前のが存在したら前方にカンマ、ではなく存在した値の後ろに常にカンマをつけて、最後に一番後ろのカンマを削除するようにした方がすっきりします。
Offline
List関数の特性を利用すれば、もっと短く出きるかな、
Let([
#s=List(
If(年齢フラグ; 年齢);
If(性別フラグ; 性別);
If(職業フラグ; 職業)
)
];
Substitute(#s; [¶; ","])
)
Offline
micさん、Hiroさん、ありがとうございました。
自分でも、複雑な式を書いている、もっとシンプルなやり方があるはずだ、と思っていたのですが、やっぱり簡単だったんですね!
解決しました。
Offline
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 508.41 KiB (Peak: 515.13 KiB) ]