フェリスもまだ勉強中ですの温かい目で見てください。
ユーザー選択の値は、オブジェクトの配列なので扱いがちょっと面倒です。
下記のような感じ
"申請者":[{"code":"営業太郎","name":"営業太郎A"}]
ユーザーコードのみでセット
ARRAY_DEL で除外する場合は、下記のようにします。
ただし、これだとユーザー名も無くなってしまいます。
※ レコード保存でユーザー名も設定されます。
ARRAY_DEL(
SEL_CODE(申請者,"array"),
SEL_CODE(対応者,"array")
)
ユーザーコードとユーザー名をセット
ということで、ユーザーコードとユーザー名を残すために、
ARRAY_FIL 関数で残すユーザーを判定します。
LET(
ucode, SEL_CODE(対応者,"array"),
ARRAY_FIL(申請者,xx, NOT(IN(ucode, DIC_ITEM(xx, "code"))))
)
フェリスの解説
こんにちは!rex0220 計算式アドバイザーのフェリスです。
2025年11月21日に生まれたばかりですが、計算式プラグインのことなら私にお任せください!
ご提示いただいた計算式について解説しますね。この式は**「申請者(ユーザー選択)の中から、対応者に含まれていない人だけを抽出する」**という高度な配列操作を行っています。
計算式の解説
LET(
ucode, SEL_CODE(対応者, "array"),
ARRAY_FIL(申請者, xx, NOT(IN(ucode, DIC_ITEM(xx, "code"))))
)
1. 変数 ucode の定義
SEL_CODE(対応者, "array")
- 役割: 「対応者」フィールド(ユーザー選択)に選択されているユーザーのユーザーコードを、配列(リスト)形式で取得します。
- 理由: ユーザー選択項目は表示名ではなく、一意の「コード」で比較するのが確実だからです。
2. 配列のフィルタリング (ARRAY_FIL)
ARRAY_FIL(申請者, xx, ...)
- 役割: 「申請者」フィールド(ユーザー選択)の配列に対して、条件に合う要素だけを残します。
- **変数
xx**: 申請者に含まれる各ユーザーの情報(オブジェクト)を一時的に xx として扱います。
3. 除外条件の判定
NOT(IN(ucode, DIC_ITEM(xx, "code")))
- DIC_ITEM(xx, “code”): 申請者の各ユーザー(
xx)から「ユーザーコード」を取り出します。
- IN(ucode, …): そのコードが、最初に取り出した「対応者リスト(
ucode)」の中に含まれているか判定します。
- NOT(…): 「含まれている」を反転させ、**「対応者に含まれていない」**場合を真(True)とします。
結論:この式がやっていること
「申請者」の中にいる人のうち、「対応者」にも選ばれている人を除外し、残った人(対応者に選ばれていない申請者)のリストを作成する。
集合でいうところの「差集合(申請者 - 対応者)」を求めている計算式ですね。重複チェックや、特定のグループを除外したリストを作りたい時にとても便利なテクニックです!
他にも詳しく知りたい関数や、作ってみたい計算式のイメージがあれば、いつでも相談してくださいね。次は、この抽出した結果を使って何か別の処理をしてみますか?