[![在此处输入图片描述][2]][2]
目的:
使用已知的“长度”值来找到正确的列标题,然后在列中搜索值,然后返回该数据表右侧的索引。
背景:
- 表体中的某些值在不同的列中重复
- 表体中的值代表区间的下限
- C4 至 F4 中的列标题表示区间的下限
- B5 至 B8 中的行标题分别代表一个唯一索引
桌子:
A B C D E F G H I J K
3 Length Header
4 **4.1 5 5.3 6** Length: 5.4 5.3 =HLOOKUP($J$4;C4:F4;1)
5 **7** 18 20 21 23 Strength 28
9 **20** 22 23 25 Index 11 =INDEX(B5:B8;MATCH(J5;E5:E8;4))
7 **11** 24 25 27 28
8 **16** 27 28 30 31
已实现:
- J4 和 J5 中的信息始终是给定的(即已知的)
- HLOOPKUP(J4)用于识别正确的列标题——正确的结果出现在K4,即E列
- 然后,J6 中的 (INDEX/MATCH) 公式正确搜索 E 列标题下的值(E5:E8 - 我必须输入) -
并正确识别出“28”(J5)落在“27,”间隔(E7)内 - 然后正确地将相应的行标题标识为“11”(B7)
需要协助:
- 目前我必须首先运行 HLOOKUP 公式来确定列标题
- 接下来,我必须根据 K4 的结果,手动将列值(不包括列标题)输入到 J6 中的公式中,以运行 INDEX/MATCH 函数
- 因此,我需要帮助以便根据 HLOOKUP 结果自动将列值(不包括列标题)插入到 INDEX/MATCH 公式中。
如果可能的话,我更愿意使用函数而不是 VBA
[错误截图][1]截图显示了一些计算如何给出#N/A 结果。
问候。Rudi
答案1
使用OFFSET
从最左上角的单元格移动范围以获取正确的范围。
=INDEX($B$5:$B$8, MATCH($J$5, OFFSET($C$5, 0, MATCH($J$4, $C$4:$F$4, 1)-1, ROWS($B$5:$B$8), 1), 1))
解释
这就像你的INDEX MATCH
公式一样,但是我E5:E8
在你的例子中将其更改为相对范围,定义为OFFSET( ... )
OFFSET($C$5, //Reference point
0, //Rows shifted below, in this case it doesn't shift the row
MATCH($J$4, $C$4:$F$4, 1)-1, //Column shifted to the right, in this case it shifts from `1-4` minus 1.
ROWS($B$5:$B$8), //Height, in this case you want as many rows as the table has, taken from the left "header"
1) //Width, in this case you only want one column
$C$5
是用作参考点的值的最左上角的单元格。
MATCH($J$4, $C$4:$F$4, 1)-1
是获取列标题的索引。这与您的HLOOKUP
公式类似,但它返回的是列号(例如,第 3 列返回 2)
ROWS($B$5:$B$8)
是从左侧“标题”有多少行中获取表格有多少行