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

请求编写VBA代码:当C列存在AR时替换列内S/s为C

实现需求的VBA代码方案

下面是满足你需求的VBA代码,包含自动触发和手动执行两种方式:

1. 自动持续执行的代码(工作表事件触发)

将这段代码粘贴到目标工作表的代码窗口中(右键工作表标签→查看代码):

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim arFound As Boolean
    Dim cell As Range
    
    Set ws = Me
    ' 检测C列是否存在"AR"
    arFound = Not ws.Columns("C").Find(What:="AR", LookIn:=xlValues, LookAt:=xlWhole) Is Nothing
    
    If arFound Then
        ' 遍历C列所有单元格,替换含"S"或"s"的内容为"C"
        For Each cell In ws.Columns("C").Cells
            If Not IsEmpty(cell.Value) Then
                If InStr(1, cell.Value, "S", vbTextCompare) > 0 Then
                    cell.Value = "C"
                End If
            End If
        Next cell
    End If
End Sub

2. 手动执行的宏代码

如果需要手动触发执行,可在模块中添加这段代码:

Sub ReplaceSwithCWhenARExists()
    Dim ws As Worksheet
    Dim arFound As Boolean
    Dim cell As Range
    
    ' 指定目标工作表,可根据实际修改名称
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 检测C列是否存在"AR"
    arFound = Not ws.Columns("C").Find(What:="AR", LookIn:=xlValues, LookAt:=xlWhole) Is Nothing
    
    If arFound Then
        ' 遍历C列非空单元格,替换含"S"/"s"的内容为"C"
        For Each cell In ws.Columns("C").SpecialCells(xlCellTypeConstants)
            If InStr(1, cell.Value, "S", vbTextCompare) > 0 Then
                cell.Value = "C"
            End If
        Next cell
    End If
End Sub

代码关键说明

  • Worksheet_Change事件会在工作表内容变化时自动触发,实现“持续执行”的需求;
  • Find方法默认检测完整匹配的"AR",如果需要模糊匹配(比如单元格包含AR即可),可将LookAt:=xlWhole改为LookAt:=xlPart;
  • InStr函数配合vbTextCompare实现不区分大小写的匹配,只要单元格内容包含"S"或"s"就会被替换为"C";
  • 手动宏版本使用SpecialCells(xlCellTypeConstants)只遍历非空单元格,提升执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:51:12