我有一个薪酬系统,随着ASE技术人员的工作时间增加,奖金系统会增加奖金的产生。我想有一个公式,可以输入一个数字进行数据输入,但是我将有5种不同的加薪幅度。我的电子表格设置如下。但是,我创建的公式不正确:
if(b9>=45,b9*o9,if(b9>=40,b9*n9,if(b9>=35,b9*m9,if(b9>=30,b9*l9,if(b9>=25,b9*k9)))))
目前还没有结果。
答案 0 :(得分:1)
在不使用嵌套IF函数的情况下如何实现此目标有多种选择。我要提出的解决方案是假设不存在负数小时。我根据查找表中工作时间并返回相应奖金的不同方式提出了6种不同的选择。
以奖金开始的小时数(左列)和奖金率在第二列中建立奖金表。在下面的示例中,将其放置在K13:L17中。 VLOOKUP采取以下形式:
VLOOKUP(Value to look for, table/range to look in, column to pull the result from, match type)
因此,根据您的公式,您要查找的值为B9。根据K13:L17中的表格,公式如下:
=VLOOKUP(B9,$K$13:$L$17,2,1)
使用大于45的值进行测试时,它将继续返回单元格L17中的值。如果您的小时数少于25,则会在表中找不到最小值,从而引发错误。有两种方法可以解决此问题。
对于此选项,我将使用IFERROR函数。如果没有错误,IFERROR将返回函数的结果,但是如果有错误,它将提供替代结果。由于少于25小时没有奖金,替代结果将为1,因此当小时数乘以1时就没有变化。公式变为:
=B9*IFERROR(VLOOKUP(B9,$K$13:$L$17,2,1),1)
此选项与选项1基本相同,除了查找表是水平的而不是垂直的。它以相同的顺序查找相同的信息。而不是要查看的列,而是要查看的行。
对于此选项,我选择使用另一种方式来处理少于25小时的小时数。请注意,水平表下面的示例在J8:O9中。需要注意的是,该表以0小时选项开头。这意味着在执行HLOOKUP时,所有小于25且大于或等于0的小时将导致返回单元格J9,该单元格的值为1。与IFERROR的工作相同。最大的不同是IFERROR可以处理负数小时(不应发生),而查找中的0则不能。此方法也可以用于VLOOKUP。
注意:任何一种方法都可以使用少于25小时的时间
类似于斯科特·霍尔茨曼(Scott Holtzman)所使用的方法,请开发一个公式,该公式将得出一个从1到6的整数,以覆盖所有可能的红利结果(6,因为没有红利是您原始问题中未涵盖的结果)。
您所有奖金的断点都是5的倍数。如果将所有断点除以5,您将得到以下顺序:
5, 6, 7, 8, 9
这是一个很好的起点,但是您要将序列降低到1-5范围。这是通过减去4实现的非常简单的转换。因此,我们有了公式的构造块。关键是我们需要将此值应用于B9中的值,该值可能不是被5整除的好数字。您只需要处理整数。考虑到这一点,公式将变为:
=INT(B9/5)-4
or
ROUNDOWN(B9/5,0)-4
我希望使用更少的字符(从这个答案的长度中不会知道),所以我坚持使用INT版本。现在,要处理B9中大于或等于50的时间,您希望将结果的上限限制为不超过5。这可以使用MIN函数来实现,并且您的公式变为:
=MIN(5,INT(B9/5)-4)
为了处理少于25小时的时间,我将使用MAX函数将方向限制为0,现在您的公式如下:
=MAX(0,MIN(5,INT(B9/5)-4))
所以现在您可以运行一个序列:
0, 1, 2, 3, 4, 5
我们现在为6个可能的奖励类别提供了一个连续整数。我们可以使用CHOOSE函数,该函数将返回从第1个开始的列表中的第n个选项。因此,我们需要通过添加一个来移动序列。根据嵌套IF函数的结果得出的选择公式为:
=B9*CHOOSE(MAX(0,MIN(5,INT(B9/5-4)))+1,1,$K$9,$L$9,$M$9,$N$9,$O$9)
注意:如果您无法以某种方式将范围分成连续整数,则此选项将不起作用。
INDEX函数很有趣,因为它实际上返回一个单元格地址,而不是直接返回一个单元格的值。顺便说一句,这意味着您可以通过执行类似INDEX(...):INDEX(...)
的操作来指定范围。 INDEX基本上根据一维范围(如列或行)的序列号在一个范围内查找单元格的位置。对于2D范围,INDEX将根据范围中的行和列位置查找单元格地址。对于2D范围,如果为列或行提供0,它将返回整个列/行。索引采用以下形式:
1D range
INDEX(Range to look in, Row/Col within the range)
2D range
INDEX(Range to look in, Row within the range, column within the range)
请注意,如果所选范围从1D范围的行1 /列A或2D范围的A1开始,则工作表的列/行号将匹配。
在此示例中,所选范围将为水平参考J9:O9。它很容易成为K13:K17中的垂直范围。这些都是一维范围,因此以相同的方式确定范围内的位置。使用选项3中的公式生成位置1至6。这将得出公式:
=B9*INDEX($J$9:$O$9,MAX(0,MIN(5,INT(B9/5)-4))+1)
注意:如果您无法以某种方式将范围分成连续整数,则此选项将不起作用。
与VLOOKUP / HLOOKUP相比,INDEX / MATCH是此站点上的首选方法,因为它在数据布局方面更加通用。选项4说明了INDEX的工作方式。这就剩下如何使用MATCH了。 MATCH将用于查找B9大约位于的行/列。与其他查找类似,它返回B9等于或大于B9的最后一行/列。 MATCH的形式为:
MATCH(value to look for, where to look, match type)
对于我们来说,我们将MATCH嵌入到INDEX函数中并获得:
=B9*INDEX($J$9:$O$9,MATCH(B9,$J$8:$O$8,1))
LOOKUP与VLOOKUP / HLOOKUP相似,除了搜索范围和结果范围不必相邻。使它更像INDEX / MATCH组合。我还注意到,尽管预期的输入类似于VLOOKUP / HLOOKUP,但实际上没有用于查找类型的选项。 LOOKUP采取以下形式:
LOOKUP(what to look for, range to look in, range to return result from)
基于此,再次使用水平表J8:O9,公式变为:
=B9*LOOKUP(B9,$J$8:$O$8,$J$9:$O$9)
注意:为了匹配和查找正常工作,查找范围需要按升序排列(从最小到最大)。如果您要进行反向匹配,则需要按降序对它们进行排序。
答案 1 :(得分:0)