取一列返回空或结果的公式单元格,只获取带有结果的单元格

时间:2016-09-28 20:06:40

标签: excel excel-formula

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

C1 中输入

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

C2 中输入:

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

并复制下来。然后在 B1 中输入:

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

并复制下来:

enter image description here

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

答案 1 :(得分: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)>1)

no_spaces

答案 2 :(得分:-1)

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

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的值以反映您的实际源列和目标列。