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

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

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

You are not logged in.

Announcement

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


#1 2014-05-14 11:44:42

sora
Guest

EXCEL関数

FM12の初心者です。

FMからデータを取出してEXCELで加工しています。
それを中止しFMでできないか相談がありました。
そのために、例えば下記関数をEXCELで利用していますが、FMで設計できないでしょうか。

=IF(SUM(H8:H13)=600,1,0)

H8:H13 の部分は次のレコードでは
H9:H14 で、次は H10:H15 へと順次変わっていきます。


宜しくお願い致します。

#2 2014-05-14 11:52:04

tim
Guest

Re: EXCEL関数

どのセルの計算式かにもよりますが
GetNthRecord(H;Get(レコード番号)+調整)
のようにして1セル分参照できます。5個を+で連結してSUMの代わり。
IFのとこは同じ。

#3 2014-05-14 12:31:49

Hiro
Member

Re: EXCEL関数

FM → Excel → FM なら、詰まるところ FM内処理だけで済むのだから、FMのデータ構成と遣りたいことを説明して貰った方がより具体的解答が付きそうな?

それと、「If(論理式; 1; 0)」は単に「論理式」だけと等価です。

Offline

#4 2014-05-14 12:32:35

keima
Member

Re: EXCEL関数

>=IF(SUM(H8:H13)=600,1,0)
この式が入っているセルの番号は○8、それとも○13ですか?

Offline

#5 2014-05-14 16:40:27

sora
Guest

Re: EXCEL関数

tim wrote:

どのセルの計算式かにもよりますが
GetNthRecord(H;Get(レコード番号)+調整)
のようにして1セル分参照できます。5個を+で連結してSUMの代わり。
IFのとこは同じ。

この式でEXCELと同じ値になりましたが、これで良かったのでしょうか。

If (GetNthRecord (Hフィールド; Get ( レコード番号 )  -1)
+ GetNthRecord (Hフィールド; Get ( レコード番号 )  -2)
+ GetNthRecord (Hフィールド; Get ( レコード番号 )  -3)
+ GetNthRecord (Hフィールド; Get ( レコード番号 )  -4)
+ GetNthRecord (Hフィールド; Get ( レコード番号 )  -5)
+ Hフィールド
=600;1;0)

厄介な式があります。データ全体の式です。
同じ様に式を繰り返すことはできません。
良い方法はないでしょうか。
If(MAX(D7:D9000)D4,1,0
If(SUM(D7:D9000)0,1,0

目的はFMデータを傾向管理に利用できないか検討することになりました。
取出しデータをEXCELで加工し色々検討中です。
又、傾向管理後のデータは最終的にはFMに保存したいと考えています。
傾向管理の担当者より計算は、FMでできないか相談がありましたので、問い合わせしました。
FMでできるとスピードアップになると考えています。
宜しくお願い致します。

#6 2014-05-14 17:06:44

チポ
Member

Re: EXCEL関数

リレーションで集計できますヨ

レコードの並び順にシリアル番号を振って、
さらに計算フィールドを作り、(仮にシリアルaとします)
その計算式
  シリアル - 5
として、リレーションを
  シリアル >= シリアル
  and
  シリアルa <= シリアル
と定義。

これで
  Sim(リレーション::H)
が以前6レコードの合計です。



MAX(D7:D9000)

これはリレーションを
  シリアル X シリアル
とすれば全てのレコードが照合されます。

Offline

#7 2014-05-14 17:09:47

tim
Guest

Re: EXCEL関数

5個じゃなく6個でしたね...
Ifは不要という指摘がありますのでそれも取り入れてみては。

全体の最大と合計は、集計フィールドを追加。
でも値と比較するなら自己リレーションをXで設定して関数にした方がいいかも。
D4は、多分グローバルフィールドですね。

#8 2014-05-14 17:44:46

keima
Member

Re: EXCEL関数

H列のテーブル名::フィールド名を TBL::H として、
H8:H13 の結果を13の行に表示する式
H列は空白は0に、計算値自動入力 If ( IsEmpty ( Self ) ; 0 ; Self ) 既存値置き換え、常に評価

Let([$$Nlist = ExecuteSQL ( "Select \"H\" From \"TBL\"" ; "" ; "" );
Tsum=MiddleValues ( $$Nlist ; Get ( レコード番号 ) - 5 ; 6 ) & 0];
Case ( Get ( レコード番号 ) < 6 ; "" ; Evaluate(Substitute( Tsum ; ¶ ; "+" ))) = 600
)


DMAXの式は
ExecuteSQL ( "Select Max (\"D\") From \"TBL\"" ; "" ; "" )
とか。
ただしDフィールドを エクセルのようにD1:D6 を除外とかはできないので一工夫を。

  部分集計サンプル 

Last edited by keima (2014-05-14 17:55:58)

Offline

#9 2014-05-15 16:38:07

sora
Guest

Re: EXCEL関数

keima様
サンプルまで作成いただき有難うございます。
見たこともない関数なのであり大変びっくりしております。
理解に時間が掛かりそうです。

チポ様
tim様
具体的にはどの様にすれば良いのでしょうか。
すみません。初心者なので理解できなくて。

#10 2014-05-15 16:58:00

チポ
Member

Re: EXCEL関数

んん、

私のレスのどこが分りませんか?

リレーションの設定と、
計算フィールドを定義するだけですが。。

Offline

#11 2014-05-15 20:04:08

keima
Member

Re: EXCEL関数

チポさんのリレーションを使った式が一番すっきりしていて
関数の使い方もFMらしく、こちらがお勧めです。

  部分集計チポさん式のサンプル 

Offline

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: 521.31 KiB (Peak: 526.22 KiB) ]