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

如何用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的起始数字。

使用步骤

  1. 打开目标Excel文件,按下Alt + F11打开VBA编辑器。
  2. 右键点击左侧工作簿名称,选择「插入」→「模块」。
  3. 将上述代码粘贴到模块窗口中。
  4. 根据你的表格结构修改代码里的工作表名称和列位置。
  5. 按下F5运行宏,或回到Excel界面,通过「开发工具」→「宏」选择CheckTransactionPrices执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:24:17