You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件矩阵提取Excel数据矩阵的指定条件最大值(值为3或10)

解决方案:提取符合条件的矩阵值并计算最大值

下面提供两种实现方式,分别适用于直接用Excel函数和需要自定义功能的场景:

一、Excel函数方案

1. 适用于Excel 365/2021及以上版本(支持动态数组)

直接使用FILTER+MAX组合,一步到位:

=MAX(FILTER(DataRange, (CriteriaRange=3)+(CriteriaRange=10)))
  • 说明:
    • 将DataRange替换为你的数据矩阵单元格区域,比如A1:C5
    • 将CriteriaRange替换为你的条件矩阵单元格区域,需和数据矩阵大小完全一致
    • (CriteriaRange=3)+(CriteriaRange=10)实现逻辑“或”判断,只要条件矩阵对应位置是3或10,就会被筛选出来
    • 如果没有符合条件的值,公式会返回#CALC!,可通过IFERROR优化提示:
      =IFERROR(MAX(FILTER(DataRange, (CriteriaRange=3)+(CriteriaRange=10))), "无符合条件的数据")
      

2. 适用于旧版Excel(不支持动态数组)

使用数组公式,输入完成后需按Ctrl+Shift+Enter确认(新版Excel直接按回车即可):

=MAX(IF((CriteriaRange=3)+(CriteriaRange=10), DataRange))
  • 同样可添加IFERROR处理无匹配的情况:

=IFERROR(MAX(IF((CriteriaRange=3)+(CriteriaRange=10), DataRange)), "无符合条件的数据")

## 二、VBA解决方案
### 1. 自定义函数(可直接在单元格调用)
按下`Alt+F11`打开VBA编辑器,插入模块后粘贴以下代码:
```vba
Function GetMaxMatchingValue(DataRng As Range, CriteriaRng As Range) As Variant
    ' 检查两个区域大小是否一致
    If DataRng.Rows.Count <> CriteriaRng.Rows.Count Or _
       DataRng.Columns.Count <> CriteriaRng.Columns.Count Then
        GetMaxMatchingValue = "区域大小不匹配"
        Exit Function
    End If
    
    Dim cell As Range
    Dim maxVal As Double
    Dim hasMatch As Boolean
    
    maxVal = -1E+307 ' 初始化极小值
    hasMatch = False
    
    ' 遍历条件矩阵每个单元格
    For Each cell In CriteriaRng
        Dim dataCell As Range
        Set dataCell = DataRng.Cells(cell.Row - CriteriaRng.Row + 1, cell.Column - CriteriaRng.Column + 1)
        
        ' 判断是否符合条件
        If cell.Value = 3 Or cell.Value = 10 Then
            If dataCell.Value > maxVal Then
                maxVal = dataCell.Value
            End If
            hasMatch = True
        End If
    Next cell
    
    ' 返回结果
    If hasMatch Then
        GetMaxMatchingValue = maxVal
    Else
        GetMaxMatchingValue = "无符合条件的数据"
    End If
End Function
  • 使用方法:在单元格中输入=GetMaxMatchingValue(DataRange, CriteriaRange),替换对应的区域即可。

2. 批量处理宏

如果需要一次性处理并输出结果,可使用以下宏:

Sub CalculateMaxFromMatching()
    Dim DataRng As Range
    Dim CriteriaRng As Range
    Dim resultCell As Range
    
    ' 手动选择数据矩阵、条件矩阵和结果输出单元格
    On Error Resume Next
    Set DataRng = Application.InputBox("选择数据矩阵区域", Type:=8)
    If DataRng Is Nothing Then Exit Sub
    
    Set CriteriaRng = Application.InputBox("选择条件矩阵区域(需与数据矩阵大小一致)", Type:=8)
    If CriteriaRng Is Nothing Then Exit Sub
    
    Set resultCell = Application.InputBox("选择结果输出单元格", Type:=8)
    If resultCell Is Nothing Then Exit Sub
    On Error GoTo 0
    
    ' 检查区域大小
    If DataRng.Rows.Count <> CriteriaRng.Rows.Count Or _
       DataRng.Columns.Count <> CriteriaRng.Columns.Count Then
        resultCell.Value = "区域大小不匹配"
        Exit Sub
    End If
    
    Dim cell As Range
    Dim maxVal As Double
    Dim hasMatch As Boolean
    
    maxVal = -1E+307
    hasMatch = False
    
    For Each cell In CriteriaRng
        Dim dataCell As Range
        Set dataCell = DataRng.Cells(cell.Row - CriteriaRng.Row + 1, cell.Column - CriteriaRng.Column + 1)
        
        If cell.Value = 3 Or cell.Value = 10 Then
            If dataCell.Value > maxVal Then
                maxVal = dataCell.Value
            End If
            hasMatch = True
        End If
    Next cell
    
    If hasMatch Then
        resultCell.Value = maxVal
    Else
        resultCell.Value = "无符合条件的数据"
    End If
End Sub
  • 使用方法:按下Alt+F8运行宏,按提示选择对应的区域即可。

内容的提问来源于stack exchange,提问作者Gunawan Suwarno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:35:17