跳至主要内容

Kutools for Office — 一套工具,五种功能。事半功倍。

如何在Excel中找到第一个/最后一个正数/负数?

Author Xiaoyang Last modified

当处理包含正负值的数字列时,您可能经常需要快速定位范围内的第一个或最后一个正数或负数。这对于数据分析、趋势检测或在大型数据集中识别特定入口点尤其有帮助。对于大型数据集依赖手动检查效率低下且容易出错。幸运的是,Excel提供了几种实用的方法来简化此任务,使您能够通过公式或自动化提取所需的精确值。下面,您将找到适用于不同场景的多种解决方案,包括适合重复或大规模操作的高级方法。

使用数组公式查找第一个正数/负数

使用数组公式查找最后一个正数/负数

使用VBA宏查找第一个/最后一个正数/负数


arrow blue right bubble 使用数组公式查找第一个正数/负数

要从一系列值中提取第一个正数或负数,您可以使用Excel的数组公式。这种方法适用于需要对中等数据范围进行快速解决方案的用户,并且在限制使用附加插件或宏的环境中非常合适。如果源数据发生变化,数组方法会自动更新,因此非常适合动态列表。以下是实现方法:

1. 选择一个空白单元格,输入以下数组公式以获取第一个正数:

=INDEX(A2:A18,MATCH(TRUE,A2:A18>0,0))

这里,A2:A18表示要搜索的数据列表。该公式定位范围内第一个大于0的单元格,然后返回该单元格的内容。请参见以下截图:

A screenshot showing a dataset to find the first positive number in Excel

2. 输入公式后,同时按下Ctrl + Shift + Enter,而不是仅按Enter。这将正确执行数组公式并从您的列表中返回第一个正数,如下例所示:

A screenshot showing the result of the first positive number using an array formula in Excel

提示:要检索第一个负数,只需使用此公式(输入后记得按Ctrl + Shift + Enter):

=INDEX(A2:A18,MATCH(TRUE,A2:A18<0,0))

在这两个公式中,更改条件(>0 表示正数,<0 表示负数)可以针对所需数字类型进行调整。请注意,数组公式不支持空单元格引用,因此为确保一致的结果,请确保您的数据范围不包含空白单元格。如果所有数字都是正数或负数,公式可能会返回错误——如果要抑制错误并显示自定义消息,请考虑添加IFERROR函数。

注意:在较新版本的Excel(Office 365和Excel 2021及更高版本)中,您可能不需要使用Ctrl + Shift + Enter;由于支持动态数组,仅按Enter即可足够。


arrow blue right bubble使用数组公式查找最后一个正数/负数

如果您的目标是确定列中的最后一个正数或负数值,您可以使用不同的数组公式。这种方法适合快速分析结束趋势或定位特定类型的最新数据点。请注意,此方法动态反映数据更新,特别是在您定期向列表中添加新数字时尤为有价值。

1. 在数据列旁边选择一个空白单元格,并输入此数组公式以查找最后一个正数:

=LOOKUP(9.99999999999999E+307, IF($A$2:$A$18 >0, $A$2:$A$18))

此公式通过利用LOOKUP的行为返回极大数值的最后一个数字匹配结果。在这里,IF($A$2:$A$18 >0, $A$2:$A$18)过滤出仅正数,随后LOOKUP返回最后一次出现的结果。请参见下图说明:

A screenshot showing the array formula for finding the last positive number in Excel

2. 通过按下Ctrl + Shift + Enter确认公式(除非您的Excel版本支持动态数组)。结果将显示指定范围内的最后一个正值,如下图所示:

A screenshot showing the result of the last positive number using an array formula in Excel

要返回最后一个负数,请改用以下数组公式,同样使用Ctrl + Shift + Enter

=LOOKUP(9.99999999999999E+307, IF($A$2:$A$18 <0, $A$2:$A$18))

如果未找到正数或负数值,公式将返回错误(#N/A)。为了优雅地处理这种情况,请将公式包装在IFERROR中。例如:

=IFERROR(LOOKUP(9.99999999999999E+307, IF($A$2:$A$18 >0, $A$2:$A$18)), "No match found")

重要的是避免合并单元格或组合文本/数字格式在您的范围内,因为它们可能会破坏公式的计算结果。在使用这些方法之前,始终验证数据完整性以获得最佳准确性。


arrow blue right bubble使用VBA宏查找第一个/最后一个正数/负数

如果您经常需要在多个范围或非常大的数据集中查找第一个或最后一个正数或负数,使用VBA宏自动化此任务可以节省大量时间并减少人工错误。此解决方案允许您搜索选定的范围并立即检索所需的值,非常适合批量处理或重复性分析任务。VBA方法在需要复杂标准或定制工作流程的场景中特别有用,尽管它确实需要基本熟悉Excel的开发工具。

1. 单击开发工具 > Visual Basic以打开Microsoft Visual Basic for Applications窗口。然后,在VBA编辑器中,单击插入 > 模块,并将以下代码复制到新模块中:

Sub FindFirstOrLastPosNegNumber()
    Dim rng As Range
    Dim cell As Range
    Dim result As Variant
    Dim firstPos As Variant, firstNeg As Variant
    Dim lastPos As Variant, lastNeg As Variant
    Dim selType As String
    
    On Error Resume Next
    Set rng = Application.InputBox("Select the data range", "KutoolsforExcel", Selection.Address, Type:=8)
    
    If rng Is Nothing Then Exit Sub
    
    selType = Application.InputBox("Type 'FirstPos' for first positive, 'FirstNeg' for first negative, 'LastPos' for last positive, or 'LastNeg' for last negative:", "KutoolsforExcel", "FirstPos", Type:=2)
    
    If selType = "" Then Exit Sub
    
    firstPos = Empty
    firstNeg = Empty
    lastPos = Empty
    lastNeg = Empty
    
    ' Find first positive and first negative
    For Each cell In rng
        If IsNumeric(cell.Value) Then
            If firstPos = Empty And cell.Value > 0 Then
                firstPos = cell.Value
            End If
            If firstNeg = Empty And cell.Value < 0 Then
                firstNeg = cell.Value
            End If
            If cell.Value > 0 Then
                lastPos = cell.Value
            End If
            If cell.Value < 0 Then
                lastNeg = cell.Value
            End If
        End If
    Next cell
    
    Select Case UCase(selType)
        Case "FIRSTPOS"
            result = firstPos
        Case "FIRSTNEG"
            result = firstNeg
        Case "LASTPOS"
            result = lastPos
        Case "LASTNEG"
            result = lastNeg
        Case Else
            result = "Invalid input"
    End Select
    
    If IsEmpty(result) Then
        MsgBox "No matching value found in the selected range.", vbInformation, "KutoolsforExcel"
    Else
        MsgBox "Result: " & result, vbInformation, "KutoolsforExcel"
    End If
End Sub

2. 要执行宏,请按 F5 (或单击 Run button 运行 按钮),并按照以下步骤操作:

  • 对话框将提示您选择数字范围(例如,A2:A18)。
  • 接下来,输入您的搜索类型:输入FirstPos以查找第一个正数,FirstNeg以查找第一个负数,LastPos以查找最后一个正数,或LastNeg以查找最后一个负数(不区分大小写)。
  • 输入选择并确认后,结果将显示在消息框中。

提示:

  • 此宏可以处理用户选择的任何连续数字范围,从而在数据布局方面提供灵活性。
  • 如果指定的类型与范围内的任何数字不匹配,您将收到通知而不是错误。
  • 确保在您的Excel中启用了宏,以便VBA代码能够正常工作。
  • 如果您的数据包含非数字值,宏将在处理期间忽略它们。

 

故障排除和建议:对于所有解决方案,始终确认您的选择包含预期范围并且不包括标题。如果您使用大范围,请考虑限制其大小以避免计算或性能延迟,尤其是在使用数组公式或宏时。

如果您发现自己经常执行此任务或想要更多自定义选项,请考虑在宏中结合多个条件或创建专用按钮以便于访问。尝试新的VBA脚本之前始终保存您的工作,并在新手编程时在备份副本上进行测试。


相关文章:

如何在Excel中找到第一个/最后一个大于X的值?

如何在Excel中找到一行中的最高值并返回列标题?

如何在Excel中找到最高值并返回相邻单元格值?

如何根据条件在Excel中找到最大值或最小值?

最佳Office办公效率工具

🤖 Kutools AI 助手:以智能执行为基础,彻底革新数据分析 |代码生成 |自定义公式创建|数据分析与图表生成 |调用Kutools函数……
热门功能:查找、选中项的背景色或标记重复项 | 删除空行 | 合并列或单元格且不丢失数据 | 四舍五入……
高级LOOKUP多条件VLookup|多值VLookup|多表查找|模糊查找……
高级下拉列表快速创建下拉列表 |依赖下拉列表 | 多选下拉列表……
列管理器添加指定数量的列 | 移动列 | 切换隐藏列的可见状态 | 比较区域与列……
特色功能网格聚焦 |设计视图 | 增强编辑栏 | 工作簿及工作表管理器 | 资源库(自动文本) | 日期提取 | 合并数据 | 加密/解密单元格 | 按名单发送电子邮件 | 超级筛选 | 特殊筛选(筛选粗体/倾斜/删除线等)……
15大工具集12项 文本工具添加文本删除特定字符等)|50+种 图表 类型甘特图等)|40+实用 公式基于生日计算年龄等)|19项 插入工具插入二维码从路径插入图片等)|12项 转换工具小写金额转大写汇率转换等)|7项 合并与分割工具高级合并行分割单元格等)| ……
Kutools支持多种语言——可选择英语、西班牙语、德语、法语、中文等40多种语言!

通过Kutools for Excel提升您的Excel技能,体验前所未有的高效办公。 Kutools for Excel提供300多项高级功能,助您提升效率并节省时间。 点击此处获取您最需要的功能……


Office Tab为Office带来多标签界面,让您的工作更加轻松

  • 支持在Word、Excel、PowerPoint中进行多标签编辑与阅读
  • 在同一个窗口的新标签页中打开和创建多个文档,而不是分多个窗口。
  • 可提升50%的工作效率,每天为您减少数百次鼠标点击!

所有Kutools加载项,一键安装

Kutools for Office套件包含Excel、Word、Outlook和PowerPoint的插件,以及Office Tab Pro,非常适合跨Office应用团队使用。

Excel Word Outlook Tabs PowerPoint
  • 全能套装——Excel、Word、Outlook和PowerPoint插件+Office Tab Pro
  • 单一安装包、单一授权——数分钟即可完成设置(支持MSI)
  • 协同更高效——提升Office应用间的整体工作效率
  • 30天全功能试用——无需注册,无需信用卡
  • 超高性价比——比单独购买更实惠