【问题标题】:Calculations that have variable cells in ExcelExcel 中具有可变单元格的计算
【发布时间】:2016-06-14 09:12:03
【问题描述】:

我以为我对 Excel 的理解已经足够好了,直到我的老板让我在 Excel 中做一些涉及 MATCHINDEX 的事情,而我终其一生都无法弄清楚这些功能是如何工作的。也许更合适的是,我无法弄清楚它们在我正在查看的电子表格中是如何工作的。我会仔细地引导你完成我正在尝试做的事情。

我首先创建一个没有问题的下拉列表。下拉列表是本质上是概率表的列表。为了跳过一些不相关的数学运算,每个表都会有一个由表中所有数字生成的数字,该数字将用于电子表格其他部分的某些计算中。这些表格中的每一个还将具有与下拉列表中的条目匹配的名称(顶部单元格)。

[如果有人知道如何格式化这个问题以便更容易理解我的问题,请随时告诉我如何。我不知道如何为 excel 设置 stackexchange 问题的格式。]

所以最终,我有两个正在执行计算的主要表格。计算本身无关紧要。相关的是,我需要能够将一个值添加到计算中,该值可以根据从下拉列表中选择的内容而改变。所以让我试着举个例子。

假设我有这张桌子:

|   Month  | Balance | Interest Rate |
|:--------:|:-------:|:-------------:|
|  January |  100.00 |       1%      |
| February |  101.00 |       1%      |
|   March  |  102.01 |       1%      |
|   April  |  103.03 |       1%      |
|    May   |  104.06 |       1%      |
|   June   |  105.10 |       1%      |

我希望利率取决于下拉列表,这样也许我已经设置了从单元格表生成下拉列表的位置,如下所示:

| Interest Rate |
|:-------------:|
|      Low      |
|     Medium    |
|      High     |

我有三个标有“低”、“中”和“高”的表。这些表格中的每一个都将执行一些计算以获得最终的利率结果,该结果将是显示在顶部表格中的数字。因此,如果我选择“高”,我的表格将变成这样。

|   Month  | Balance | Interest Rate |
|:--------:|:-------:|:-------------:|
|  January |  100.00 |       5%      |
| February |  105.00 |       5%      |
|   March  |  110.25 |       5%      |
|   April  |  115.76 |       5%      |
|    May   |  121.55 |       5%      |
|   June   |  127.63 |       5%      |

我很确定我需要索引和匹配函数来执行此操作。我什至会输入一个与我正在做的事情接近的公式,但我似乎无法破译一切是如何运作的。

=INDEX($U$13:$BM$416,MATCH(D12,$T$13:$T$416,0),MATCH($A$13,$U$11:$BM$11,0) + 1) * SUM(P:P)

我知道,当您看不到工作表时,这并没有多大意义,但该公式的作用与我需要做的非常接近。我想我最终的问题是是否有人会帮助我了解如何在 Excel 中完成此任务?

编辑:这里有一个更好的一瞥

假设我有这 3 个表格,它们显示了各种不同事物(例如汽车贷款、抵押贷款、信用卡)的利率。 “######”只是显示这些单元格中有用于计算底部数字的值(0.01、0.03 等)。还可以说这 3 个数据表在 excel 中的范围是 A1:I6

|              |   DataTable 1   |               |              |   DataTable 2   |               |              |   DataTable 3   |               |
|:------------:|:---------------:|:-------------:|:------------:|:---------------:|:-------------:|:------------:|:---------------:|:-------------:|
| Low,Interest | Medium,Interest | High,Interest | Low,Interest | Medium,Interest | High,Interest | Low,Interest | Medium,Interest | High,Interest |
|--------------|-----------------|---------------|--------------|-----------------|---------------|:-------------|-----------------|---------------|
|    #######   |     #######     |    #######    |    #######   |     #######     |    #######    |    #######   |     #######     |    #######    |
|    #######   |     #######     |    #######    |    #######   |     #######     |    #######    |    #######   |     #######     |    #######    |
|     0.01     |       0.03      |      0.05     |     0.02     |       0.04      |      0.06     |     0.10     |       0.20      |      0.30     |

我在 A8 中有一个下拉列表,其中包含数据表 1、数据表 2 和数据表 3 的值。

假设我有另一个表(范围是 K1:M14),看起来像这个问题中的第一个表。

|   Month   | Balance | Medium Interest |
|:---------:|:-------:|:---------------:|
|  January  | $100.00 |        3%       |
|  February | $103.00 |        3%       |
|   March   | $106.09 |        3%       |
|   April   | $109.27 |        3%       |
|    May    | $112.55 |        3%       |
|    June   | $115.93 |        3%       |
|    July   | $119.41 |        3%       |
|   August  | $122.99 |        3%       |
| September | $126.68 |        3%       |
|  October  | $130.48 |        3%       |
|  November | $134.39 |        3%       |
|  December | $138.42 |        3%       |

我编写了一个公式,可以确定 3% 如何进入“中等兴趣”列。

=INDEX($A$6:$I$6,MATCH($A$8,$A$1:$I$1,0),MATCH($M$2,$A$2:$I$2,0))

当我在下拉列表中选择数据表 1 时它可以工作。它正确放置了 3%,这是数据表 1 的中等利率,但是当我选择其他 2 个数据表中的任何一个时,我得到一个无效的单元格引用错误。这基本上就是我在真实电子表格中需要做的事情。

【问题讨论】:

  • 工作表/工作簿的利率部分是什么样的?了解必须查找的内容以及必须如何使用它对于找出如何提供帮助非常有帮助。现在我看不到利率(低、中、高)如何应用于提供的表格示例,我也不确定这些值如何转化为计算的利率,因为我看不到什么“低"会抬头看。具体范围不如了解数据的布局方式来帮助您了解需要如何使用它。
  • 见我上面的编辑。这应该更彻底地解释这个问题。

标签: excel excel-formula excel-2010


【解决方案1】:

不确定我能说出你想要的方法,但我至少可以解释 MATCHINDEX 以及你的公式对它们的作用 - 希望这就足够了!

MATCH(what,in_where,match_type) 将根据match_type 在数组/范围in_where 中返回what 的索引。 “最佳”match_type0 - 就像在您的示例中一样 - 这意味着“完全匹配”。其他选项是“小于”的1 和“大于”的-1 - 两者都要求您对in_where 进行排序...

因此,您的第一个示例 MATCH(D12,$T$13:$T$416,0) 正在寻找 D12$T$13:$T$416 范围内的确切值。

INDEX(in_where,row,column) 将返回数组/范围 in_where 在行 row 和列 column 中的值。

在您的示例中,您正在查看$U$13:$BM$416 范围内的MATCHes 给出的行/列...第一个MATCH 大致在T 列中寻找D12 和第二个是在11 的大致行中寻找A13。 (即,看起来您的“表”在第 11 行有标题,在 T 列有“键”,您正在搜索它们位置的交集。)该列中的 +1 将正确对齐返回的索引MATCHINDEX 的列号...

如果没有看到这个(例如,Dropbox 之类的文件或屏幕抓图),很难说更多 - 但我希望这会有所帮助!

顺便说一句 - INDEXMATCH 作为组合也可以很好地替代 VLOOKUP 如果您的“键”列位于您想要的“值”列的右侧(或者如果您有宽表及其中的任何更改都会强制重新计算)

更新基于问题的第二部分
新示例给出了公式:=INDEX($A$6:$I$6,MATCH($A$8,$A$1:$I$1,0),MATCH($M$2,$A$2:$I$2,0))
INDEX 将返回给定行/列的值。在此示例中,您的“表格”是单行 $A$6:$I$6,因此您需要在此处仅提供行 1 - 您不是查看网格,而是查看列表。

因此,您希望在右侧数据表(从下拉列表中选择)中找到兴趣级别(表顶部的低/中/高)的兴趣值。有几种方法可以做到这一点,具体取决于您拥有的控件...

  1. 创建一个真实的数据网格,侧边为低/中/高,顶部为 1/2/3,内部为 % - 然后按原计划使用 INDEX...MATCH 对行的选择/列
  2. 如果这有点多,如何为您的表创建一个新的“复合键”...例如第 2 行可能包含 1_Low、1_Medium、1_High、2_Low 等。然后您只使用一次搜索,但使用连接键:=INDEX($A$6:$I$6,1,MATCH($A$8 & "_" & $M$1,$A$2:$I$2,0))

否则,您首先需要在第一个标题行中找到“DataTable 1”,并使用它来限制搜索利率水平标题的范围......这有点复杂,并且更多地取决于您的表格的详细信息(例如,它们的列数是否相同 - 低/中/高 - 或者是否有一些非常高)

【讨论】:

  • 我将添加一个大的编辑来扩展问题,因为我理解索引和匹配更好。
  • 看来我的公式的问题在于,一旦超过第一个数据表,它就不知道如何在低 - 高列之间进行选择。对于真正的电子表格也是如此。知道如何解决这个问题吗?假设我无法更改任何表格。
【解决方案2】:

Medium Interest 列中 3% 的公式应为:

=INDEX(A6:I6,,MATCH(A8,A1:I1,0)+1)

此公式返回索引数组 A6:I6 中的值。由于数组 A6:I6 中只有一行数据,因此无需为索引函数指定行位置。这就是为什么有两个逗号在一起的原因 - 行引用丢失并且没有必要。 MATCH 根据您的下拉列表为函数提供列号参考,这些值将是值 1、4 或 7,然后 +1 以移动一列。确保在单元格 A1 中有“DataTable 1”,在单元格 D1 中有“DataTable 2”,单元格 G1 有“DataTable 3”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多