需要find匹配两列条件的值。 可能的VLOOKUP
以下更新 – 6/4
我在Excel中有两个工作表。 一个是捐助者名单,其中包括支票号码/金额/捐助者ID(“ 捐款 ”工作表),另一个是捐助者ID /支票号码/金额(快速工作表)的会计信息的副本。 Quickbooks没有填入DonorID。
我的问题是,我需要匹配捐助者的ID与他们的支票。 为了得到这个,我需要将“Quickbooks”中的check#
和amount
与“Donations”中的相同,当它们匹配时,它会给我对应于该支票的捐助者ID。
这是如何布局:
Donations Worksheet: ABC DonationID Check# Amount 1 179 106 $200 2 210 106 $500 3 220 106 $600 Quickbooks Worksheet: ABC DonationID Check# Amount 1 n/a 106 200 2 N/a 1074 500 3 N/a 300 1000
当我要求find“支票#106是$ 200”时,它应该告诉我,它是来自捐赠者179。
一些支票不匹配,而不是来自捐助者。 这个名单有近50000个名字。
请问我任何问题,所以我可以澄清这一点。 对于这一切,我也有点新意,如果我不清楚,请道歉。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
感谢大家的帮助。 我们还没到那里,但你们都在正确的方向指引我。
我已经添加了一个页面的屏幕截图供参考,因为团队有问题,使给定的公式的工作。 我还将两张纸合并到一个页面中,因此交叉工作表的引用更less,并且更易于阅读。
Cknum =检查#
两列匹配通常以两种典型configuration之一进行; 一个是数组公式,另一个是标准公式。 两者都使用INDEX / MATCH函数对的变体。
Quickbooks!A2的标准公式是,
=IFERROR(INDEX(Donations!A$1:A$999, MIN(INDEX(ROW($1:$999)+((Donations!B$1:B$999<>B2)+(Donations!C$1:C$999<>C2))*1E+99, , ))), "No match")
Quickbooks!A2的数组公式版本将是,
=IFERROR(INDEX(Donations!A$1:A$999, MATCH(1, (Donations!B$1:B$999=B2)*(Donations!C$1:C$999=C2), 0)), "no match")
数组公式需要用Ctrl + Shift + Enter 键来完成,而不是简单地按Enter键 。
一旦公式之一被正确地放在Quickbooks!A2中,根据需要填写以捕获其他行的值。 请注意,我已经更改了样本数据的第三行以显示检查# 106的第二个DonationID查找。
使用大约50K条logging,可能在列B和列C上都可以进行多重匹配。要从捐赠工作表中捕获后续的第二,第三等匹配项,请将MIN函数更改为SMALL函数,并使用渐进式COUNTIFS函数来调整k次序。
=IFERROR(INDEX(Donations!A$1:A$50000, SMALL(INDEX(ROW($1:$50000)+((Donations!B$1:B$50000<>B2)+(Donations!C$1:C$50000<>C2))*1E+99, , ), COUNTIFS(B$2:B2, B2, C$2:C2, C2))), "No match")
在这样的捐赠工作表中设置了一些有意义的副本之后,
DonationID Check# Amount 179 106 $200 210 106 $500 220 106 $600 979 106 $200 910 106 $500 920 106 $600
您应该收到如下结果。
IFERROR函数已被用来捕获不匹配,并显示不匹配,而不是#N/A
错误。
我修改了单个工作表示例数据中的值,以显示各种匹配,以及chknum和金额由两个不同的donationID条目重复的情况。
匹配的logging是颜色编码的,以便快速参考。 我已经在Docs.com-Preview网站上公开提供了此示例工作簿。
VLOOKUP_w_Multiple_Criteria_and_Duplicates.xlsx
有一个现有的命令,DGET,可以用于多个标准。
在你的QB工作表中,我添加了几行,从A7开始。
ID CheckNo Amount 106 200 The ID is 179
请注意,我将Check#更改为CheckNo。 我还添加了donationDB
的定义,从A1到D4。
DGet声明是179的地方。 我用=DGET(donationDB,Donations!B1,Quickbooks!A7:C8)
DGET做的是查找数据库,告诉它你正在寻找B1中的施主ID,使用A7到C8的标准。
解决此问题的一个快速方法是在Donations
数据上创build一个数据透视表,然后使用GETPIVOTDATA
从中提取值以获取Quickbooks
表上的捐赠ID。
如果捐款ID始终是数字,这很容易完成。 您设置了一个包含支票号码和金额的行字段的数据透视表。 然后,您将值设置为等于捐款ID的MIN
或MAX
。 如果只有一个结果,你会立即得到它。 如果发生冲突,可以通过切换到COUNT
并将其中任何一个标记>1
。
一旦你用MAX
设置了表格,你就可以快速的使用GETPIVOTDATA
来获得匹配的值。
这假定您的amount
值足够接近(浮点十进制)来匹配。 几乎全部都会。 有些可能不会。 如果你可以把5万条logging减到100条,但要仔细检查,那么生活就是好的。
示例数据和Pivot设置的图片 ,显示了在左侧数据(带有捐赠ID)上构build的数据透视表。 查找数据在右侧。
公式查找是一个简单的GETPIVOTDATA
,这是在单元格F3
并复制下来。
=GETPIVOTDATA("Donation",$B$10,"Check",G3,"Amount",H3)
你会得到#REF!
错误,如果没有匹配。 查看最后一行的例子。
要通过匹配几个字段来比较两组数据并获得另一个字段作为匹配的结果,我build议为每个数据库添加一个新字段以创build要匹配的字段的连接值,然后使用VLOOKUP
和COUNTIF
公式组合。
数据A:Quickbooks – 范围D1:M24
和数据B:捐款 – 范围R1:W23
,分别扩展到C1:M24
和Q1:W23
- 添加字段“键”来连接要匹配的字段(在这种情况下,2个字段,但也适用于更多) ,使用
|
作为分隔符。
数据A:在列C
添加字段“密钥”并input此公式
=CONCATENATE($E2,"|",$M2)
数据B:在列Q
添加字段“密钥”并input此公式
=CONCATENATE($V2,"|",$W2)
- input公式以匹配连接字段并检索所需的信息(还指示重复的项目)
数据A:在列N
添加此公式
=IF(COUNTIF($Q$1:$Q$23,$C2)>1, "Duplicated: "&COUNTIF($Q$1:$Q$23,$C2), IFERROR(VLOOKUP($C2,$Q$1:$W$23,2,0),""))
数据B:在列X
添加此公式
=IF(COUNTIF($C$1:$M$24,$Q5)>1, "Duplicated: "&COUNTIF($C$1:$M$24,$Q5), IFERROR(VLOOKUP($Q5,$C$1:$M$24,2,0),""))