如何用IF、VLOOKUP和MATCH函数设置Excel不匹配行字体为红色
Excel VBA 实现交易行价格校验与字体高亮
实现代码
Sub CheckTransactionPrices() Dim wsTransactions As Worksheet Dim wsContracts As Worksheet Dim lastRow As Long Dim i As Long Dim contractRate As Variant Dim transactionPrice As Double ' 指定工作表,根据你的实际表名修改 Set wsTransactions = ThisWorkbook.Worksheets("交易") Set wsContracts = ThisWorkbook.Worksheets("合同") ' 获取交易表最后一行数据 lastRow = wsTransactions.Cells(wsTransactions.Rows.Count, "A").End(xlUp).Row ' 遍历交易表数据行(假设表头在第1行,数据从第2行开始) For i = 2 To lastRow ' 重置字体颜色为默认 wsTransactions.Rows(i).Font.ColorIndex = xlAutomatic ' 获取当前行的交易价格 transactionPrice = wsTransactions.Cells(i, "C").Value ' 假设价格在C列,按需修改 ' 用VLOOKUP匹配对应合同的费率 contractRate = Application.VLookup(wsTransactions.Cells(i, "A").Value, _ wsContracts.Range("A:B"), 2, False) ' 假设合同ID在A列,费率在B列 ' 判断:无对应合同 或 价格与费率不匹配 If IsError(contractRate) Or Abs(transactionPrice - contractRate) > 0.0001 Then ' 设置整行字体为红色 wsTransactions.Rows(i).Font.Color = vbRed End If Next i End Sub
代码说明
- 工作表指定:开头的
wsTransactions和wsContracts要对应你的实际工作表名称,比如如果交易表叫"交易记录",直接修改引号里的内容即可。 - 列位置调整:代码默认合同ID在两表的A列,交易价格在交易表C列,合同费率在合同表B列,根据你的实际列位置修改单元格引用(比如把
"C"改成"D")。 - 精度处理:用
Abs(transactionPrice - contractRate) > 0.0001避免浮点数值的精度误差,不需要的话可以直接改成transactionPrice <> contractRate。 - 遍历范围:默认从第2行开始遍历,若表头在其他行,修改
For i = 2 To lastRow的起始数字。
使用步骤
- 打开目标Excel文件,按下
Alt + F11打开VBA编辑器。 - 右键点击左侧工作簿名称,选择「插入」→「模块」。
- 将上述代码粘贴到模块窗口中。
- 根据你的表格结构修改代码里的工作表名称和列位置。
- 按下
F5运行宏,或回到Excel界面,通过「开发工具」→「宏」选择CheckTransactionPrices执行。
内容的提问来源于stack exchange,提问作者Trat246
相关产品推荐
相关产品推荐

