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

如何修改Excel宏:基于字符串匹配加特殊编号条件更新单元格值

修改Excel宏以添加特殊编号条件

当前宏功能

现有Excel宏实现的功能:当同一行的「描述」单元格与「在售物料列表」中的任意字符串存在部分匹配时,将「在售状态」列的值从“0”改为“1”。

原有示例表格

物料编号描述在售状态
123Apple1
456Orange (Sale)1
456Orange0
789Banana1

在售物料列表

在售物料列表
Apple
Banana
Sale

当前宏代码

Option Explicit
Sub ChangeBool()
Dim i As Long, j As Long
Dim arrData, arrDataF, rngData As Range, rngDataF As Range
Set rngData = ActiveSheet.Range("B2").CurrentRegion
Set rngDataF = ActiveSheet.Range("F2").CurrentRegion
arrData = rngData.Value
arrDataF = rngDataF.Value
For i = LBound(arrData) + 1 To UBound(arrData)
    arrData(i, 3) = 0
    For j = LBound(arrDataF) + 1 To UBound(arrDataF)
        If InStr(1, arrData(i, 2), arrDataF(j, 1), vbTextCompare) > 0 Then
            arrData(i, 3) = 1
            Exit For
        End If
    Next j
Next i
rngData.Value = arrData
End Sub

新增需求

需要添加额外条件:若该行存在特殊编号(即「特殊编号」单元格不为空),则「描述」中必须包含“Sale”,才能将「在售状态」列设为“1”。

新增条件后的示例表格

物料编号特殊编号描述在售状态
123Apple1
456111Special Apple0
789Orange0
010222Special Orange (Sale)1
011Banana1

在售物料列表(无变化)

在售物料列表
Apple
Banana
Sale

修改后的宏代码

Option Explicit
Sub ChangeBool()
Dim i As Long, j As Long
Dim arrData, arrDataF, rngData As Range, rngDataF As Range
Dim hasSpecialCode As Boolean
Dim hasSaleMatch As Boolean

' 调整数据区域:现在包含物料编号、特殊编号、描述、在售状态列
Set rngData = ActiveSheet.Range("A2").CurrentRegion
Set rngDataF = ActiveSheet.Range("F2").CurrentRegion
arrData = rngData.Value
arrDataF = rngDataF.Value

For i = LBound(arrData) + 1 To UBound(arrData)
    arrData(i, 4) = 0 ' 在售状态列现在是第4列
    hasSpecialCode = False
    hasSaleMatch = False
    
    ' 判断是否存在特殊编号
    If Trim(arrData(i, 2)) <> "" Then
        hasSpecialCode = True
    End If
    
    ' 遍历在售物料列表,检查匹配
    For j = LBound(arrDataF) + 1 To UBound(arrDataF)
        If InStr(1, arrData(i, 3), arrDataF(j, 1), vbTextCompare) > 0 Then
            ' 如果是特殊编号行,必须匹配到Sale才生效
            If hasSpecialCode Then
                If arrDataF(j, 1) = "Sale" Then
                    hasSaleMatch = True
                End If
            Else
                ' 非特殊编号行,匹配任意列表项即可设为1
                arrData(i, 4) = 1
                Exit For
            End If
        End If
    Next j
    
    ' 特殊编号行且匹配到Sale,设为1
    If hasSpecialCode And hasSaleMatch Then
        arrData(i, 4) = 1
    End If
Next i

rngData.Value = arrData
End Sub

修改说明

  1. 数据区域调整:原宏从B2开始,现在改为从A2开始,确保包含新增的「特殊编号」列。
  2. 列索引调整:「在售状态」从原来的第3列变为第4列,对应代码中arrData(i, 4)。
  3. 新增状态变量:hasSpecialCode标记当前行是否有特殊编号,hasSaleMatch标记特殊编号行是否匹配到“Sale”。
  4. 逻辑分支处理:
    • 无特殊编号的行:保持原有逻辑,匹配任意在售列表项即设为1。
    • 有特殊编号的行:只有当描述中包含“Sale”时,才将在售状态设为1,匹配其他列表项不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:42:19