複数フィールドの条件 関数

初めましてKINTONE初心者です。

テーブル内・外の値を、テーブル外の計算フィールドへ結果を出したいのですが、

上手くいきません。

①「費用」が空白なら「履歴区分」が何を選んでも「入金」空白。

②「費用」が無償なら「入金」不要。

③「費用」が有償なら「入金」未入金。

④「費用」が有償かつ「履歴区分」が入金の時のみ「入金」入金済。

させたいのですが可能でしょうか。

どうぞ宜しくお願い致します。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,IF(CONTAINS(履歴区分,“入金”,“入金済”,“未入金”))))

このようになると思います。優先度順にIF文を実行し、elseの場合に次の優先度のIFを繋げていくことになります。

mis-hashimotoさん、度々すみません、ありがとうございます。

KINTONEで実行してみましたが、「 CONTAINS関数に指定できる引数は、2個までです。」

とエラーが出てしまったのですが、何か間違いがあるのでしょうか。素人ですみません。

どうぞ宜しくお願い致します。

nao さま

かっこの位置を間違えました。申し訳ありません。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,IF(CONTAINS(履歴区分,“入金”),“入金済”,“未入金”)))

mis-hashimotoさん、ありがとうございます。

できました!凄いですね!

こんなに難しい関数、教えて頂き解決して頂き、ありがとうございます。

度々すみません。

(履歴区分,“入金”)+(進捗状態,“済”)で入金済へ変更できないか試しておりますが保存はできますが
切り替わりませんでした。

ANDの使い方が違うのでしょうか。

IF(費用=“”,“”,
IF(費用=“無償”,“不要”,
IF(AND
(CONTAINS(履歴区分,“入金”),CONTAINS(進捗状態,“済”)),
“入金済”,“未入金”)
))

nao さま

CONTAINS演算子は、複数選択またはチェックボックス(複数選択できるもの)、もしくはサブテーブル内のフィールドにのみ使えるものです。

進捗状況はドロップダウンフィールドかと思いますので、その場合は「=」を使用する必要があります。

mis-hashimotoさん、ありがとうございます。

=を追加し実行致しました。

CONTAINS関数には2個の引数が必要です。と出てしまいます。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,
IF(AND(CONTAINS(履歴区分=“入金”),CONTAINS(進捗状態=“済”),
“入金済”,“未入金”
))))

根本的な関数の書き方に問題があるのですね。

アドバイス宜しくお願い致します。

nao さま

IF(AND(履歴区分=“入金”,進捗状態=“済”),

CONTAINS自体を使用せず、以上のようになります。
また、ANDの閉じる位置も違うようです。以下のようになります。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,IF(AND(履歴区分=“入金”,進捗状態=“済”),“入金済”,“未入金”)))

mis-hashimotoさんありがとうございます。

すみません。CONTAINS関数は不要でしたね。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,IF(AND(履歴区分=“入金”,進捗状態=“済”),“入金済”,“未入金”)))

配列型の値に対して適切な関数が利用されていません、と出てしまいました。

nao さま

履歴区分はサブテーブル内でしたね…失礼しました。進捗状態だけ変更する必要がありました。

IF(費用=“”,“”,IF(費用=“無償”,“不要”,IF(AND(CONTAINS(履歴区分,“入金”),進捗状態=“済”),“入金済”,“未入金”)))

mis-hashimotoさんありがとうございます。

度々すみません。エラーが出てしまいました。(配列型の値に対して適切な関数が利用されていません)

 

nao さま

失礼しました。私は画像の左上の「進捗状況」が計算式に組み込むものと思って見ていました。サブテーブル内の「進捗状態」ですね。

その場合はnao さまが最初に投稿された

IF(費用=“”,“”,
IF(費用=“無償”,“不要”,
IF(AND(CONTAINS(履歴区分,“入金”),CONTAINS(進捗状態,“済”)),
“入金済”,“未入金”)
))

こちらの計算式で問題ありません。

当方環境では動作しております。

mis-hashimotoさんありがとうございます。

度々すみません。説明ができておらず申し訳ございませんでした。

「履歴区分」には他に( 連絡・訪問・下見 入金 )などありまして、

画像の様に入金の行以外の連絡の行を「済」にすると「入金済」となってしまいます。

入金を選んだ行を済にした場合のみ「入金済」に出来ますでしょうか。

説明不足ですみません。どうぞ宜しくお願い致します。

nao さま

両方の条件を満たす行があった場合のみ、という処理ですね。その場合はフィールドの自動計算機能ではできないので、JavaScriptによるカスタマイズが必要になります。

入金フィールドの自動計算機能はオフにし、以下を使用して下さい。

(() => {

    let payment = '入金'; // 入金のフィールドコード
    let cost = '費用'; // 費用のフィールドコード
    let history = '履歴区分'; // 履歴区分のフィールドコード
    let progress = '進捗状況'; // 進捗状況のフィールドコード
    let subTable = 'テーブル'; // サブテーブルのフィールドコード

    kintone.events.on([
        `app.record.create.change.${cost}`, `app.record.edit.change.${cost}`,
        `app.record.create.change.${history}`, `app.record.edit.change.${history}`,
        `app.record.create.change.${progress}`, `app.record.edit.change.${progress}`
    ], (event) => {
        let record = event.record;
        let paymentValue = '';

        if (record[cost].value === '無償') {
            paymentValue = '不要';
      } else if (record[cost].value === '有償') {
            let isComplete = record[subTable].value.some((row) => {
                return row.value[history].value === '入金' && row.value[progress].value === '済';
            });

            if (isComplete) {
                paymentValue = '入金済';
            } else {
                paymentValue = '未入金';
            }
        }

        record[payment].value = paymentValue;

        return event;
    });
})();

mis-hashimotoさんありがとうございます。

できました!初心者へこんなにご丁寧にありがとうございます。

関数でも難しく、JavaScriptカスタマイズとなりますと、程遠いです。

mis-hashimotoさん助けて頂き、本当にありがとうございます。