=LET(
data, jp!A2:C8&"",
uniqueLetters, UNIQUE(INDEX(data,,1)),
result, REDUCE("", uniqueLetters, LAMBDA(r,letter,
VSTACK(r, "", FILTER(TAKE(data,,2), (INDEX(data,,3)="a")*(INDEX(data,,1)=letter)))
)),
result1, DROP(result,2),
result2, MAP(result1, DROP(result,1), LAMBDA(a,b,
IF(AND(ISNUMBER(a), ISNUMBER(b)), IF(a=b, "", a), a)
)),
IFERROR(DROP(result2,-1),"")
)
你好,这个公式是从jp复制粘贴数据! A2:基于jp的值的C8! C1:C8。在这种情况下,jp! Cl:C8是“a”。公式不是我想要的那样。我有两个请求
一,当jp! C1:C8包含“a”以外的值,公式将不起作用。现实地,嗯! C1:C8有“a”,“b”,“c”供我的其他工作表复制。有办法解决吗?
二、当jp中有重名时! A2:A8,则公式将重复项更改为“”。(我最初是为了工作而做的,但后来不知怎么搞砸了,不知道如何修复。
基本上我希望它的工作就像它的图片中所示。
我希望这一切都有意义。谢谢你!
3条答案
按热度按时间ykejflvf1#
已经有两个完美的解决方案了。我想分享另一种方法,因为它可能更容易阅读:
它首先筛选满足条件的行的范围。
然后reduce迭代(已过滤数组
f
)第一列的唯一值。对于每个唯一值,它堆叠前一个结果,一个2个单元格的空白行,以及唯一值的水平堆叠和该唯一值的b值的过滤器。
由于过滤器可能返回多行,而被堆叠的唯一值仅为一个值,因此如果过滤范围超过1行,则HSTACK结果将包含低于唯一值的错误值。IFERROR将其转换为
"
。然后我们得到了两个前导行的结果:前两行由REDUCE中的第一个唯一值
a
(或y
)触发。它们触发将开始值x
(0
)和包含空白的行({"",""}
)与第一个过滤结果进行堆叠。如果我们去掉前面的两行,我们就得到了最终结果。
2ul0zpep2#
过滤数据
ujv3wf0j3#
这里,使用
REDUCE/VSTACK
模式的另一替代方案(1):以下是
a
和b
的输出:改变b
情况下的lk
值:对于
b
的情况,要在Dog
行中返回空字符串而不是零,请检查我对以下问题的回答:我怎样才能返回空白单元格,因为它是不是打印为零,而使用过滤功能。该公式仅依赖于两个输入范围值
in
和lk
,因此易于在其他工作表中维护和使用。名称f
过滤输入in
的前两列,其中查找值(lk
)与输入的第三列(C
)匹配。然后我们使用REDUCE/VSTACK
模式(1)来迭代过滤值(fa
)的第一列的唯一值。名称ff
过滤名称f
,其中第一列等于每次迭代的唯一值u
。从那里它使用
LET
来定义其他名称:first
,ff
的第一行,ffx
其余行。请记住,ff
中可能只有一行,在这种情况下,ffx
等于#CALC!
。我们通过ISERR
调用来考虑这种情况。如果ISERR
是TRUE
,它只返回第一行(first
),否则first
加上以下行,将第一列替换为""
,这就是我们的做法:它使用条件
TAKE(ffx,,1)=u
(在每次迭代中 alwaysTRUE
)来生成一个具有""
值的常量数组。现在名称
out
在每次迭代中都有所需的输出。唯一需要的额外步骤是在每次迭代的开始添加一个空行({"",""}
),* 除了 * 第一次。如果在每次迭代的末尾添加空行,则不需要此条件,但它会在最后一次迭代中生成不必要的空行,因此我倾向于避免这种情况。识别第一次迭代的条件是ROWS(ac)=1
。(1):如何将Excel中的表格从垂直转换为水平,但长度不同