在Excel中具有可变单元格的计算

时间:2015-04-20 20:39:05

标签: excel excel-formula excel-2010

我认为我已经很好地理解了Excel,直到我的老板让我在excel中做了一些涉及MATCHINDEX的事情,并且在我的生活中我无法弄清楚这些功能是如何工作的。也许更恰当的是,我无法弄清楚他们是如何在我正在看的电子表格中工作的。我会仔细地告诉你我正在做的事情。

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

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

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

假设我有这张表:

|   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个数据表中的任何一个时,我得到无效的单元格引用错误。这基本上就是我在真实电子表格中需要做的事情。

2 个答案:

答案 0 :(得分:2)

我不确定如何做你想做的事,但我至少可以解释一下MATCHINDEX以及你的公式对他们做了什么 - 希望这就够了!

MATCH(what,in_where,match_type)将根据what返回数组/范围in_where中的match_type索引。最好的" 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 es给出的行/列查看范围MATCH ...第一个MATCH正在寻找D12大致在T列中,第二列大致在行A13中查找11。 (即看起来像你的"表"在第11行有"键"在第T列,你正在搜索它们的位置的交集。)+1 in该列将正确对齐MATCH返回的索引和INDEX的列号...

没有看到这个(例如文件在某个地方,如dropbox或screengrab),很难说更多 - 但我希望这会有所帮助!

顺便说一下 - INDEX& MATCH作为一个组合也可以很好地替代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 - 你不是在网格中查找,而只是列表。

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

  1. 创建一个真实的数据网格,其中低/中/高位于侧面,1/3/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))
  3. 否则,您首先需要找到" DataTable 1"在第一个标题行中使用它来限制范围以搜索利率级别标题...它有点复杂,更多地取决于表格的详细信息(例如,它们的列数相同 - 低/中/高 - 或者有些非常高)

答案 1 :(得分:0)

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”。