改进电子表格公式以使其更具动态性
Improving a Spreadsheet Formula to be more dynamic
我有几个 sheet,我想过滤它们的值并将它们相加。我有一个工作函数:
=SUM(INDEX(Grades!M32:V32,0,B2)+INDEX(Grades!M32:V32,0,C2)+INDEX(Grades!M32:V32,0,D2)+INDEX(Grades!M32:V32,0,E2)+INDEX(Grades!M32:V32,0,F2)+INDEX(Grades!M32:V32,0,G2))
这工作正常。问题是它不是真正动态的,我想知道是否有更有效的方法来解决这个问题而不是使用这么多索引。
Index 正在从另一个 sheet 中获取水平范围的数字,并从另一个 sheet 中的小 table 获取所需的索引位置。
更新
通过插入一个 IF
语句,如果其中一个单元格为空,该语句不会执行 VLOOKUP
,我能够让公式按我想要的方式工作。
=ArrayFormula(SUM(IF(B2:I2 <> "",VLOOKUP(1,{1,Grades!$M:$V},B2:I2+1))))
看起来有点奇怪,但这是一种方式:
=ArrayFormula(SUM(VLOOKUP(1,{1,Grades!M32:V32},B2:G2+1,0)))
在VLOOKUP
中,1
是你要搜索的值,{1,Grades!M32:V32}
是你要搜索的数组,B2:G2+1
是列索引(或者更确切地说,索引)您希望 return,而 0
指示您需要完全匹配。
{1,Grades!M32:V32}
构造一个水平单行数组,最左侧的元素为 1
,右侧的值为 Grades!M32:V32
。
VLOOKUP
将向下搜索该数组最左边的列。它总是 "find" 它在最左边的列中搜索的 1
,因为我们故意制造了那个。
真正发生动作的地方是在第三个参数中,我们 return 制造数组中的列与 B2:G2
中的值相对应(我应该补充一点,我假设所有单元格在B2:G2
被填充 - 如果有任何空白,它将 return 错误的结果)。 +1
是为了说明我们添加到查找数组左侧的额外元素(1
)。
我有几个 sheet,我想过滤它们的值并将它们相加。我有一个工作函数:
=SUM(INDEX(Grades!M32:V32,0,B2)+INDEX(Grades!M32:V32,0,C2)+INDEX(Grades!M32:V32,0,D2)+INDEX(Grades!M32:V32,0,E2)+INDEX(Grades!M32:V32,0,F2)+INDEX(Grades!M32:V32,0,G2))
这工作正常。问题是它不是真正动态的,我想知道是否有更有效的方法来解决这个问题而不是使用这么多索引。
Index 正在从另一个 sheet 中获取水平范围的数字,并从另一个 sheet 中的小 table 获取所需的索引位置。
更新
通过插入一个 IF
语句,如果其中一个单元格为空,该语句不会执行 VLOOKUP
,我能够让公式按我想要的方式工作。
=ArrayFormula(SUM(IF(B2:I2 <> "",VLOOKUP(1,{1,Grades!$M:$V},B2:I2+1))))
看起来有点奇怪,但这是一种方式:
=ArrayFormula(SUM(VLOOKUP(1,{1,Grades!M32:V32},B2:G2+1,0)))
在VLOOKUP
中,1
是你要搜索的值,{1,Grades!M32:V32}
是你要搜索的数组,B2:G2+1
是列索引(或者更确切地说,索引)您希望 return,而 0
指示您需要完全匹配。
{1,Grades!M32:V32}
构造一个水平单行数组,最左侧的元素为 1
,右侧的值为 Grades!M32:V32
。
VLOOKUP
将向下搜索该数组最左边的列。它总是 "find" 它在最左边的列中搜索的 1
,因为我们故意制造了那个。
真正发生动作的地方是在第三个参数中,我们 return 制造数组中的列与 B2:G2
中的值相对应(我应该补充一点,我假设所有单元格在B2:G2
被填充 - 如果有任何空白,它将 return 错误的结果)。 +1
是为了说明我们添加到查找数组左侧的额外元素(1
)。