答案1
由于数据集按行成对分组,因此可以利用该值来识别和比较值。该公式检查第一行数据是奇数行还是偶数行。继续使用该值来识别所有对。
odd; even,
odd; even,
odd; even,
ETC。
或者
even; odd,
even; odd,
even; odd,
ETC。
公式
- 公式使用命名范围
data
,使公式更易于遵循和维护$A2:$C1000
- 这个问题有一个基本假设,即一对中的两个成员永远不会有相等的值,或者如果它们有,它们就不重要了。如果它们有,它们都会从结果中被过滤掉,因为
x-x=0
。
=LET(
rowOffset, IF(ISEVEN(ROW(INDEX(data,1,1))),0,1),
newValues,
MAP(INDEX(data,,3), LAMBDA(r,IF(r<>"",
IF(ISEVEN(ROW(r)+rowOffset),
IF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0),
IF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0)),0))),
newData, HSTACK(INDEX(data,,1), INDEX(data,,2), newValues),
FILTER(newData, INDEX(newData,,3)>0))
笔记
Line | Code
-----+------------------------------------------------
1 | =LET(
2 | rowOffset, IF(ISEVEN(ROW(INDEX(data,1,1))),0,1),
3 | newValues,
4 | MAP(INDEX(data,,3), LAMBDA(r,IF(r<>"",
5 | IF(ISEVEN(ROW(r)+rowOffset),
6 | IF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0),
7 | IF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0)),0))),
8 | newData, HSTACK(INDEX(data,,1), INDEX(data,,2), newValues),
9 | FILTER(newData, INDEX(newData,,3)>0))
线 | 笔记 |
---|---|
#1 | 使用让函数允许存储中间计算并在公式中定义名称。 |
#2 | rowOffset 等于0 或1 拉姆达公式(第 4 行)假设第一对成员位于偶数行。 rowOffset 根据需要偏移行号指数用于标识范围的第 1 行第 1 data 列INDEX(data,1,1) 排获取索引单元格的行号 ROW(INDEX(data,1,1)) 甚至如果行号为偶数 ISEVEN(ROW(INDEX(data,1,1)) ,则返回 TRUE,最后如果为偶数则为 0,为奇数则为 1 IF(ISEVEN(ROW(INDEX(data,1,1))),0,1) |
#3 | 声明newValues 存储结果拉姆达功能 |
#4 | 拉姆达函数创建值列0或一对之间的差异。 指数 用于从 data 第 3 列中获取旧值INDEX(data,,3) 索引列地图进入拉姆达功能 MAP(INDEX(data,,3), 拉姆达定义 r 为保存映射到的值MAP(INDEX(data,,3), LAMBDA(r, 如果语句跳过了其余部分拉姆达如果映射值为空 IF(r<>"", |
#5 | 检查是否r 是该对中的第一个或第二个成员排 r ROW(r) 如果第一个成员位于奇数行,则添加行号rowOffset ROW()+rowOffset 甚至 r 如果的行 +rowOffset 为偶数,则返回 TRUEISEVEN(ROW()+rowOffset) 如果's value if TRUE = 第 1 位成员,& value if false = 第 2 位IF(ISEVEN(ROW()+rowOffset), |
#6 | 第一个成员将值与第二个成员进行比较IF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0) 如果测试是否 r 大于值抵消1 行以下 0 列“如果为真则为值”是从IF(r>OFFSET(r,1,0), 下面的值中减去 r r-OFFSET(r,1,0) “如果为假则为值” 0 |
#7 | 第二个成员将值与第一个成员进行比较IF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0) 如果测试是否 r 大于值抵消上面 1 行 0 列“如果为真则为值” 是从IF(r>OFFSET(r,-1,0), 上面的值中减去 r r-OFFSET(r,-1,0) “如果为假则为值” 是 0 |
#8 | 根据newData 列 ID 1、列 ID2 和newValues 指数 data 从范围内获取第一列 ID1INDEX(data,,1) 指数 data 还从范围 中获取第二列 ID2INDEX(data,,2) 堆栈将索引列合并 newValues 为一个 3 列数组newData HSTACK(INDEX(data,,1), INDEX(data,,2), newValues) |
#9 | 筛选大批newData 第三列值 > 0FILTER(newData, INDEX(newData,,3)>0)) |