我想找到一种基于类别和另一个特征获取特定值的好方法。我将尝试在下面举例说明;
问题:
1)我想检查某个实体属于哪个类别。
2) 根据 1) 中的答案和另一个因素(我们称之为经验点),我希望能够获得两者之间的截距值。
数据:
实体................................XP.............A...........................B......................XP.............A.............B
甘道夫................................80..........吉姆利....................佛罗多...............0-50..........2.5.........3.1
佛罗多..............................21........甘道夫.....安格玛巫王.....51-100......3.3.........4.2
吉姆利................................39............................................... 101-150.....4.6..........7.4
安格玛巫王..140
也就是说,我真正想知道的是,甘道夫的值为 3.3,而安格玛国王的值为 7.4,而无需阅读该死的表格。我非常希望有一种聪明而精简的方式来做到这一点。我尝试过匹配、索引、Vlookuping 和构建简单的宏,但没有找到让你以特殊方式感到胃口大开的解决方案。请帮帮我!
答案1
您已经给出了答案。vlookup 和 index 是正确的函数。
我的建议是不要尝试将所有内容都放在一个公式/单元格中,而是将公式分开。在输入实体名称的字段旁边,VLOOKUP
对 XP 执行一个。接下来,使用MATCH
查找类别。最后,使用INDEX
根据其他两列查找值。您可以使用ROUND
将 XP 四舍五入到正确的值(ROUND(XP/50)
在您的示例中)。
希望这能让你胃口大开 ;-)
答案2
如果我理解正确的话,你想
索引第 1 列,匹配第 2 列和第 5 列,然后返回任何一个值第 6 列或第 7 列,取决于实体位于第 3 列还是第 4 列
看起来您想使用 Index(Match) 来完成大部分工作,正如 agtoever 所建议的那样。此外,他的观点非常正确,您将很难将特定实体 xp 与乐队 xp oin 匹配,这相当于第二个表格(在右侧)。
首先要做的是按照规定对 XP 进行四舍五入,并将最右边 XP 列中的值更改为单个值以匹配。
接下来你需要做的是让 excel 知道实体是在 a 列还是 b 列。看起来你的整个布局目前是一个表。我建议你把它分成三张。
表格1
实体 | 特定实体 XP | 实体 XP 带 | A 或 B | 最终回报
表 2
一 | 二
表3
XP 频段 | A 列 | B 列
这意味着如果你将 a 或 b 映射到表 1 中的每个实体,那么你可以检查表 2,以从 A 或 B 返回正确的值
步骤 1:XP
1.1:将 XP 范围更改为单个值(可能是最大值),如下所示
50 100 150
1.2:按照上面的方法ROUND计算实体位于哪个带。
第 2 步:A 或 B
在第四列写一个索引实体名称的公式,然后检查它是否在表2的a列中。如果是,返回“A”,如果不是,则返回“B”
就像是
=IF([entitity in this row] = [range A], "A", "B")
步骤 3:返回值
在第五列中写一个公式来检查第四列,然后检查第三个表的最终数字,这可以使用嵌套的 IF 语句、AND 或
就像是
=IF([entitiy XP band] = [XP band], IF([entity A or B] = "A",[return A in table 3]),[Return B in table 3])
我希望这个伪代码解释有用。如果你需要更多说明,我今晚回家后会写一个具体的例子。
答案3
由于某种原因,这个问题没有被添加为我自己的问题,所以很遗憾我错过了这些答案。无论如何,非常感谢,你正确地理解了这个问题并找到了一个很好的解决方案。
实际数据相当大,XP 波段被划分为更多类别,表 2 由 AG 而不是 AB 组成,并且实际上有 3 个不同的“表 3”,具体取决于另一个类别(与表 2 使用 XYZ 构建的类似)。由于所有这些,我选择了一个类似但略有不同的解决方案,我认为我可以出于任何学术目的分享它。
第一步:获取 XP 频段匹配,解决方法如下:
=IF(AND(0<=[XP in this row], [XP in this row]<51), "0-50", IF(AND(50<[XP in this row], [XP in this row]<101), "51-100", "101-150"))
步骤2_获取第1类,AG:
=IF(ISERROR(MATCH([entity in this row],[range A],0)),IF(ISERROR(MATCH([entity in this row],[range B],0)), "C", "B"), "A")
步骤 3:查找要使用的表(类别 2)XZ:
按照与步骤2相同的方法解决。
步骤 4:为每个实体和所有类型 XZ 寻找解决方案
=INDEX([table X], IF([XP]=[XP band1], 2, IF([XP]=[XP band2], 3, 4)), IF([category1 for entity]="A",2,IF(([category1 for entity]="B", 3, 4)))
步骤 5:最后一步,我选择使用 X、Y 和 Z 的值:
=IF([category 2]="X", [table X], IF([category 2]="Y", [table Y], [table Z]))
这可能不是最完美的解决方案,但它确实起了作用并且为我节省了很多工作。
再次感谢您提出的解决方案,您很可能已经以更精简的方式解决了该问题。