给定一系列单元格A1到A1000,其中包含返回值或空的公式,我需要在单元格B1到B1000上放置公式,以便B1将包含从A1中的公式返回的第一个值:A1000,B2将包含第二个,依此类推,直到没有值可以返回。
这意味着最终结果将是一个简单的列表,其中包含在引用范围内返回的所有值,并且在它们之间没有任何空行。
我想到使用下面的公式来获取返回某个东西的第一个单元格,然后在下一个公式中检查前一个结果,但没有骰子,因为它返回错误:
=VLOOKUP("*"; $A$1:$A$1000; 1; FALSE)
答案 0 :(得分:2)
您可以使用辅助列来避免数组公式:
在 C1 中输入
=IF(A1="",0,1)
在 C2 中输入:
=IF(A2="","",MAX($C$1:C1)+1)
并复制下来。然后在 B1 中输入:
=INDEX(A:A,MATCH(ROW(),C:C,0))
并复制下来:
请注意, 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)
。
答案 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的值以反映您的实际源列和目标列。