取一列返回空或结果的公式单元格,只得到一个结果单元格

给定一个单元格区域A1到A1000,其中包含返回值或为空的公式,我需要将公式放在单元格B1到B1000上,这样B1将包含从A1中的公式返回的第一个值:A1000,B2将包含第二个值,并且以此类推,直到没有剩下要返回的值。

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

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

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

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

C1中input

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

C2中input:

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

并抄下来。 然后在B1中input:

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

并抄下来:

在这里输入图像描述

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

使用,

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

根据需要填写。 如果你的数据从第一行开始,然后摆脱(ROW($1:$999)>1)

没有空间

一个公式不会给你一个很好的答案。 如果您只需要非空值的列表,则可能需要考虑使用自动filter来过滤空白,或使用sorting来将单元格的值放在顶部。 如果你确实需要一个明确的名单,你最好的select可能是这样一个简短的macros:

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