我正在评估我的投资组合,并以如下形式记录下来:
我希望从其中任何一个中获得这些股票的利润百分比;
对于 1),我正在考虑通过使用带有 Col B 的“Stock A”和 Col C 的“SELL”的 VLOOKUP 条件来获得股票 A 的最后价格(Col E)(然后显然再次使用带有“SELL”的 VLOOKUP条件更改为“买入”)。
有没有办法在两个条件下查找值?任何其他建议(例如使用一点 VBA)将不胜感激。
最佳答案
一个 VLOOKUP
实际上是 INDEX MATCH
的特殊形式(或 XLOOKUP
,从 Office365 开始)。换句话说,VLOOKUP("Value", A:C, 3, FALSE)
与 INDEX(C:C, MATCH("Value", A:A, 0))
相同, 和 VLOOKUP("Value", A:C, 3, TRUE)
与 INDEX(C:C, MATCH("Value", A:A, 1))
相同
然后,创建一个 VLOOKUP
等价于检查多列,我们需要创建一个 MATCH
功能做同样的事情。幸运的是,这可能是使用数组计算。
本质上,我们替换了 MATCH
的第二个参数。 (要查找的值列表)使用根据我们的条件创建数组的公式,然后我们在列表中搜索条件为真的位置。例如,如果我们的条件是 Column B = "Stock A"
和 Column C = "BUY"
,那么我们的数组计算是(B:B="Stock A")*(C:C="Buy")
,以及我们的MATCH
看起来像这样:
MATCH(1, (B:B="Stock A")*(C:C="BUY"), 0)
(在 bool 或按位级别,
*
与 AND
相同:TRUE*TRUE=TRUE
,FALSE*FALSE=FALSE
,TRUE*FALSE=FALSE
)通常最好限制行数,而不是使用整列(速度很慢)。您可以手动执行此操作:
=INDEX($E$1:$E$5, MATCH(1, ($B$1:$B$5="Stock A")*($C$1:$C$5="BUY"), 0))
或者您可以使用
INDEX
动态执行此操作和 COUNTA
:=INDEX($E$1:INDEX($E:$E, COUNTA($A:$A)), MATCH(1, ($B$1:INDEX($B:$B, COUNTA($A:$A)), ="Stock A")*($C$1:INDEX($C:$C, COUNTA($A:$A)), ="BUY"), 0))
最后说明:
MATCH
函数将从列表的顶部开始,并向下工作直到第一个匹配。如果这些是日期顺序,并且您想找到最后一个匹配项,那么 Office356 用户有 the XMATCH
function可用,它有一个额外的参数,用于决定搜索是先到后 ( XMATCH(.., .., .., 1)
)、后到先 ( XMATCH(.., .., .., -1)
)、升序二叉搜索 ( XMATCH(.., .., .., 2)
) 还是降序二叉搜索 ( XMATCH(.., .., .., -2)
)否则,您可能必须使用
SUMPRODUCT
获取 MAX
符合您条件的日期,并将其包含在您的 MATCH
中条件(SUMPRODUCT(MAX(A:A*(B:B="Stock A")*(C:C="BUY"))
)
关于excel - 如何在 excel 中使用 2 个条件进行 Vlookup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62298030/