【问题标题】:Take a column of formula cells that return empty or a result, get only cells with a result取一列返回空或结果的公式单元格,只获取有结果的单元格
【发布时间】:2017-02-06 23:28:56
【问题描述】:

鉴于一系列单元格 A1 到 A1000 包含返回值或空的公式,我需要将公式放在单元格 B1 到 B1000 上,以便 B1 将包含从 A1:A1000 中的公式返回的第一个值,B2 将包含第二个,依此类推,直到没有值可以返回。

这意味着最终结果将是一个简单的列表,其中包含在引用范围内返回的所有值,按顺序排列,并且在一个和另一个之间没有任何空行。

我想使用下面的公式来获取第一个返回内容的单元格,然后在下一个公式中检查之前的结果,但没有骰子,因为它返回错误:

=VLOOKUP("*"; $A$1:$A$1000; 1; FALSE)

【问题讨论】:

  • 要使用公式执行此操作,它需要是数组公式,许多数组公式会影响计算时间。
  • 一个宏如何自动过滤列以取出空白,然后复制剩余的值,取消过滤并粘贴到下一列?

标签: excel excel-formula


【解决方案1】:

您可以使用辅助列避免数组公式

C1输入

=IF(A1="",0,1)

C2中输入:

=IF(A2="","",MAX($C$1:C1)+1)

然后抄下来。然后在B1中输入:

=INDEX(A:A,MATCH(ROW(),C:C,0))

然后抄下来:

请注意,列 C“标记”包含要检索的值的行,列 B 检索信息。

【讨论】:

  • 谢谢,另一种解决方案同样有效,但这个更容易理解。那里的逻辑非常聪明!
【解决方案2】:

使用,

=INDEX(A:A, AGGREGATE(15, 6, ROW($1:$999)/((ROW($1:$999)>1)*(A$1:A$999<>"")), ROW(1:1)))

根据需要填写。如果您的数据从第 1 行开始,请去掉 (ROW($1:$999)&gt;1)

【讨论】:

  • 这个公式对我来说有点难以理解,如果你能解释一下,我会很高兴的!
  • 您查看过AGGREGATE function 的office.microsoft.com 页面吗?您是否将范围缩小到 4-6 行并使用Evaluate Formula 命令逐步完成?我不愿意在这里重写文档。上述两个自学步骤中哪一部分没有产生答案?
  • 是的,这是一个相当复杂的定义,尽管我会尝试理解您的公式的工作原理。
【解决方案3】:

公式不会给你一个好的答案。如果您只需要一个非空白值的列表,您可能需要考虑使用自动过滤器来过滤掉空白,或者使用排序将具有值的单元格放在顶部。如果你确实需要一个不同的列表,你最好的选择可能是这样一个简短的宏:

Sub RemoveBlanks()
    Const csS As String = "A"
    Const csT As String = "B"

    Dim rngCell As Range
    Dim rngSource As Range
    Dim rngTarget As Range
    Dim lngLast As Long

    lngLast = Range(csS & Rows.Count).End(xlUp).Row

    Set rngSource = Range(csS & 1, csS & lngLast)
    Set rngTarget = Range(csT)
    For Each rngCell In rngSource
        If rngCell.Value <> "" Then
            rngTarget.Value = rngCell.Value
            Set rngTarget = rngTarget.Offset(1, 0)
        End If
    Next rngCell
End Sub

可以更改 csS 和 csT 的值以反映您的实际源列和目标列。

【讨论】:

  • 我喜欢 vba 脚本,但为了简单起见,我会尽力使用公式来完成我的任务。反正我会把这件事记在心里!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多