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

求助:完善Excel VBA单元格值双向联动逻辑(场景3-6)

Excel VBA 实现D18与E19:E24双向联动

我需要编写Excel VBA代码实现D18与E19:E24的双向联动:

  • 当D18值变化时,同步修改E19:E24的值;
  • 当E19:E24任一或全部单元格值变化时,同步修改D18的值。

已实现场景

  1. 当D18值为"NA"时,E19:E24所有单元格设为"NA"
  2. 当E19:E24中存在"NC"时,D18值设为"NC"

待实现场景

  1. 当E19:E24同时包含"C"和"NA"时,D18值设为"C"
  2. 当E19:E24同时包含"C"和"NC"时,D18值设为"NC"
  3. 当E19:E24同时包含"C"、"NA"和"NC"时,D18值设为"NC"
  4. 当E19:E24全为"C"或全为"NA"时,D18值对应设为"C"或"NA"

现有代码

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Intersect(Target, Range("D18")) Is Nothing Then
    If Not Intersect(Target, Range("E19:E24")) Is Nothing Then
        If Target.Value = "NC" Then Range("D18").Value = "NC"
    End If
Else
    'Target.Value = D18 Value
    Select Case Target.Value
        Case "NA"
            Range("E19:E24").Value = "NA"
    End Select
End If
Application.EnableEvents = True
End Sub

完整实现代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim hasNC As Boolean, hasC As Boolean, hasNA As Boolean
    Dim cell As Range
    
    Application.EnableEvents = False
    
    ' 处理D18值变化的情况
    If Not Intersect(Target, Range("D18")) Is Nothing Then
        Select Case Target.Value
            Case "NA"
                Range("E19:E24").Value = "NA"
            Case "C"
                Range("E19:E24").Value = "C"
            Case "NC"
                Range("E19:E24").Value = "NC"
        End Select
    ' 处理E19:E24区域值变化的情况
    ElseIf Not Intersect(Target, Range("E19:E24")) Is Nothing Then
        ' 初始化状态标记
        hasNC = False
        hasC = False
        hasNA = False
        
        ' 遍历区域,标记各值存在状态
        Set rng = Range("E19:E24")
        For Each cell In rng
            Select Case cell.Value
                Case "NC"
                    hasNC = True
                Case "C"
                    hasC = True
                Case "NA"
                    hasNA = True
            End Select
        Next cell
        
        ' 根据状态标记设置D18的值
        If hasNC Then
            ' 存在NC时优先级最高,覆盖场景2、4、5
            Range("D18").Value = "NC"
        ElseIf hasC And hasNA Then
            ' 同时存在C和NA,对应场景3
            Range("D18").Value = "C"
        ElseIf hasC Then
            ' 全为C,对应场景6
            Range("D18").Value = "C"
        ElseIf hasNA Then
            ' 全为NA,对应场景6
            Range("D18").Value = "NA"
        End If
    End If
    
    Application.EnableEvents = True
End Sub

代码说明

  • D18变化时:补充了"C"和"NC"的同步逻辑,确保修改D18时E19:E24能统一同步对应值;
  • E19:E24变化时:通过遍历单元格标记值的存在状态,按优先级判断D18的值:
    • "NC"优先级最高,只要存在就设置D18为"NC";
    • 无"NC"时,若同时有"C"和"NA"则设为"C";
    • 仅单一值(全C或全NA)时,对应设置D18的取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:20:31