在 Excel 中,如何避免重复公式的大部分只是为了检查 return 值是否为空?

In Excel, how can I avoid repeating a big part of the formula just to check if the return value is blank?

我有一种情况,我在不同的工作表中引用单元格并从该工作表返回单元格的值。虽然它有效,但我发现我当前的方法效率低下,因为我必须在 IF 语句的逻辑测试部分重复公式:

=IF(**EXTREMELY LONG COMPLICATED FORMULA** <> "", **EXTREMELY LONG COMPLICATED FORMULA**, "")

如您所见,我必须重复公式的主要部分,只是为了先检查它是否为空。如果我不这样做,我会在单元格中得到一个零(对于引用工作表中的空白值)。我正在寻找更像的东西:

=IF(**EXTREMELY LONG COMPLICATED FORMULA** <> "", **RETURN VALUE**, "")

这对我来说看起来更清晰,因为我不必重复自己。此外,如果我们必须更新公式,我将不必将我的更改复制到重复的部分。 有办法吗?

以上实际上是我的问题的简化版本,但答案应该让我知道我需要去的地方。我的实际公式有嵌套的 IF 语句检查空白。作为参考,这里是:

=IFERROR(IF(SMALL(IF(ImportedData!$H:$H00>=DataFilters!$A,IF(ImportedData!$G:$G00=DataFilters!$A,ROW(ImportedData!A:A00)-ROW(ImportedData!A)+1)),ROWS(ImportedData!A:ImportedData!A2))<>"",IF(INDEX(ImportedData!A:A00,SMALL(IF(ImportedData!$H:$H00>=DataFilters!$A,IF(ImportedData!$G:$G00=DataFilters!$A,ROW(ImportedData!A:A00)-ROW(ImportedData!A)+1)),ROWS(ImportedData!A:ImportedData!A2)))<>"",INDEX(ImportedData!A:A00,SMALL(IF(ImportedData!$H:$H00>=DataFilters!$A,IF(ImportedData!$G:$G00=DataFilters!$A,ROW(ImportedData!A:A00)-ROW(ImportedData!A)+1)),ROWS(ImportedData!A:ImportedData!A2))),""),""),"")

最明显的解决方案是使用辅助列或单元格。只需将 EXTREMELY LONG COMPLICATED FORMULA 放在电子表格的某处,然后在 IF 公式中引用该单元格。

编辑

为了避免出现辅助列,这里是我偶尔使用的一个技巧:

=IFERROR(VALUE(long_formula&""),"")

它所做的是,将长公式的结果与一个空字符串连接起来(将其转换为字符串),然后取所有这些的值(如果可能,将其转换回数字),然后替换空白的任何错误。 (如果您尝试获取非数字值,则会发生错误。)

这仅在您有数值结果或空结果时才有效。如果您有文本结果,它将失败。

您是否需要单元格中的空白以进行进一步计算或 if 函数,或者您只是不想看到 0?

第二种情况: 只需为列使用数字格式,如

0,00;-0,00;"";@

第一种情况: 将以下代码放入模块中:

Option Explicit

Public Function IfEmpty(LongFormula As String) As String
    If LongFormula = "" Then
        IfEmpty = ""
    Else
        IfEmpty = LongFormula
    End If
End Function

并在您的工作表中使用它,例如

=IfEmpty(**EXTREMELY LONG COMPLICATED FORMULA**)

截至 2020 年 3 月,Excel 包含 LET 函数。你可以这样写:

=LET(ELCF,**EXTREMELY LONG COMPLICATED FORMULA**,IF(ELCF <> "", ELCF, ""))

其中三个参数是:

  • 您将用来引用您的计算的名称,
  • 计算本身,
  • 最终使用公式计算。

该函数还允许定义多个名称。一般语法是:

=LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name3...])

https://support.microsoft.com/en-us/office/let-function-34842dd8-b92b-4d3f-b325-b8b8f9908999