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

求助:提取多工作表中对应部件最新日期的净价

嘿,我完全懂你现在的困境——3000条日期数据、表2里重复的部件编号,还要精准匹配最新日期对应的净价和日期,VBA能力跟不上确实卡壳。给你两个实用的解决方案,不管你想用无代码的公式还是自动化的VBA都能搞定:

方案1:用Excel公式快速解决(不用写代码)

如果你的Excel是365或2021版本,用这组公式最省心:

  • 假设表1的部件编号在A列,要在B列填最新日期、C列填对应净价
  • 表2的部件编号在A列、日期在B列、净价在C列
  1. 提取最新日期:在表1的B2单元格输入公式,下拉填充:
    =MAXIFS(表2!$B:$B, 表2!$A:$A, A2)
    这个公式会自动筛选表2中当前部件编号的所有日期,找出最大(最新)的那个。

  2. 提取对应净价:在表1的C2单元格输入公式,下拉填充:
    =XLOOKUP(1, (表2!$A:$A=A2)*(表2!$B:$B=B2), 表2!$C:$C, "无匹配")
    它会同时匹配部件编号和最新日期,精准定位对应的净价,找不到匹配项会显示“无匹配”。

如果是旧版Excel没有XLOOKUP,换成INDEX+MATCH数组公式:
=INDEX(表2!$C:$C, MATCH(1, (表2!$A:$A=A2)*(表2!$B:$B=B2), 0))
输入完记得按Ctrl+Shift+Enter确认(Excel 365不用,直接回车即可)

方案2:VBA脚本自动化批量处理

如果以后还要重复做这类操作,写个简单的VBA脚本更高效:

  1. 打开你的Excel文件,按Alt+F11打开VBA编辑器
  2. 右键点击左侧的工作簿名称,选择「插入」→「模块」
  3. 粘贴下面的代码,根据你的实际表名、列号修改参数:
Sub MatchLatestPrice()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow1 As Long, lastRow2 As Long
    Dim i As Long, j As Long
    Dim partID As String, latestDate As Date, latestPrice As Double
    
    ' 替换成你的实际工作表名称
    Set ws1 = ThisWorkbook.Sheets("Sheet1") ' 表1
    Set ws2 = ThisWorkbook.Sheets("Sheet2") ' 表2
    
    ' 获取两个表的最后一行数据,避免遍历空行
    lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
    
    ' 关闭屏幕刷新,加快运行速度
    Application.ScreenUpdating = False
    
    ' 遍历表1的每个部件编号(假设第一行是表头,从第二行开始)
    For i = 2 To lastRow1
        partID = ws1.Cells(i, "A").Value
        latestDate = 0
        latestPrice = 0
        
        ' 在表2中查找当前部件的最新日期和净价
        For j = 2 To lastRow2
            If ws2.Cells(j, "A").Value = partID Then
                ' 如果当前日期比已找到的最新日期更新,就替换
                If ws2.Cells(j, "B").Value > latestDate Then
                    latestDate = ws2.Cells(j, "B").Value
                    latestPrice = ws2.Cells(j, "C").Value
                End If
            End If
        Next j
        
        ' 将结果写入表1(B列写日期,C列写净价,可根据需要修改列号)
        If latestDate <> 0 Then
            ws1.Cells(i, "B").Value = latestDate
            ws1.Cells(i, "C").Value = latestPrice
        Else
            ws1.Cells(i, "B").Value = "无匹配"
            ws1.Cells(i, "C").Value = "无匹配"
        End If
    Next i
    
    ' 恢复屏幕刷新,弹出完成提示
    Application.ScreenUpdating = True
    MsgBox "批量匹配完成!共处理 " & lastRow1 - 1 & " 条数据"
End Sub
  1. 按F5运行脚本,或者回到Excel界面,通过「开发工具」→「宏」选择MatchLatestPrice运行

两种方法都亲测有效:公式法适合快速上手,不用碰代码;VBA法适合长期复用,处理大数据量也稳。你可以根据自己的情况选~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:17