Excel数组公式如果函数操作顺序/优先级

Excel数组公式如果函数操作顺序/优先级,excel,excel-formula,excel-2013,Excel,Excel Formula,Excel 2013,上下文:我正在Excel中创建一个动态工具,将捐赠者数据库中的现有ID附加到将导入的定期收到的礼物上 我正在使用一个具有多个条件的数组公式,尝试根据质量可疑的传入数据(由于自定义用户输入)匹配数据库中的ID 样本内容: 根据要求,以下是标题和示例行。先从一张纸开始,然后从下一张纸开始 明智的交易2 礼物\u ID\u 1 问题:我的公式似乎没有对一系列嵌套IF语句中的第一条IF语句进行优先级排序。第一个IF基于他们的电子邮件,因为这可能是导入中可用的最唯一标识符 很抱歉,由于我奇怪的exce

上下文:我正在Excel中创建一个动态工具,将捐赠者数据库中的现有ID附加到将导入的定期收到的礼物上

我正在使用一个具有多个条件的数组公式,尝试根据质量可疑的传入数据(由于自定义用户输入)匹配数据库中的ID


样本内容:

根据要求,以下是标题和示例行。先从一张纸开始,然后从下一张纸开始

明智的交易2

礼物\u ID\u 1


问题:我的公式似乎没有对一系列嵌套IF语句中的第一条IF语句进行优先级排序。第一个IF基于他们的电子邮件,因为这可能是导入中可用的最唯一标识符

很抱歉,由于我奇怪的excel格式,复制的公式文本很奇怪。如果你想从我这边重做一次,请告诉我。
完整公式-不给予电子邮件优先权,但我认为它应该


取而代之的是使用一些不太理想的东西,再往下走几步,比如名字

如果我去掉公式中的整个If部分,电子邮件匹配就完美了

简化公式:



我错过了什么?这大概是我到目前为止深入研究Excel的深度,也是我在这里发表的第一篇文章。感谢您的帮助

它还不完美,但我已经让它适用于我所看到的问题案例

我意识到索引匹配是在数组中进行的,只是看看它遇到的第一个条目是谁,匹配了它需要查找的任何内容

因此,即使我正在使用

迈克尔·埃尔南多,48.00美元,北卡罗来纳州阿佩克斯市波特工厂博士,邮编35779, hernandos@gmail.com

此邮件(使用不同的姓氏和不相关的电子邮件)

迈克尔·约翰逊,48.00美元,北卡罗来纳州阿佩克斯内布拉斯加州大道555号,邮编35779,tomatoboy@aol.com

是在这之前发现的

迈克尔·赫尔南多,48.00美元,地址:北卡罗来纳州玛吉谷毛伊岛东部911号,邮编:35688, hernandos@gmail.com

因为我允许在最坏的情况下,只有交易金额、名字和邮政编码或城市都匹配


基本上,我需要收紧我的要求。我做了一些改变:
  • 电子邮件现在搜索所有内容,直到@符号。因为在我的数组的电子邮件列中有一些电子邮件行是空的,所以我不得不加入IFERROR来处理“N/a”结果 我认为一个8个字符的匹配街道地址是一个很好的指示器,所以我把它和电子邮件等同起来。
  • 或者,备份方法类似于匹配第一个、最后一个和位置
  • 在意识到我们只是想得到1和0之后,我还简化了IF条件的使用 我采用的公式是

    {=INDEX(GIFT_ID_1[#All],
           MATCH(1,
                (GIFT_ID_1[[#All],[Gift Amount]]=WISE_TRANSACTIONS_2[@[Transaction Amount]])    *
                IF(IFERROR((LEFT(GIFT_ID_1[[#All],[E-Mail Number]],FIND("@",GIFT_ID_1[[#All],[E-Mail Number]])-1)=LEFT(WISE_TRANSACTIONS_2[@Email],FIND("@",WISE_TRANSACTIONS_2[@Email])-1)),0)    +
                  (LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],8)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],8))    +
                  (IF(IF((GIFT_ID_1[[#All],[Last Name]]=WISE_TRANSACTIONS_2[@[Last Name]])    +                                                            
                         (LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[Last Name]],6))
                          >0,1,0)    *                                            
                      IF(((LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[First Name]],6))    +                                                       
                          (GIFT_ID_1[[#All],[Nickname]]=WISE_TRANSACTIONS_2[@[First Name]]))
                           >0,1,0)    *
                      IF(((LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],6)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],6))    +
                          (GIFT_ID_1[[#All],[Preferred ZIP]]=WISE_TRANSACTIONS_2[@Zip])    +
                          (GIFT_ID_1[[#All],[Preferred City]]=WISE_TRANSACTIONS_2[@City]))
                           >0,1,0)
                      >0,1,0))
                 >0,1,0),
                 0),6)}
    

    欢迎请编辑您的问题,将公式作为文本,而不是将公式作为图像发布?如果人们能够复制/粘贴你的代码,这样他们就可以解决你的问题,那么你就更有可能得到答案。谢谢你的回复,简,我没有意识到的好建议。我做了一些编辑,希望能提供更多有用的信息。如果你认为我应该做些不同的事情,请告诉我。我意识到了一些事情。这个公式可能是从上到下通过我的数组工作的,对吗?我发现有问题的地方是,它捕捉到的是一个名字相同、城市/邮政编码相同的人,而不是同一封电子邮件。它发现这个人比收到相同电子邮件的人高出300行。基本上,它在精确匹配之前找到了一个“OK”匹配。
    First Name  Name.1.2    Last Name   Gift Type   Nickname    Constituent ID  Gift ID Gift Amount Preferred Address Line 1    Preferred City  Preferred State Preferred ZIP   E-Mail Number   Fund ID
    
    
    Peter    Tular    Recurring Gift        81435   9777445    $48.00   123 Fake St Los Angeles California  90043   petertee@me.com     Sponsorship
    
    {=INDEX(GIFT_ID_1[#All],
                 MATCH(1,
                                     (GIFT_ID_1[[#All],[Gift Amount]]=WISE_TRANSACTIONS_2[@[Transaction Amount]])*
                                      IF((LEFT(GIFT_ID_1[[#All],[E-Mail Number]],6)=LEFT(WISE_TRANSACTIONS_2[@Email],6)),
                                           (LEFT(GIFT_ID_1[[#All],[E-Mail Number]],6)=LEFT(WISE_TRANSACTIONS_2[@Email],6)),
                                           (IF((GIFT_ID_1[[#All],[Last Name]]=WISE_TRANSACTIONS_2[@[Last Name]]),
                                                  (GIFT_ID_1[[#All],[Last Name]]=WISE_TRANSACTIONS_2[@[Last Name]]),
                                                  IF((LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[Last Name]],6)),
                                                        (LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[Last Name]],6)),
                                                        IF((LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[First Name]],6)),
                                                             (LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[First Name]],6)),
                                                             (GIFT_ID_1[[#All],[Nickname]]=WISE_TRANSACTIONS_2[@[First Name]]))))*
                                               (IF((LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],6)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],6)),
                                                      (LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],6)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],6)),
                                                  IF((GIFT_ID_1[[#All],[Preferred ZIP]]=WISE_TRANSACTIONS_2[@Zip]),
                                                       (GIFT_ID_1[[#All],[Preferred ZIP]]=WISE_TRANSACTIONS_2[@Zip]),
                                                       (GIFT_ID_1[[#All],[Preferred City]]=WISE_TRANSACTIONS_2[@City])))))),
                                            0),6)}
    
    {=INDEX(GIFT_ID_1[#All],
                 MATCH(1,
                                     (GIFT_ID_1[[#All],[Gift Amount]]=WISE_TRANSACTIONS_2[@[Transaction Amount]])*
                                      (LEFT(GIFT_ID_1[[#All],[E-Mail Number]],5)=LEFT(WISE_TRANSACTIONS_2[@Email],5)),
                                            0),6)}
    
    {=INDEX(GIFT_ID_1[#All],
           MATCH(1,
                (GIFT_ID_1[[#All],[Gift Amount]]=WISE_TRANSACTIONS_2[@[Transaction Amount]])    *
                IF(IFERROR((LEFT(GIFT_ID_1[[#All],[E-Mail Number]],FIND("@",GIFT_ID_1[[#All],[E-Mail Number]])-1)=LEFT(WISE_TRANSACTIONS_2[@Email],FIND("@",WISE_TRANSACTIONS_2[@Email])-1)),0)    +
                  (LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],8)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],8))    +
                  (IF(IF((GIFT_ID_1[[#All],[Last Name]]=WISE_TRANSACTIONS_2[@[Last Name]])    +                                                            
                         (LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[Last Name]],6))
                          >0,1,0)    *                                            
                      IF(((LEFT(GIFT_ID_1[[#All],[First Name]],6)=LEFT(WISE_TRANSACTIONS_2[@[First Name]],6))    +                                                       
                          (GIFT_ID_1[[#All],[Nickname]]=WISE_TRANSACTIONS_2[@[First Name]]))
                           >0,1,0)    *
                      IF(((LEFT(GIFT_ID_1[[#All],[Preferred Address Line 1]],6)=LEFT(WISE_TRANSACTIONS_2[@[Address 1]],6))    +
                          (GIFT_ID_1[[#All],[Preferred ZIP]]=WISE_TRANSACTIONS_2[@Zip])    +
                          (GIFT_ID_1[[#All],[Preferred City]]=WISE_TRANSACTIONS_2[@City]))
                           >0,1,0)
                      >0,1,0))
                 >0,1,0),
                 0),6)}