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

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

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

You are not logged in.

Announcement

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


#1 2016-11-07 09:56:43

えび@PT
Guest

Aフィールドの値に応じてBフィールドの数値を加算する方法

OS:[win10]
FileMaker Ver:[10]

お世話になります。

Aフィールド(繰り返し)には氏名、Bフィールド(繰り返し)には1~6までの数字が入力されています。

Aフィールドには同じ氏名が入ることがあり、その際、その人のBフィールドの値を合計し、Cフィールド(繰り返し)に表示したいと考えています。
例えば次の通りです。

Aフィールド      Bフィールド
「い」さん       1
「ろ」さん       2
「は」さん       1
「に」さん       3
「い」さん       2

この場合に、
「い」さんの名前は2回ありますので、2回の数値を合計して「3」になるように計算したいのですが、いい計算式が思い浮かびません。

このA~Cフィールドは繰り返しフィールドとしていますが、繰り返しフィールドで実現不可または困難なのであれば、繰り返しではなく複数フィールド作成しても構いません。

#2 2016-11-07 11:33:03

チポ
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

繰り返し1回分を1レコードとする別テーブルにすれば簡単ですよ。

現在のテーブルにユニークな値のフィールドを作りそれとリレーションして、
ポータルで表示します。

Offline

#3 2016-11-07 14:14:34

Hiro
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

1人1レコードにして、リレーション集計、ポータル表示するのが王道ですが、
どうしても繰り返しフィールドで実現したいなら、「Cフィールド」繰り返し計算フィールドの式は、


Let([
   $n=FieldRepetitions(Get(ファイル名); Get(レイアウト名); "Aフィールド") * 1;
   $i=0;
   $r="";
   $fnc="Case($i=$n; $r;
      Let([
         $i=$i+1;
         $r=$r + Case(Aフィールド[$i]=Aフィールド; Bフィールド[$i])
         ]; Evaluate($fnc))
   )"
];
   Evaluate($fnc; [Aフィールド;Bフィールド])
)

Last edited by Hiro (2016-11-07 14:49:34)

Offline

#4 2016-11-08 11:32:05

えび@PT
Guest

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

チポさん、Hiroさんには毎回お世話になっています。ご助言ありがとうございます。

チポさんの方法の場合、新テーブルにA・Bフィールドを作り、人数分だけレコード数を作れば良いのでしょうか?
またユニークな値をリレーションに用いることについて、毎度理解できず質問している気がしますが、ユニークな値というのは名前ではなく、数字などのほうが良いのでしょうか?

Hiroさんの計算式でできたら楽だなと思い、試しに使ってみたのですが、Aフィールドの繰り返し番号[1]の人の対応するBフィールドの番号が、Cフィールドの繰り返し番号[1]と[3]に表示され、他は何も表示されなく、またどのように操作しても反応しませんでした。
計算式を理解できれば良いのですが、知識が追い付かず申し訳ありません。

またご助言頂ければ幸いです。

#5 2016-11-08 11:49:22

チポ
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

> 新テーブルにA・Bフィールドを作り、人数分だけレコード数を作れば良いのでしょうか
その通りです。
リレーションの設定で関連レコードの作成に許可を与えれば、
ポータル行で入力すればいいので、現状の繰り返しフィールドと同じ感覚で入力作業が出来ます。


リレーションキーに、現在のテーブルでユニークな値となるフィールドを作ります。
その値は、IDのようなものがいいでしょう。

Offline

#6 2016-11-08 12:35:28

Hiro
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

式の設定に誤りがあると思いますので、設定説明代わりにサンプルをアップしました。

●サンプル「繰り返しフィールド内集計.fp7」 → http://yahoo.jp/box/8TvCFe

Offline

#7 2016-11-09 11:41:26

えび@PT
Guest

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

チポさん、Hiroさん両名とも誠にありがとうございます。
チポさんの方法でテーブル2を作成し、1人1レコード作成してIDをリレーションしましたが、ポータル表示にて思うようにいかず躓きました。。。
具体的には、ポータル表示したものの、入力をうけつけない状態になりました。

Hiroさん、わざわざファイルまで作成していただき、有り難すぎて涙がでるほどです。本当にありがとうございます。
説明不足で申し訳ないのですが、Cフィールドに合計値が出たら、別レイアウトにて各人の名前を1回ずつ表示し、そこに各人に対応するCフィールドを表示したいと考えています。分かりづらいと思いますが、要は何度も名前がでてくるのではなく、1人1行だけにしたいところです。

お二人には何度もお手を煩わせ、大変申し訳なく思っているところですが、よろしくお願いします。

また、Hiroさんのファイルを使わせていただき、Hiroさん、チポさんへの途中経過のファイルとさせていただきましたので、見ていただけると幸いです。
→http://yahoo.jp/box/wH-bbA

Hiroさんの方は、リスト表示にて各人の名前が1回ずつ出て、それに対応するCフィールドが現れるようにレイアウトを作っていますが、Cフィールドの設定が全く分からないので、テキストフィールドとして手打ちしてあります。

チポさんの方は正に途中経過で、やってはみたものの、ポータルに入力する場合に「003」と打ったあと非アクティブ状態にすると「001」になってしまったり、表示されなくなったりなどの問題がみられました。

よろしくお願いします。

#8 2016-11-09 13:08:45

チポ
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

前レスでも書きましたが、

リレーションの設定で
関連テーブル側の
「□このリレーションシップを使用して
       このテーブルでのレコード作成を許可」
これにチェックが入っていますか?

これをチェックするとポータルの新規行に入力でき、
関連テーブルのレコードが作られます。

この際、
リレーションの照合フィールドには自動で入力されますから、
キーに入力する必要は有りません。


申し訳有りません、
ここではファイルのアップダウンが出来ませんのでファイルを見ることが出来ません。

Offline

#9 2016-11-10 01:02:50

Hiro
Member

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

アップデートサンプルをアップしました。

●アップデート「繰り返しフィールド内集計v2.fp7」 → http://yahoo.jp/box/uSHQLk

Offline

#10 2016-11-11 16:57:20

えび@PT
Guest

Re: Aフィールドの値に応じてBフィールドの数値を加算する方法

チポさん、Hiroさんありがとうございます。

現在、両名の方法で実践中ですが、まだ苦労しているところです。
いま、何が原因かさえわからないので、わかったらまた質問させてください!

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 526.22 KiB (Peak: 547.13 KiB) ]