วิธีแก้ไขคำสั่ง IF ที่ซ้อนกันใน excel - คุณป้อนอาร์กิวเมนต์มากเกินไปสำหรับฟังก์ชันนี้


0

ฉันใช้สูตร excel ด้านล่าง แต่ได้รับข้อผิดพลาดว่า "คุณป้อนอาร์กิวเมนต์มากเกินไปสำหรับฟังก์ชันนี้" มีวิธีอื่นที่ฉันสามารถทำให้ฟังก์ชั่นนี้ใช้งานได้ไหม?

โปรดแก้ตัวสำหรับคำถามพื้นฐานนี้ ฉันไม่มีความเชี่ยวชาญใน excel

IF((OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas")),"AML","", IF((OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China")),"CitiScreening","", IF((OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China")),"CitiScreening","", IF((OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG", AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail")),"Core Compliance",""))))

คุณได้รวมเงื่อนไข "citiscreening" เดียวกันไว้สองครั้งฉันคิดว่านี่เป็นข้อผิดพลาดดังนั้นฉันจะทำราวกับว่ามันไม่อยู่ที่นั่น
Some_Guy

ลองพิจารณาดูว่าจะทำอย่างไรเมื่อมีคนตอบคำถามของฉันหากคำตอบข้อใดข้อหนึ่งช่วยให้คุณเข้าใจปัญหาได้
เซท

คำตอบ:


2

อีกวิธีในการเขียนฟังก์ชันของคุณก็คือ ทุกระดับจะเป็นอาร์กิวเมนต์ของฟังก์ชันหนึ่งระดับเหนือระดับ หากคุณดูเอกสารประกอบสำหรับIF FunctionและOR Functionคุณจะเห็นว่าคุณเกิดข้อผิดพลาดซึ่งส่งมอบข้อโต้แย้งมากมายให้กับบางฟังก์ชั่นเหล่านั้น คือถ้าฟังก์ชั่นบางอย่าง IF ที่ถูกต้องเพียงอย่างเดียวนั้นน่าจะเป็นที่ซ้อนกันที่ลึกที่สุดอินสแตนซ์อื่น ๆ ทั้งหมดมี 4 ข้อโต้แย้ง หากคุณลบ"",รายการมันควรจะทำงาน

IF(
    (
        OR
        (
            AF2="CitiCMT",
            AF2="AML APAC ATHENA",
            AF2="AML EMEA",
            AF2="AML Americas"
        )
    ),
    "AML",
    "",
    IF
    (
        (
            OR
            (
                AF2="CitiScreening",
                AF2="Offshore Wealth Services",
                AF2="CitiScreening China"
            )
        ),
        "CitiScreening",
        "", 
        IF
        (
            (
                OR
                (
                    AF2="CitiScreening",
                    AF2="Offshore Wealth Services",
                    AF2="CitiScreening China"
                )
            ),
            "CitiScreening",
            "",
            IF
            (
                (
                    OR
                    (
                        AF2="Registrations", AF2="Trade Surveillance - Markets",
                        AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG",
                        AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance",
                        AF2="Trade Surveillance - Retail"
                    )
                ),
                "Core Compliance",
                ""
            )
        )
    )
)

2

ฉันจะตั้งค่าตารางด้วยอินพุตที่เป็นไปได้ของคุณและผลลัพธ์ที่ต้องการในแผ่นงานอื่น:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเรียกว่าฉัน Codes

จากนั้นมันเป็นเรื่องง่าย ๆ ของ VLOOKUP ที่จะคืนค่าสตริงที่ต้องการ:

=IFERROR(VLOOKUP(AF2,Codes!A:B,2,FALSE),"")

ตอนนี้สามารถขยายได้อย่างง่ายดายหากมีอินพุตและเอาต์พุตใหม่โดยไม่จำเป็นต้องเปลี่ยนสูตร หนึ่งจะเพิ่มเกณฑ์ nad ผลลัพธ์ไปยังตาราง


0

ปัญหาของคุณคือวิธีที่คุณกำลังผูกมัดคำสั่ง if เข้าด้วยกัน

คำสั่ง if ใน excel ถ้าอยู่ในรูปแบบเสมอ:

=IF(CONDITION,VAL IF TRUE, VAL IF FALSE)

คุณมีพวกเขาถูกล่ามโซ่ไว้ด้วยกันเช่น

=IF1(CONDITION1,VAL IF TRUE, VAL IF FALSE, IF2(CONDITION2,...))

สิ่งนี้ไม่สมเหตุสมผลเพราะคุณกำลังพูด

=IF1(CONDITION1,VAL IF TRUE, VAL IF FALSE, SOMETHING ELSE)

หากต้องการรวมข้อความถ้าคุณมีสองตัวเลือก:

  1. ทำให้แต่ละรายการในภายหลังหากคำสั่งเงื่อนไข FALSE ของคำสั่ง if ก่อนหน้านี้ ดังนั้นคุณกำลังพูดว่า "หากสิ่งที่เป็นจริงแล้วเอาท์พุทนี้ถ้าไม่แล้วย้ายไปที่ถ้าคำสั่ง" ถัดไป ในภาษา excel ทั้ง:

    =IF(CONDITION1,OUTPUT1,IF(CONDITION2,OUTPUT2,IF(CONDITION3,OUTPUT3,"")))

  2. เชื่อมต่อประโยคจำนวนมากเข้าด้วยกัน นั่นก็เหมือนกับการพูดว่า "ถ้าสิ่งที่เป็นจริงแล้วเอาท์พุทนี้ถ้าไม่เอาท์พุทก็ไม่ทำอะไรเลยนอกจากนี้ถ้าสิ่งอื่นเป็นจริงแล้วเอาท์พุทนี้

    =IF(CONDITION1,OUTPUT1,"") & IF(CONDITION2,OUTPUT2,"") & IF(CONDITION3,OUTPUT3,"")

โปรดทราบว่าในกรณีแรกทันทีที่พบเงื่อนไขอย่างใดอย่างหนึ่งสูตรจะเสร็จสมบูรณ์ในขณะที่ในกรณีที่สองเงื่อนไขทั้งหมดจะถูกทดสอบเสมอ ซึ่งหมายความว่า:

  • วิธีที่ 1 เร็วกว่า

  • วิธีที่ 2 ทำงานเมื่อเงื่อนไขมากกว่าหนึ่งข้อสามารถเป็นจริงได้

ตัวอย่างของคุณก็เช่นกัน

 =IF(OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas"),"AML",
  IF(OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China"),"CitiScreening",
  IF(OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance
  - IBSG", AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail"),"Core Compliance","")))

หรือ

 =IF(OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas"),"AML","") & 
  IF(OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China"),"CitiScreening","") & 
  IF(OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG",
  AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail"),"Core Compliance","")

ในกรณีของคุณเซลล์ไม่สามารถเป็น "Citiscreening" และ "การลงทะเบียน" ได้ดังนั้นจึงเหมาะสมกว่าที่จะใช้เซลล์แรกแม้ว่าความเร็วจะไม่สำคัญก็ตามเซลล์ที่สองสามารถอ่านได้ง่ายขึ้นและง่ายต่อการอ่านมากขึ้น แก้ไขเนื่องจากไม่มีวงเล็บจำนวนมากที่จะจับคู่


เคล็ดลับ:

  • โปรดทราบว่าคุณสามารถแบ่งสูตรข้ามบรรทัดได้โดยกด alt + enter สิ่งนี้จะทำให้ง่ายต่อการอ่านและไม่มีผลต่อผลลัพธ์ของสูตร

  • Excel มีคำแนะนำเครื่องมือที่มีประโยชน์ซึ่งแสดงให้คุณเห็นว่าอาร์กิวเมนต์ตัวใดที่เคอร์เซอร์อยู่ที่นั่น นอกจากนี้หากคุณคลิกที่อาร์กิวเมนต์มันจะเน้นส่วนของสูตรนั้น

ในฟังก์ชั่นดั้งเดิมของคุณคุณจะเห็นว่ามีการขัดแย้งกันมากเกินไปเพราะหลังจาก "" ครั้งแรกไม่มีอะไรเป็นตัวหนา

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


ในกรณีที่มีประโยชน์ต่อไปนี้เป็นคำตอบข้างต้นใน pseudocode:

ตัวเลือกที่ 1.

if (condition1) then   
    output1
    else if (condition2) then
        output2
            else if (condition3) then
                output3
                    else output nothing

ตัวเลือก 2:

if (condition1) then   
    output1
else 
    output nothing

if (condition2) then
    output2
else 
    output nothing

if (condition3) then
    output3
else 
    output nothing
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.