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

求Excel公式/VBA代码:提取A列重复项对应C列最大值的A:C数据

提取重复项对应C列最大值的整行数据

公式解法

适用于Excel 365/2021(支持动态数组)

  1. 获取A列唯一值:在空白列(比如D列)输入=UNIQUE(A2:A100)(替换A2:A100为你的实际数据范围,避免整列引用拖慢效率),自动生成所有不重复的A列值。
  2. 匹配对应C列最大值:在E2输入=MAXIFS(C2:C100,A2:A100,D2),下拉填充,得到每个唯一A值对应的最大Coverage。
  3. 匹配对应B列描述:在F2输入=XLOOKUP(1,(A2:A100=D2)*(C2:C100=E2),B2:B100),下拉填充即可获取对应描述。

适用于旧版Excel(无动态数组)

用数组公式实现,选中需要输出结果的A、B、C列对应单元格,输入:

=INDEX(A:C,MATCH(1,(A:A=D2)*(C:C=MAXIFS(C:C,A:A,D2)),0),COLUMN(A:C))

按Ctrl+Shift+Enter完成数组公式输入,下拉填充即可。

你之前的公式失效原因:错误将B列作为取最大值的目标列,且未同时匹配A列条件与C列最大值的对应关系,导致逻辑偏差。

VBA解法

直接运行以下代码,会自动生成新工作表存放结果:

Sub ExtractMaxCoverage()
    Dim ws As Worksheet, newWs As Worksheet
    Dim lastRow As Long, i As Long
    Dim dict As Object
    Dim key As Variant, currentCoverage As Double
    
    Set ws = ActiveSheet
    Set newWs = ThisWorkbook.Sheets.Add(After:=ws)
    newWs.Name = "MaxCoverageResult"
    
    ' 复制表头
    newWs.Range("A1:C1").Value = ws.Range("A1:C1").Value
    
    Set dict = CreateObject("Scripting.Dictionary")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历数据,记录每个A列值的最大Coverage及对应B值
    For i = 2 To lastRow
        key = ws.Cells(i, "A").Value
        currentCoverage = ws.Cells(i, "C").Value
        
        If Not dict.Exists(key) Then
            dict.Add key, Array(ws.Cells(i, "B").Value, currentCoverage)
        Else
            If currentCoverage > dict(key)(1) Then
                dict(key) = Array(ws.Cells(i, "B").Value, currentCoverage)
            End If
        End If
    Next i
    
    ' 写入结果
    i = 2
    For Each key In dict.Keys
        newWs.Cells(i, "A").Value = key
        newWs.Cells(i, "B").Value = dict(key)(0)
        newWs.Cells(i, "C").Value = dict(key)(1)
        i = i + 1
    Next key
    
    MsgBox "提取完成,结果已保存到新工作表"
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:10