【问题标题】:Excel | Index Match |电子表格 |索引匹配 |
【发布时间】:2018-11-19 18:02:22
【问题描述】:

在以下方面我需要您的帮助:

假设我们有 3 个不同的组:(A,B,C)

我们在每个组中都有几个值范围:

(Eg. A has 0 - 100, 101 - 200 while B has 0 - 200, 201 - 400 and C has 0 - 300, 301 - 600.)

最后,对于处于任何范围内的每个组,他们将被分配一个最终编号。 (例如。

[A,95] = 0.5 / [A,101] = 1.0
[B,95] = 1.5 / [B,205] = 3.0
[C,95] = 4.5 / [C,308] = 6.0)

目前我的索引匹配公式如下:

"=INDEX(finalnumber!F2:F29,MATCH(C11&C25,Group!A2:A29&valuerange!D2:D29,0))"

我不断收到#N/A 回复。

我还创建了一个数组表,如下:

enter image description here

Group    Range    Final Number
A        0 - 100      0.50
A        101 - 200    1.00
B        0 - 200      1.50
B        201 - 400    3.00
C        0 - 300      4.50
C        301 - 600    6.00

请帮忙!非常感谢!

【问题讨论】:

  • 希望这张表能澄清一下!
  • 您的实际数据是什么样的?您的查找范围应该是一张纸,但您有两个引用,这可能是问题的一部分(Group!A2:A29&valuerange!D2:D29)
  • @QHarr,是的,我也试过了。仍然给我一个#N/A 回复。试图让索引/匹配来读取一系列值,例如。 0 - 100 所以公式可能会这样写:如果输入是组“A”并且值是“105”,最终数字将给出“1.00”的输出提前谢谢!

标签: excel vba indexing match


【解决方案1】:

您可以使用以下内容(您需要根据自己的布局进行调整)。例如,我假设 A95 位于单独的单元格中,因为您连接公式中的单元格以进行查找。

=IF(AND(ISERROR(INDEX(OFFSET(INDEX(C:C,H2),,,I2-H2+1,1),MATCH(VLOOKUP(G2,LEFT(OFFSET(INDEX(B:B,H2),,,I2-H2+1,1),FIND("-",OFFSET(INDEX(B:B,H2),,,I2-H2+1,1))-1)*1,TRUE),LEFT(OFFSET(INDEX(B:B,H2),,,I2-H2+1,1),FIND("-",OFFSET(INDEX(B:B,H2),,,I2-H2+1,1))-1)*1,0))),INDEX(A:A,COUNTA(A:A)+1)=F2,G2>=1*LEFT(INDEX(B:B,COUNTA(A:A)+1),FIND("-",INDEX(B:B,COUNTA(A:A)+1))-1),G2<=1*RIGHT(INDEX(B:B,COUNTA(A:A)+1),LEN(INDEX(B:B,COUNTA(A:A)+1)) - FIND("-",INDEX(B:B,COUNTA(A:A)+1)))),INDEX(C:C,COUNTA(A:A)+1),INDEX(OFFSET(INDEX(C:C,H2),,,I2-H2+1,1),MATCH(VLOOKUP(G2,LEFT(OFFSET(INDEX(B:B,H2),,,I2-H2+1,1),FIND("-",OFFSET(INDEX(B:B,H2),,,I2-H2+1,1))-1)*1,TRUE),LEFT(OFFSET(INDEX(B:B,H2),,,I2-H2+1,1),FIND("-",OFFSET(INDEX(B:B,H2),,,I2-H2+1,1))-1)*1,0)))

这是作为数组公式输入的 Ctrl+ Shift+ Enter

辅助单元格中的公式(使整体公式更清晰):

H2 is =MATCH(F2,A:A,0) ' 找到字母的第一个匹配项,例如A

I2 is =MAX(IF(A:A=F2,ROW(A:A)-ROW(INDEX(A:A,1,1))+1)) ' 查找字母的最后一个匹配项,例如A。这是用 Ctrl+ Shift+ Enter 输入的,即一个数组公式。


数据布局

示例运行:


注意事项:

您可能希望将整个内容包装在 IFERROR( formula, "") 中以隐藏任何未找到的错误消息。

【讨论】:

  • 哇,我不知道你做了什么,但非常感谢你!
【解决方案2】:

我不清楚为什么您需要为此操作使用四个单独的工作表。为简化演示,我将您的查找表与要查找的值放在同一个工作表中。

=SUMPRODUCT(I$2:I$7, (G$2:G$7=LEFT(A2))*(--REPLACE(H$2:H$7, FIND(" - ", H$2:H$7), 9, TEXT(,))<=--MID(A2, 3, 9))*
                                        (--REPLACE(H$2:H$7, 1, FIND(" - ", H$2:H$7)+1, TEXT(,))>=--MID(A2, 3, 9)))

【讨论】:

  • 很好,我不会想到使用这样的替换。还观察到您可以使用 sumproduct 因为只有一行可以满足所有条件。很想知道为什么你使用 text(,) 而不是 "" ?
  • 在 vba 中编写工作表公式是一种习惯,并且不喜欢在带引号的字符串中使用 """"
猜你喜欢
  • 2013-12-20
  • 2015-10-30
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2021-10-21
  • 2016-03-12
  • 2020-08-16
  • 2019-10-06
相关资源
最近更新 更多