roryconsulting

カスタム関数で、SumIf もどきを作ってみた

Discussion created by roryconsulting on Mar 10, 2014
Latest reply on Mar 11, 2014 by roryconsulting

繰り返しフィールドで、EXCELのSumIfのような動作をする計算フィールドが欲しくて、作ってみました。

目的は果たしたのですが、前提条件等使い方にクセが強く、皆さんの知恵を借りてよりよい関数にできたら良いなと思い投稿しました。

 

------------------------------------

// Usage : SumIf ( <集計するフィールド名> ; <比較するフィールド名> ; <一致条件> ; <繰り返し上限数> ; <変化検出用フィールド名1> ; <変化検出用フィールド名1> )

// Parameters :

// 1 SummeryField : 集計フィールド

// 2 ConditionField : 条件判定フィールド

// 3 MatchText : 一致条件 (条件判定フィールド[繰り返し位置]=指定文字列)

// 4 MaxIndex : 最大繰り返し数

// 5 Dummy1 : 計算させるために、ダミーのフィールドを指定させる

// 6 Dummy2 : 計算させるために、ダミーのフィールドを指定させる

// Return : 条件判定フィールド と、条件一致した繰り返し位置番号で、集計フィールドを集計します。

If ( MaxIndex = 0 ; 0 ; SumIf ( SummeryField ; ConditionField ; MatchText ; MaxIndex -1 ; 0 ; 0 ) +

If ( MatchText = GetField ( ConditionField & "[" & MaxIndex & "]" ) ; GetField ( SummeryField & "[" & MaxIndex & "]" ) ; 0 ) )

------------------------------------

具体例: 計算フィールドに、以下の様に設定します。 変化の検出をさせることで 計算結果を保存しなくても動作するはず。

SumIf (

"Income::AllowancesAmount" ;

"Income::IncomeExpansion" ;

AllowanceType [ Get ( 計算式繰り返し位置番号 ) ] ;

150 ;

Extend ( Income::Amounts ) ;

Extend ( Income::Expansions ) )

------------------------------------------------

Income::Amounts と、Income::Expansions は、値の変化をリアルタイムに検出できる様に、繰り返しフィールドをつなげているフィールドです。

 

目的は果たしたのですが、前提条件等使い方にクセが強く、皆さんの知恵を借りてよりよい関数にできたら良いなと思い投稿しました。

Outcomes