【问题标题】:Perform Calculation based on multi-criteria matching and lookup value基于多准则匹配和查找值执行计算
【发布时间】:2017-10-25 08:47:54
【问题描述】:

我正在尝试计算每日膳食报销率的金额,如果某一天的所有膳食都是个人膳食(即个人没有购买其他人的膳食)。在所附示例中,所有作为个人膳食的膳食将在“团体费用”栏中包含空白或“否”。如果他们为早餐或午餐或晚餐选择“是”,则不会执行任何计算。

例如,示例中的膳食总支出为 83.79 美元。每日限额为 70 美元。如果这些膳食都是个人的(即在“团体费用”列中提供空白/未提供响应),则将在突出显示的单元格 (K6) 中返回 13.79 美元。如果他们为早餐或午餐或晚餐(或其任意组合)选择“是”,则突出显示的单元格 (K6) 中将显示 $0(或空白)。

到目前为止,我一直在尝试使用多个条件将 IF 语句与 OR 语句与 Index/Match 结合起来。

我尝试匹配“输入区域”和“汇总区域”之间的费用总额(汇总区域已使用索引/匹配从输入区域填充),然后匹配输入区域和汇总区域之间的日期,然后匹配输入区域和汇总区域之间的膳食类型,然后在输入区域中查找任何“是”响应。如果存在任何“是”响应(因此我尝试合并 OR 声明),请不要显示超过每日 70 美元费率的任何金额;否则计算超出部分。

我尝试过的一些公式示例见附件。

我将不胜感激一些专家的建议!

谢谢,

一个

【问题讨论】:

  • 以下将为我提供正确答案:{=IF(OR(S6:S8={"Yes"}),0,SUM(K3:K5)-R11)}。如果早餐、午餐或晚餐选择“是”(显然我专门选择了我需要测试它的单元格),则返回零,否则它执行我想要的计算。但是,我仍然在将它与 INDEX/MATCH 合并时遇到问题,因此它是一个动态公式,它根据特定的“日期”和“费用明细”类型进行计算。有什么想法吗?

标签: if-statement indexing match


【解决方案1】:

终于解决了。

基本上我替换了上面测试公式的“S6:S8”部分 [{=IF(OR(S6:S8={"Yes"}),0,SUM(K3:K5)-R11) }] 带有索引/匹配参数。

S6:S8={"Yes"} 在 OR 语句中变为 INDEX(InputTable[Group Expense],MATCH($D$3&$H$3,InputTable[Date]&InputTable[Expense Detail],0) )="是"。对每种膳食标准类型重复此操作(尝试使用 D3&H3:H5,但它只会识别 H3 中的结果)。

以下对我有用:

{=IF(OR(INDEX(InputTable[Group Expense],MATCH($D$3&$H$3,InputTable[Date]&InputTable[Expense Detail],0))="Yes",INDEX(InputTable[Group Expense],MATCH($D$3&$H$4,InputTable[Date]&InputTable[Expense Detail],0))="Yes",INDEX(InputTable[Group Expense],MATCH($D$3&$H$5,InputTable [日期]&InputTable[费用明细],0))="是"),0,SUM($K$3:$K$5)-$R$11)}

现在,如果在输入表上为早餐、午餐或晚餐选择“是”,则返回零,否则将执行我所追求的“超额”计算。

【讨论】:

  • 在我的逻辑中发现了一个错误。例如,如果没有早餐,则索引/匹配将返回错误。考虑到输入选项卡上的潜在空白,我必须在每个索引/匹配错误处返回零,然后调整“如果为假的值”公式以消除它计算负数(即索引匹配发现没有“是,” No" 或 "" 响应,因此它移至“value if false”计算,从 $0 中减去 $70)。这个公式有效:
  • {=IF(OR(IFERROR(INDEX(InputTable[Group Expense],MATCH($D$3&$H$3,InputTable[Date]&InputTable[Expense Detail],0)) ="Yes",0),IFERROR(INDEX(InputTable[Group Expense],MATCH($D$3&$H$4,InputTable[Date]&InputTable[Expense Detail],0))="Yes",0),IFERROR (INDEX(InputTable[Group Expense],MATCH($D$3&$H$5,InputTable[Date]&InputTable[Expense Detail],0))="Yes",0)),0,IF((SUM($K $3:$K$5)-$R$11)
  • 对不起“多个”答案。但是我在上面的修改后的解决方案中发现了第二个错误。最后的 IF 语句没有适当地处理膳食类型的空白选择和非空白选择,以及处理“团体费用”与“非团体费用”(即,如果他们有团体费用,他们可能会超过 70 美元的上限,否则他们的上限为 70 美元)。下面的公式现在应该可以适当地处理所有情况(我已经测试了我能想到的所有情况):
  • {=IF(OR(IFERROR(INDEX(TravelLogInput[团费],MATCH('测试工作表'!$D$53&'测试工作表'!$H$53,TravelLogInput[日期]&TravelLogInput[ Expense Detail],0))="Yes",0), IFERROR(INDEX(TravelLogInput[Group Expense],MATCH('Test Worksheet'!$D$53&'Test Worksheet'!$H$54,TravelLogInput[Date]&TravelLogInput [费用明细],0))="是",0), IFERROR(INDEX(TravelLogInput[团费],MATCH('测试工作表'!$D$53&'测试工作表'!$H$55,TravelLogInput[日期] &TravelLogInput[Expense Detail],0))="Yes",0)), 0,MAX(0,SUM('Test Worksheet'!$K$53:$K$55)-'Annual Data Inputs'!$E$5) )}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多