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

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

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

You are not logged in.

Announcement

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


#1 2017-09-27 22:40:50

salon_hiyake
Member

値がある場合のみ、カンマ区切りで結合したい。(フラグによって使い分けたい)

年齢、性別、職業、のフィールドがあり、希望としては、これらをカンマ区切りで結合したいのですが、
(例:年齢=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

#2 2017-09-27 23:31:15

mic
Member

Re: 値がある場合のみ、カンマ区切りで結合したい。(フラグによって使い分けたい)

ちょっと要件の割に式が複雑過ぎるので、以下のようにしてみてはどうでしょう。

Let([
 #s = IF(年齢フラグ and not isEmpty(年齢) ; 年齢 & ",")
    & IF(性別フラグ and not isEmpty(性別) ; 性別 & ",")
    & IF(職業フラグ and not isEmpty(職業) ; 職業 & ",")
];
 Left(#s ; Length(#s)-1)
)

前のが存在したら前方にカンマ、ではなく存在した値の後ろに常にカンマをつけて、最後に一番後ろのカンマを削除するようにした方がすっきりします。

Offline

#3 2017-09-28 01:17:54

Hiro
Member

Re: 値がある場合のみ、カンマ区切りで結合したい。(フラグによって使い分けたい)

List関数の特性を利用すれば、もっと短く出きるかな、

Let([
   #s=List(
      If(年齢フラグ; 年齢);
      If(性別フラグ; 性別);
      If(職業フラグ; 職業)
      )
];
   Substitute(#s; [¶; ","])
)

Offline

#4 2017-09-28 07:43:43

salon_hiyake
Member

Re: 値がある場合のみ、カンマ区切りで結合したい。(フラグによって使い分けたい)

micさん、Hiroさん、ありがとうございました。
自分でも、複雑な式を書いている、もっとシンプルなやり方があるはずだ、と思っていたのですが、やっぱり簡単だったんですね!
解決しました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 509.46 KiB (Peak: 516.37 KiB) ]