请求合并Excel宏:新增列+VLOOKUP匹配+按ID设置行格式
合并VBA宏:新增Name列、填充匹配公式并设置行颜色
没问题,我已经把你需要的两个宏合并成一个完整的过程,同时加入了VLOOKUP公式自动填充的逻辑,还完整保留了你原来的行颜色设置规则。下面是可以直接使用的代码:
Sub ProcessSheet1() Dim ws As Worksheet Dim lRow As Long Dim rngIDHeader As Range Dim cell As Range Dim cell_colour As Integer ' 指定操作的工作表为Sheet1,避免当前工作表切换时出错 Set ws = ThisWorkbook.Worksheets("Sheet1") ' ---------------------- 第一步:新增Name列并添加VLOOKUP公式 ---------------------- With ws ' 精准查找ID列的表头(完全匹配) Set rngIDHeader = .Rows(1).Find(what:="ID", After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole) ' 如果成功找到ID列 If Not rngIDHeader Is Nothing Then ' 在ID列右侧插入新列 rngIDHeader.Offset(0, 1).EntireColumn.Insert ' 设置新列表头为Name rngIDHeader.Offset(0, 1).Value = "Name" ' 获取ID列的最后一行数据行号 lRow = .Range("E" & .Rows.Count).End(xlUp).Row ' 批量填充VLOOKUP公式到Name列,比逐个单元格写入更高效 .Range(rngIDHeader.Offset(1, 1), .Cells(lRow, rngIDHeader.Column + 1)).Formula = _ "=VLOOKUP(E2,Data!A:B,2,FALSE)" End If ' ---------------------- 第二步:按ID设置整行颜色 ---------------------- ' 遍历ID列的所有数据行(从第2行到最后一行) For Each cell In .Range("E2:E" & lRow) Select Case cell.Value Case "x12340" cell_colour = 2 Case "x12341" cell_colour = 6 cell.EntireRow.Font.ColorIndex = 4 Case "x12342" cell_colour = 6 cell.EntireRow.Font.ColorIndex = 2 Case "x12343" cell_colour = 7 cell.EntireRow.Font.ColorIndex = 2 Case "x12344" cell_colour = 8 cell.EntireRow.Font.ColorIndex = 2 Case "x12345" cell_colour = 9 cell.EntireRow.Font.ColorIndex = 2 Case Else cell_colour = 1 cell.EntireRow.Font.ColorIndex = 4 End Select cell.EntireRow.Interior.ColorIndex = cell_colour Next cell End With End Sub
关键优化说明
- 明确绑定操作工作表为
Sheet1,防止切换到其他工作表时执行错误 - 批量填充VLOOKUP公式,大幅提升运行效率(避免循环写入单个单元格)
- 加入ID列存在性判断,防止找不到表头时触发报错
- 完整保留了你原来所有的行背景色、字体颜色设置规则
使用方法
- 打开目标Excel工作簿,按下
Alt + F11打开VBA编辑器 - 右键点击工作簿名称,选择「插入」→「模块」
- 将上述代码粘贴到新模块中
- 回到Excel界面,你可以直接运行这个宏,或者给它绑定一个按钮方便触发
内容的提问来源于stack exchange,提问作者Harsha Reddy
相关产品推荐
相关产品推荐

