我有以下两个数组:
{a,b,c}
{d,e,f}
我如何获得这个数组?
{a*d,b*e,c*f}
例如,一个数组是 {0,1,1},另一个是 {255,122,0}。我需要这个数组:
{0,122,0}
真的就是这么简单。
这与此线程有关:Excel:在过滤范围内查找最后一个非零、非空单元格
我发现这个公式 SUBTOTAL(2,OFFSET(R5,ROW(R5:R200)-ROW(R5),0)) 为过滤后的数据(可见)给出 1,为过滤掉的数据(不可见)给出 0。因此,这是一个包含 196 个 0 或 1 元素的数组。
另一个数组,OFFSET(R5,ROW(R5:R200)-ROW(R5),0),基本上就是 R5:R200。
如果我可以将一个数组的每个元素与另一个数组中的对应元素相乘并得到一个新数组,那么下面的 LOOKUP 将给出过滤数据中的最后一个非零数字。
=查找(2,1/新阵列,R5:R200)
这是因为 SUBTOTAL 数组为每个过滤(可见)单元格给出 1,当它与单元格内容相乘时,那些内容为 0 的可见单元格将在新数组中变为 0({0,1,1 中的第二个 1 } 在 {255,122,0} 中乘以 0)。因此,LOOKUP 将拾取最后一个非零单元格。
这个公式可以得到期望形式的数组元素:
A44
并填写正确直到需要。=A42*D42
根据需要调整公式中的单元格引用。
正如@Jeeped 所说,使用 INDEX:
这会将数组 {0,122,0} 返回到另一个公式
如您所见,如果我们将数字相加:
返回 122
假设您在单元格 A1、B1 和 C1 中分别有 1、2 和 3。在单元格 A2、B3 和 C2 中分别有 4、5 和 6。
在单元格 A3 中,您可以输入公式:
= A1:C1 * A2:C2
它将生成一个 {4,10,18} 数组,分别溢出到 A3、B3 和 C3 中。