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

编写VBA代码查询符合条件的最新银行交易信息

VBA解决方案:匹配姓名与IBAN并返回最新银行交易记录

完整VBA代码

以下代码可直接运行,按指定姓名(D列)和IBAN(I列)筛选出最新交易,并将结果输出到指定单元格:

Sub GetLatestTransaction()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim i As Long
    Dim targetName As String, targetIBAN As String
    Dim latestDate As Date
    Dim latestAmount As Double, latestCode As String
    
    ' 替换为你的工作表名称和表格名称
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set tbl = ws.ListObjects("Table3")
    
    ' 获取匹配条件(从D20、I20读取)
    targetName = ws.Range("D20").Value
    targetIBAN = ws.Range("I20").Value
    
    ' 初始化最新日期为极小值,确保能匹配到有效日期
    latestDate = DateSerial(1900, 1, 1)
    
    ' 遍历表格所有数据行
    For i = 1 To tbl.ListRows.Count
        With tbl.ListRows(i)
            ' 同时匹配姓名和IBAN
            If .Range(tbl.ListColumns("name").Index).Value = targetName And _
               .Range(tbl.ListColumns("IBAN").Index).Value = targetIBAN Then
                ' 更新最新交易记录
                If .Range(tbl.ListColumns("date").Index).Value > latestDate Then
                    latestDate = .Range(tbl.ListColumns("date").Index).Value
                    latestAmount = .Range(tbl.ListColumns("amount").Index).Value
                    latestCode = .Range(tbl.ListColumns("transaction_code").Index).Value
                End If
            End If
        End With
    Next i
    
    ' 输出结果到K20(日期)、L20(金额)、M20(交易码)
    If latestDate <> DateSerial(1900, 1, 1) Then
        ws.Range("K20").Value = latestDate
        ws.Range("K20").NumberFormat = "dd/mm/yyyy"
        ws.Range("L20").Value = latestAmount
        ws.Range("M20").Value = latestCode
    Else
        ws.Range("K20:M20").Value = "无匹配记录"
    End If
End Sub

代码说明

  • 对象初始化:指定目标工作表和表格,确保代码指向正确的数据区域;
  • 条件读取:从D20和I20获取需要匹配的姓名与IBAN;
  • 遍历筛选:逐行检查表格数据,同时满足姓名和IBAN匹配时,对比日期并保留最新记录的信息;
  • 结果输出:将最新交易的日期、金额、交易码输出到指定单元格,无匹配时返回提示。

关于你之前的数组公式问题

你使用的数组公式{=LOOKUP(2,1/($D$20=Table3[name]*$I$20=Table3[IBAN]),Table3[amount])}存在两处关键错误:

  1. 逻辑判断写法错误:$D$20=Table3[name]*$I$20=Table3[IBAN]缺少括号,正确的“且”关系写法应为($D$20=Table3[name])*($I$20=Table3[IBAN]),否则运算优先级会导致筛选逻辑失效;
  2. LOOKUP特性限制:LOOKUP默认依赖升序数据,而你的日期未排序,无法保证返回最晚的交易记录。

如果想用公式实现,可改用XLOOKUP+MAXIFS组合(需Excel 365/2021及以上版本支持):

' 获取最新日期
=XLOOKUP(MAXIFS(Table3[date],Table3[name],$D$20,Table3[IBAN],$I$20),Table3[date],Table3[date],"无匹配",0,2)
' 获取对应金额
=XLOOKUP(MAXIFS(Table3[date],Table3[name],$D$20,Table3[IBAN],$I$20),Table3[date],Table3[amount],"无匹配",0,2)
' 获取对应交易码
=XLOOKUP(MAXIFS(Table3[date],Table3[name],$D$20,Table3[IBAN],$I$20),Table3[date],Table3[transaction_code],"无匹配",0,2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:26