如何规避Excel IF函数的深度限制?

发布于 2024-08-11 01:29:47 字数 388 浏览 2 评论 0原文

对于 Excel 公式,我需要包含数值的单元格列表中的第一个单元格:

 A  |  B  |  C  | ... |  Z  |
-----------------------------
    | 0.1 | 0.4 | ... | =0.1
    |     | 0.2 | ... | =0.2

我使用此架构:

IF(ISNUMERIC(A1);A1;IF(ISNUMERIC(B1);A2;IF(ISNUMERIC(C1);C1;IF(...))))))))

不幸的是,这只适用于七列,因为 Excel 中的最大长度受到限制。

有什么方法可以重新表述这个公式,这样它就不会因为每增加一列而变得更深?

For an Excel formula I need the first cell out of a list of cells which contains a numeric value:

 A  |  B  |  C  | ... |  Z  |
-----------------------------
    | 0.1 | 0.4 | ... | =0.1
    |     | 0.2 | ... | =0.2

I use this schema:

IF(ISNUMERIC(A1);A1;IF(ISNUMERIC(B1);A2;IF(ISNUMERIC(C1);C1;IF(...))))))))

Unfortunately this only works for seven columns, because the maximum length is limited in Excel.

Is there any way to re-phrase this formula so that it doesn't get deeper with every additional column?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

笑忘罢 2024-08-18 01:29:47

好的,让我们看看。试试

=INDEX(A1:Y1,SUMPRODUCT((A1:Y1="")*1)+1)

这个 sumproduct 计算空格数,然后索引在 空格数 + 1 的单元格中查找值

希望有帮助。

OK, lets see. Try this

=INDEX(A1:Y1,SUMPRODUCT((A1:Y1="")*1)+1)

The sumproduct counts the number of blanks, then the index looks up the value in the cell where number of blanks + 1

Hope that helps.

墨小墨 2024-08-18 01:29:47

在单个单元格中,您可以使用数组公式来执行此操作:

Isnumber 在 Excel 2007 中提供了测试

将结果乘以 column()

使用 if 语句来帮助执行以下 min 函数:

使用 min 函数来标识第一个数字列。

当你想创建数组公式时,请记住使用 Ctrl-Shift-Enter,而不仅仅是 Enter。

=INDEX(A1:Z1,MIN(IF(ISNUMBER(A1:Z1),COLUMN(A1:Z1),5000)))

如果您需要该功能,这还会找到跨多行的第一个使用的列。

In a single cell you can do this with an array formula:

Isnumber provides the test in Excel 2007

Multiply the result by column()

Use an if statement to help the following min function along:

Use the min function to identify the first numeric column.

Remember to use Ctrl-Shift-Enter when you want to make an array formula, not just enter.

=INDEX(A1:Z1,MIN(IF(ISNUMBER(A1:Z1),COLUMN(A1:Z1),5000)))

This also finds the first used column across multiple rows should you need that functionality.

请叫√我孤独 2024-08-18 01:29:47

旁观者的答案有效(假设第一个数字后面的单元格总是被填充)。

您还可以在 VBA 模块中编写自己的函数。

Public Function getFirstNumber(ByRef sourceRow As Range) As Double
    For Each Cell In sourceRow.Cells
        If WorksheetFunction.IsNumber(Cell) = True Then
            getFirstNumber = Cell.Value
            Exit Function
        End If
    Next Cell
End Function

astanders answer works (with the assumption that the cells following the first number are allways filled).

You can also write your own function in a VBA Module.

Public Function getFirstNumber(ByRef sourceRow As Range) As Double
    For Each Cell In sourceRow.Cells
        If WorksheetFunction.IsNumber(Cell) = True Then
            getFirstNumber = Cell.Value
            Exit Function
        End If
    Next Cell
End Function
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文