根据条件自动填充并跳过空白单元格的公式

根据条件自动填充并跳过空白单元格的公式

我有主表和数据表(多于 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")

相关内容