如何使用 CSE 公式将范围过滤到某个范围?

如何使用 CSE 公式将范围过滤到某个范围?

我有一个范围 A1:C100,A 列和 B 列中的单元格可能为空。我想使用 CSE 公式,过滤 A1:C100,仅保留 A 列和 B 列不为空的行,并将其填充到范围 D1:F100 中。

在 SQL 中这很简单,例如

select A, B, C from [A1:C100] where A!="" and B!=""

但是我如何使用 CSE 公式在 Excel 中写入这个?

答案1

查看此示例,其中有一个备用列和三种数组公式。

在此处输入图片描述

在此处输入图片描述

范围A1:B100由随机字符串填充,带有空白单元格,范围C1:C100只是一些数字(也可以是字符串)。

RangeH1:H100用作辅助列,它实际上过滤并累积和中非空单元格的行AB

H1:数组公式用于查找第一个包含非空单元格AB列的行号:

=MATCH(1,SIGN(LEN(TRIM($A$1:$A$100))*LEN(TRIM($B$1:$B$100))),0)

H2:另一个数组公式,用于查找所有其余行号,其中包含AB列中的非空单元格:

=IF(ROW()>SUM(SIGN(LEN(TRIM($A$1:$A$100))*LEN(TRIM($B$1:$B$100)))),"",MATCH(1,SIGN(LEN(TRIM(INDIRECT(ADDRESS((1+H1),1)&":$A$100")))*LEN(TRIM(INDIRECT(ADDRESS((1+H1),2)&":$B$100")))),0)+H1)

该公式很长,因此为了以防万一,这里将其格式化以显示结构:

IF( 
  ROW()>
          SUM(
            SIGN(
              LEN(TRIM($A$1:$A$100))*LEN(TRIM($B$1:$B$100))
            )
          )
  ,""
  ,MATCH(1, 
           SIGN(
              LEN(TRIM(INDIRECT(ADDRESS((1+H1),1)&":$A$100")))
             *LEN(TRIM(INDIRECT(ADDRESS((1+H1),2)&":$B$100")))
           )
         ,0
   )+H1
)

在中输入最后一种数组公式D1

=IF(ROW()>SUM(SIGN(LEN(TRIM($A$1:$A$100))*LEN(TRIM($B$1:$B$100)))),"",INDEX($A$1:$C$100,$H1,COLUMN()-COLUMN($D$1)+1))

将单元格复制到E1F1;选择并复制范围D1:F1;选择范围D2:F100并粘贴复制的单元格。

通过增加更多的辅助列,公式可以变得更短。

强制性说明:进入 数组公式,按Ctrl+ Shift+Enter 而不是只Enter按标量公式)。

答案2

  • 选择数据选项卡
  • 在“获取并转换”部分中选择“从表中”。
  • 出现提示时,选择过滤器“删除空白”。
  • 或者
  • 高级过滤器:例如,ColA 不等于 null 并且 ColB 不等于 null。

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

您还可以在逻辑查询中添加 AND 子句(例如,其中 ColA 不等于 null AND ColB 不等于 null)

在此处输入图片描述

选择“加载并关闭”。完成。

Excel 2010 中不提供“获取并转换 > 从表格”功能

  • 转到:数据选项卡 > 排序和筛选 > 高级。

在此处输入图片描述

注意标准以及它的输入方式。

在此处输入图片描述

相关内容