编写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])}存在两处关键错误:
- 逻辑判断写法错误:
$D$20=Table3[name]*$I$20=Table3[IBAN]缺少括号,正确的“且”关系写法应为($D$20=Table3[name])*($I$20=Table3[IBAN]),否则运算优先级会导致筛选逻辑失效; - 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
相关产品推荐
相关产品推荐

