【问题标题】:How can I return the first non-blank cell in a range of formulas?如何返回一系列公式中的第一个非空白单元格?
【发布时间】:2021-08-19 17:13:00
【问题描述】:

我正在使用用于数据收集的电子表格。当数据粘贴到电子表格并覆盖数据验证规则时,我被要求创建一个错误检查器。

在单元格 X3:AO33 中,我有一个公式块。他们中的大多数检查一个空白单元格,然后检查另一个单元格中的有效条目。如果结果有效或不需要,则返回空白。否则,它会返回一条消息。这是一个例子:

=IF(OR(AND(D3<>"",OR(F3="",G3="",H3="")),AND(U3<>"",V3="")),CONCATENATE("Required fields are missing in row ",ROW(),"."),"")

现在我需要在 B2 中添加一些内容,以查找 X3:AO33 范围内的消息。我希望它返回第一个非空白单元格的值。如果 Z5 有第一个发现的错误,那么 B2 应该在 Z5 中显示文本。然后用户可以修复问题,使Z5变为空白,如果下一个错误在AB7中,B2应该在AB7中显示文本。

我试过了。

=INDEX(X3:AO33,MATCH(FALSE,ISBLANK(X3:AO33),0))

还有这个。

=INDEX(X3:AO33,MATCH(TRUE,INDEX((X3:AO33<>0),0),0))

还有这个。

=INDEX(X3:AO33,MATCH(TRUE,LEN(X3:AO33)>0,0))

还有这个。

=MATCH("*",X3:AO33,0)

我已经将它们全部作为数组而不是数组进行了尝试。他们都带回了 #N/A 错误。

任何想法我做错了什么?

【问题讨论】:

    标签: arrays excel excel-formula match


    【解决方案1】:

    我改进了我原来的公式。这将始终让你第一个非空白从左到右,然后向下。 See sample sheet.

    =LEFT(TEXTJOIN("??",TRUE,X3:AO30),FIND("??",TEXTJOIN("??",TRUE,X3:AO30))-1)
    

    此外,您可以使用自定义函数,让您可以选择向上或向左。

    Function firstNoneBlank(theRange As Range, Optional upDownTrue As Boolean) As Variant
    Dim i As Long, j As Long
    
    Set theRange = Intersect(theRange, theRange.Worksheet.UsedRange)
    
    For i = 1 To IIf(upDownTrue, theRange.Rows.Count, theRange.Columns.Count)
            For j = 1 To IIf(upDownTrue, theRange.Columns.Count, theRange.Rows.Count)
                If theRange.Cells(i, j).Value <> "" Then
                    firstNoneBlank = theRange.Cells(i, j).Value
                    Exit Function
                End If
            Next j
    Next i
    
    firstNoneBlank = "#AllBlanks"
    End Function
    

    【讨论】:

    • 做到了!谢谢!比我在那里使用了一段时间的辅助列和 52 嵌套 IF 语句公式要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多