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