2016-09-28 82 views
1

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

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

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

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

要与公式它需要是一个数组公式,即许多数组公式将影响计算时间做到这一点。 –

+0

宏如何自动过滤列以取出空白,然后将剩余值,未过滤器和粘贴复制到下一列? – Jonathan

回答

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

注意,柱Ç “标记” 包含值的行要被检索和列检索信息。

+0

谢谢,另一种解决方案工作的很好,但这个更容易理解。那里非常聪明的逻辑! – Renato

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

+0

我喜欢vba脚本,但为了简单起见,我尽我所能完成了使用公式的任务。无论如何,我会保持这种想法!谢谢! – Renato

2

使用,

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

必要向下填充。如果你的数据从第一行开始,那么摆脱(ROW($1:$999)>1)

no_spaces

+0

这个公式对我来说有点难理解,如果你能解释它,我很乐意! – Renato

+0

您是否查看了[AGGREGATE函数](https://support.office.com/en-us/article/AGGREGATE-function-43B9278E-6AA7-4F17-92B6-E19993FA26DF)的office.microsoft.com页面?你是否已经将范围收紧至4-6行,并通过[评估公式](https://support.office.com/en-us/article/evaluate-a-nested-formula-one-step- at-a-time-59a201ae-d1dc-4b15-8586-a70aa409b8a7)命令?我不愿意在这里重写文档。上述两个自学步骤的哪一部分没有得出答案? – Jeeped

+0

是的,它是一个非常复杂的定义,尽管我会尝试理解你的公式的运作。 – Renato

相关问题