みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
2016年3月に以下の投稿があります
https://fm-aid.com/bbs2/viewtopic.php?id=4244
内容は、
********************************************************
過去ログも検索したのですが、見つからず何卒お助けください。Ver.6です。
繰り返しフィールドから任意の集計をしたいのです。
31の繰り返しフィールドがあり、すでにその中に数字が入ってます。(空白もあり)
たとえばその繰り返しフィールドの1~10までの数字が入ってる箇所の合計、もしくは15~から31までのフィールドの中で数字の入っている箇所のフィールドの合計を求めたいのです。
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
----------------------------------------------
3 4 3 4 3 ...
1~10までの合計の場合、14を返したいのです。
どういう式を用いれば良いでしょうか?初心者ゆえお手数かけますがなにとぞよろしくお願いいたします。
******************************************************************************
質問の方のFMバージョンはVer6でしたが、
最新のVer16を使用した場合、有効な計算方法はありますでしょうか?
以上、よろしくお願い致します。
Offline
ループ計算式で求める方法。
Let([
$str=開始位置番号;
$end=終了位置番号;
$res="";
$fnc="Case($str>$end; $res;
Let([
$res=Sum($res; その繰り返しフィールド[$str]);
$str=$str+1
]; Evaluate($fnc) )
)"
];
Evaluate($fnc)
)
Offline
Hiro様
アドバイス有難うございました。
確かに、思い通りの結果が得られます。
Evaluate関数は、特定のフィールドの値を変更した時のtime stamp取得に使ったことが有りますが、
今回のような使い方は、ヘルプを見ても今一つ理解できません。
大変お手数ですが、可能でしたら、簡単に上記の式のご説明をお願いできませんでしょうか?
よろしくお願い致します。
Offline
目的のループ関数式を、Letでテキスト変数 $fnc に定義し、それをEvaluateで実行します。
定義式$fnc内のEvaluate($fnc)は自己再帰させてループ計算を実現するための処理です。
式の意味は、指定位置の値を加算する基本処理を、指定開始位置から終了位置まで繰り返しループさせ、集計結果を得るものです。
Let([
//▼関数$fnc内で使われる引数を宣言
$str=開始位置番号;
$end=終了位置番号;
$res="";
//▼ループ関数$fncを定義(テキスト定義するだけで計算実行はしません)
$fnc=
"Case($str>$end; $res; /*ループ抜け条件をCaseの最初で宣言*/
Let([ /*条件外は基本処理を行う、繰越し変数を再定義*/
$res=Sum($res; その繰り返しフィールド[$str]);
$str=$str+1
]; Evaluate($fnc) ) /*再帰措置、関数式の最初へ戻り再計算*/
)"
];
//▼定義関数$fncをここで実行
Evaluate($fnc)
)
Last edited by Hiro (2017-06-09 11:22:33)
Offline
Hiro様
早速のご対応、有難うございました。
本当に助かります。
これから勉強します!
Offline
ちょっと遊びで作ってみました。とっても面白い動きです。(上級者向き)
https://www.dropbox.com/s/y1fdr1hw855z1 … 7.zip?dl=0
Offline
[ Generated in 0.013 seconds, 9 queries executed - Memory usage: 514.66 KiB (Peak: 519.57 KiB) ]