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

修改Excel VBA代码:按姓名独立检查F-K列并填充Yes

修改VBA代码实现多列独立填充需求

原代码由@FaneDuru编写,原本用于检查H、I列,当同一姓名对应的两列均为"yes"时,自动为该姓名所有行的H、I列填充"yes"。现在需要调整代码,实现以下目标:

  • 检查范围改为F列(第6列)到K列(第11列)
  • 每列独立处理:若某姓名在某一列存在"Yes",仅为该姓名在同一列的空白行填充"Yes",不会影响其他列

修改后的VBA代码

Sub fillYesPerColumn()
    Dim sh As Worksheet, lastR As Long, arrData As Variant
    Dim col As Long, i As Long, dict As Object
    
    Set sh = ActiveSheet
    lastR = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
    '加载A列到K列的数据到数组,提升处理速度
    arrData = sh.Range("A2:K" & lastR).Value2
    
    '遍历F到K列(第6到第11列),每列单独处理
    For col = 6 To 11
        Set dict = CreateObject("Scripting.Dictionary")
        '第一步:收集当前列中存在"Yes"的姓名
        For i = 1 To UBound(arrData)
            If UCase(arrData(i, col)) = "YES" Then
                dict(arrData(i, 1)) = 1 '用字典记录符合条件的姓名
            End If
        Next i
        
        '第二步:为当前列中符合条件的姓名空白行填充"Yes"
        For i = 1 To UBound(arrData)
            If dict.Exists(arrData(i, 1)) And arrData(i, col) = "" Then
                arrData(i, col) = "Yes"
            End If
        Next i
    Next col
    
    '将处理后的数组批量写回工作表
    sh.Range("A2").Resize(UBound(arrData), UBound(arrData, 2)).Value2 = arrData
End Sub

关键改动说明

  • 列独立处理逻辑:通过循环遍历F到K列(第6到11列),每列单独创建字典记录存在"Yes"的姓名,彻底避免列之间的干扰
  • 大小写兼容:用UCase()统一判断条件,避免因大小写不一致(如"YES"/"yes"/"Yes")导致的漏判
  • 批量操作优化:全程基于数组处理,最后一次性写回工作表,相比逐单元格操作大幅提升效率
  • 精准填充规则:增加arrData(i, col) = ""的判断,仅对空白单元格填充,保留已有内容不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:57:16