【发布时间】:2017-09-23 02:43:21
【问题描述】:
(最后)EDIT3:
=index(sort(filter(A:D,A:A0),3,false),1,3)
- 筛选开始日期到当前日期、练习名称、代表 0.
- 按降序排列权重,第一行最高
- 指数权重行
似乎工作得更快,仍然需要拖动,因为过滤器在 arrayformula 中不起作用。只返回一天中的最大值就足够了,从技术上讲,我希望将最大值引导到该集合(即,如果日期值更好,我可以按分钟/秒过滤,但原始数据没有该信息)。我想我可以制作另一列序列号,为每一行指定一个比较顺序。
原问题:
我正在构建一个运动记录器,并试图找到每个运动的最后一个 MAX 重量值。我使用的公式大部分都有效,但是速度很慢,因为它比较了所有练习并加权了当前单元格,并且工作表有接近 30000 个条目。
所以,我想知道是否有一种方法来索引/匹配/排序,以便我可以让它在一个单元格数组公式中工作,因为 Max 在数组中不起作用。就像找到以前发生的运动(B:B)一样,保持体重值较高的值(C:C)。
对于当前的公式,如果 reps = 0(某种 AND IF D:D0),我想保留之前的 MAX weight。因此,如果我未能执行单个代表(又名代表 = 0),重量值不会被转移到计算中。行为以红色突出显示。这似乎与上述查找先前最高值的方法相关联,并将其作为错误条件插入。
样品表
谢谢你,我想找到“最后出现”的例子。
编辑:我大脑中公式的逻辑似乎应该是
- 找到之前的练习 B:B 条目,如果不存在,将 maxE 设置为当前 weightC(设置第一个最大值)
- 如果之前的练习B确实存在,则判断当前repD是否大于或等于1(即不为0)
- 比较当前 weightC 与之前的 maxE 并将当前 maxE 设置为较大的一个
- else(当当前repD小于1时),设置当前MaxE为前一个MaxE
编辑 2:
@anonymous,感谢您的意见。
上面的公式比较
您的公式(F 列)的行为与我所拥有的(D 列和公式栏中的)非常相似,但有一些错误(以黄色突出显示)。总体而言,我能够检测到 D0(突出显示红色),但无法找到一种方法来确定 Google 表格中先前出现的组和相邻值的方法。但是,我发现在 excel 中有效的“反向”函数(下图)但不幸的是“=LOOKUP(2,1/”在仍然自上而下处理的 Google 表格中不起作用。所以在 Excel 中,公式返回 60,这是正确的,在表格中,它将返回 25。
Excel 工作。它找到最后一次出现。
我现在将坚持使用 Excel,因为它可以工作,而且 Google 表格需要 20 分钟才能完成现有公式。主要是我希望找到一种方法来减少处理时间或避免使用 MAX,因为它在单个方程的数组中不兼容。
【问题讨论】:
-
@diggy,按照你的逻辑,
=ARRAYFORMULA(MAX(IF(B2=B1,IF(D2<>0,MAX(C2,E1),E1), C2)))并向下拖动填充,但这不起作用,因为有多个练习随机排列。 -
@anonymous,感谢您的努力,请查看编辑以了解进度。简而言之,我认为我找到了使事情正常运行的必要功能,但 Google 表格不支持它。
-
@diggy,AFAIK,Google 表格也支持 LOOKUP (2,1/... ) 方法。你可能想用
ARRAYFORMULA (LOOKUP(2,... ))输入它 -
@diggy,Excel 也将仅采用自上而下的方法。它仍然会遍历所有值并到达最后一个值。此外,Google 表格中还有 SORT 功能。您可以对其进行反向排序并在必要时使用它。玩它。但是,如果你真的对数据进行排序,它会更好。我会在性能上有很大的提升
-
@anonymous,感谢您的建议,我有一个半工作功能,可以按练习名称/截至当前日期/代表 0 的条目进行过滤,按降序对输出进行排序,然后索引第一个匹配项值(应该是以前最大的权重0。它似乎处理得更快,几分钟而不是几十分钟,但仍然需要拖动。=index(sort(filter(A:D,A:A0),3,false),1,3)
标签: google-sheets