我如何创建vlookup或VBA代码,以使Vlookup函数并不总是采用第一个值,但是在采用第一个值之后也要采用第二个值等。 我认为通过屏幕截图
可以更清楚地看到一些进一步的解释: A列是一个标识符(在实际样本中,公司的客户(标识号)) B列代表交易编号。 但是,并非每笔交易都可以使用cusips(解释为空白),并且一家公司可以进行多笔交易(-> A列中的值并不互斥)
由于A列中的值不是互斥的,所以我必须将B列中互斥的值“映射”到D列中的出现
答案 0 :(得分:4)
使用它,但是它需要在数据列上显示标题行:
=IF(D1=D2,E1,INDEX(B:B,AGGREGATE(15,7,ROW($B$1:$B$6)/($A$1:$A$6=D2),COUNTIFS($D$1:D1,D2,$D$2:D2,"<>"&D2)+1)))
D1中的值无关紧要,但是公式必须放在第二行,因为它使用第一行作为更改检查。
由于这是一个数组类型公式,因此引用应将自身限制为数据集,而不应使用完整的列引用,但是我们可以使用INDEx(MATCH())自动做到这一点:
=IF(D1=D2,E1,INDEX(B:B,AGGREGATE(15,7,ROW($B$1:INDEX(B:B,MATCH("zzz",A:A)))/($A$1:INDEX(A:A,MATCH("zzz",A:A))=D2),COUNTIFS($D$1:D1,D2,$D$2:D2,"<>"&D2)+1)))
答案 1 :(得分:0)
如果我了解您的A和B列的填充方式(通过查看C和D中的出现情况),为什么不只使用C&D数据呢?
您可以找到这样的任务数(我在D2中有此任务):
=IFERROR(IF(C2=C1,D1,D1+1),1)
这将在不使用Vlookup或索引/匹配的情况下给出事件,在任务更改的位置添加1(iferror用于给出第一个“ 1”,因为您不能添加“出现” +1)。 / p>
答案 2 :(得分:0)
您现在可能已经有了答案。这是一个不错的(附加)解决方案。
=IFERROR(INDEX($B$3:$B$13, SMALL(IF(D$2=$A$3:$A$13, ROW($B$3:$B$13)-2,""), ROW()-2)),"")
或
=IFERROR(INDEX($B$3:$B$13,SMALL(IF(D$2=$A$3:$A$13,ROW($A$3:$A$13)- MIN(ROW($A$3:$A$13))+1,""), ROW()-2)),"")
查看此链接: https://www.ablebits.com/office-addins-blog/2017/02/22/vlookup-multiple-values-excel/
要获取VBA代码,请输入该函数并使它工作,然后打开Macro Recorder,单击主单元格(第一个单元格),单击F2,单击Enter提交更改,然后双击黑叉填满。现在,您应该拥有所有的VBA,当然,您可以修改代码以执行所需的任何操作。