如何修改VBA代码遍历有色单元格并按Product列值更新内容?
现有如下VBA代码,可根据条件修改H2:K2区域的值,但需要实现遍历所有有色单元格。需通过选中所有有色单元格设置处理范围,并与Product列中的值进行匹配判断。每次运行宏时,有色单元格的范围不固定,且待匹配值所在的列也不一定是P列。若值不匹配If语句中的任何条件,则不对单元格进行修改。现有代码如下:
Sub Turn_Live_Digital() If Range("p2").Value = "ADSHEL LIVE" Or _ Range("p2").Value = "ASDA LIVE" Or _ Range("p2").Value = "CC DIGITAL MALLS" Or _ Range("p2").Value = "CCB DIGITAL" Or _ Range("p2").Value = "MALLS XL" Or _ Range("p2").Value = "SAINSBURYS LIVE" Or _ Range("p2").Value = "SOCIALITE" Or _ Range("p2").Value = "STATION LIVE" Or _ Range("p2").Value = "STORM DIGITAL" _ Then Range("h2:k2").Value = "Digital" End If End Sub不知从何入手,恳请提供帮助。
解决方案
核心逻辑调整
- 让用户手动选择待处理的有色单元格范围和Product列的位置,适配范围和列不固定的场景
- 遍历选中的每个单元格,检查其所在行的Product值是否在目标列表中
- 符合条件则修改该行H-K列的值,不符合则跳过
最终VBA代码
Sub Turn_Live_Digital() Dim targetCells As Range Dim productCol As Integer Dim cell As Range Dim productValue As String Dim validProducts As Variant ' 定义需要匹配的产品值集合,后续可直接修改数组内容 validProducts = Array("ADSHEL LIVE", "ASDA LIVE", "CC DIGITAL MALLS", _ "CCB DIGITAL", "MALLS XL", "SAINSBURYS LIVE", _ "SOCIALITE", "STATION LIVE", "STORM DIGITAL") On Error Resume Next ' 弹窗让用户选择需要处理的有色单元格范围 Set targetCells = Application.InputBox("请选中需要处理的有色单元格范围", Type:=8) If targetCells Is Nothing Then Exit Sub ' 用户取消选择则退出 ' 弹窗让用户选择Product列的任意单元格,确定匹配值所在列 productCol = Application.InputBox("请选择Product列中的任意一个单元格", Type:=8).Column On Error GoTo 0 ' 遍历每个选中的单元格 For Each cell In targetCells ' 获取当前行对应Product列的值 productValue = cell.EntireRow.Cells(1, productCol).Value ' 判断值是否在有效列表中,Match找到则返回索引,未找到返回错误 If Not IsError(Application.Match(productValue, validProducts, 0)) Then ' 修改当前行H到K列的值为"Digital" cell.EntireRow.Range("H1:K1").Value = "Digital" End If Next cell End Sub
使用说明
- 运行宏后,先选中所有需要处理的有色单元格,点击确定
- 再点击Product列中的任意一个单元格,确定匹配值所在列
- 宏会自动遍历每个选中单元格,检查对应行的Product值,符合条件则修改H-K列
内容的提问来源于stack exchange,提问作者FionaP
相关产品推荐
相关产品推荐

