我有主表和数据表(多于 1 张但格式相同)
这是工作表中数据的示例
项目(C 列) | 详细信息(E 列) |
---|---|
项目A | |
笔记本电脑 | |
打印机 | |
相机 | |
空白的 | |
电话 | |
投影仪 | |
项目 C | |
执行 | |
调试 | |
智能电视 |
我需要做的是复制项目并跳过第二列
如果项目为空白,则复制第二列
但如果接下来的第一列再次包含单词,则复制并跳过第二列
另外,跳过空白行和能够容纳多个数据表的公式
在我的例子中,如果 C 列单元格已填充,则复制该单元格,但如果 C 列为空白,则复制 E 列,直到其为空白,然后返回 C 列
预期结果:
项目(C 列) |
---|
项目A |
电话 |
投影仪 |
项目 C |
我现在使用的公式:=IF('Data1'!C7<>0;'Data1'!C7;'Data1'!E7)
我的公式的结果:
项目(C 列) |
---|
项目A |
笔记本电脑 |
打印机 |
相机 |
0 |
0 |
电话 |
投影仪 |
0 |
项目 C |
执行 |
调试 |
智能电视 |
注意:每个数据表中的数据行数并不总是相同的(即数据 1 100 行,数据 2 400 行,等等,并且我需要公式连续遍历整个工作表(即,数据 1 中的数据完成后,公式移动到数据 2,依此类推)
谢谢
答案1
你有一个有趣的问题。它实际上是两个问题。第一个问题是将包含文本的两列缩减为一列,清空或选择特定文本。第二个问题是过滤,即减少一列数据以解析出不需要的行。
第一部分的“简单”公式。假设 F1 是标题,F2 是文本“Discard”,然后是 F3:
=IF(C3&E3="",IF(E4<>"",XLOOKUP("*",$C$1:C3,$C$1:C3,"",2,-1),"Discard"),IF(C3<>"","Discard",IF(F2="Discard","Discard",C3&E3)))
从语义上来说,它意味着:
IF both fields empty then
If the detail field below you is also empty then
Cell = "Discard" %this is truely a blank spacer row
else
%this is the blank row indicating the items to keep will follow
%use XLOOKUP to search upward for the project field above you
Cell = XLOOKUP("*",$C$1:C3,$C$1:C3,"",2,-1)
end
else
%One or both fields contain text
If project field is empty then
%there is something in the details field
%but we don't know if this is from the section to discard or keep
%so we look at the results above us, if its "discard" we discard also
If cell in F above is "Discard" then
%we are in a discard section
Cell = "Discard"
else
%we are in a keep section
Cell = E3
end
else
%so project field is not empty, we can discard project for now
%this "discard" will trigger rows below to also discard
Cell = "Discard"
end
end
现在对于第二部分,使用普通过滤器或 Office 365 FILTER 函数过滤掉所有“丢弃”值:
=FILTER($F:F17,F1:F17<>"Discard")