提问人:LucJan 提问时间:4/7/2023 更新时间:4/7/2023 访问量:69
动态速率表:如何更改乘以单元格的下拉列表
Dynamic rate tables: How to change multiplied cell by drop down list
问:
我的目标是将一个平均值(由 2 个用户输入的值返回)乘以 2 个表中任一的唯一速率。
销售# | 销售 $ | 平均 Tkt | 率 | AX 费率 | MR 费率 |
---|---|---|---|---|---|
100 | 10,000美元 | 100美元 | ? | ? | ? |
我有 2 个下拉列表:第一个代表 2 个表格(表 1 和表 2),第二个代表表 1 和表 2(医疗保健、教育等)中的列。
表1 | 医疗 | 教育 |
---|---|---|
率 | 2.00% | 3.00% |
AX 费率 | 2.50% | 4.00% |
MR 费率 | 3.00% | 4.50% |
表2 | 医疗 | 教育 |
---|---|---|
率 | 2.50% | 3.50% |
AX 费率 | 3.00% | 4.50% |
MR 费率 | 3.50% | 5.00% |
我希望当用户从第一个下拉列表中选择“表 1”,从第二个下拉列表中选择“医疗保健”时,它将调用表 1 - 医疗保健单元格中的费率,将 Avg.tkt 乘以表 1 - 医疗保健列中的费率(即 2.00% x 100 美元)并将其返回到新单元格中。
我已经通过嵌套 IF 语句实现了这一点:
=IF(C4="Table1",IF(C5="Healthcare",D31*J7,IF(C5="Education",D31*K7,C5="Charity",D31*L7),IF(C4="Table2",IF(C5="Healthcare",D31*J7,IF(C5="Education",D31*K7,C5="Charity",D31*L7)))))
但是想知道是否有更有效的方法来产生这些结果? 我想减少嵌套 IF 语句的使用(或至少减少数量)。
答:
我建议将这 2 个表连接起来并稍微改变结构,这样您就可以避免语句(想象一下,如果您需要使用更多表)并使用如下所示的内容:IF
=SUM(($D$9:$E$9=D4)*($B$10:$B$15=C4)*($C$10:$C$15=E4)*($D$10:$E$15))
结果:
使用该“筛选”值进行进一步计算。
如果您不想或不能像另一个答案建议的那样将表连接在一起,则可以使用 IF 语句并将 INDEX 和 MATCH 公式嵌套在其中:
=IF($B$4="Table 1",INDEX($A$7:$C$10,MATCH(D$1,$A$7:$A$10,0),MATCH($B$5,$A$7:$C$7,0)),INDEX($A$12:$C$15,MATCH(D$1,$A$12:$A$15,0),MATCH($B$5,$A$12:$C$12,0)))
这将检查所选表是否为表 1。如果是,则它会在表 1 数据范围内查找该特定行业的费率指标。如果下拉列表不是表 1,则为表 2,因此它执行相同的查找,但针对表 2 的数据范围。
有多种方法可以解决问题。也可以使用带有函数的表名,但是可以避免使用,因为它是单线程的,因此会破坏多线程计算引擎。尽管如此,我还是会与其他方式分享解决方案,您可以尝试最适合您的查询的方法。Excel
INDIRECT()
INDIRECT()
Excel’s
方法一:-->使用INDIRECT()
& TOROW()
• 单元格中使用的公式 --> 它向右溢出!H4
=TOROW(INDIRECT(E1&"["&F1&"]"))
• 或者,单元格中使用的公式 --> 不带 --> 它需要正确填充!H9
#SPILL!
=INDEX(INDIRECT($E$1&"["&$F$1&"]"),COLUMN(A1))
方法二: --> 使用 with 和 orXLOOKUP()
INDEX()
CHOOSE()
IF()
• 单元格中使用的公式 --> 使用H14
IF()
=INDEX(XLOOKUP($F$1,TableOne[#Headers],
IF($E$1="TableOne",TableOne,TableTwo)),COLUMN(A1))
• 或者,单元格中使用的公式 --> 使用H19
CHOOSE()
=INDEX(XLOOKUP($F$1,TableOne[#Headers],
CHOOSE(N($E$1<>"TableOne")+1,TableOne,TableTwo)),COLUMN(A1))
注意:在上述所有公式中,我都引用了结构化表,即 TableOne 和 TableTwo 。请根据您的西装调整范围。
评论