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

VBA多列空值判断与数组匹配赋值问题求助

解决A、C列空值时B列匹配赋值的VBA实现

核心判断条件实现

要判断某一行的A列和C列单元格均为空,同时B列有有效值,推荐用这两种严谨的判断逻辑:

  • 针对真正空单元格的判断:
    If IsEmpty(Range("A" & i)) And IsEmpty(Range("C" & i)) And Not IsEmpty(Range("B" & i)) Then
    
  • 能排除单元格仅含空格情况的判断(更稳妥):
    If Len(Trim(Range("A" & i).Value)) = 0 And Len(Trim(Range("C" & i).Value)) = 0 And Len(Trim(Range("B" & i).Value)) > 0 Then
    

完整实现代码

结合你给出的数组,提供两种匹配赋值方式,按需选择即可:

方式一:循环遍历数组匹配

Sub AssignDValue()
    Dim Faelle() As Variant: Faelle = VBA.Array("a", "b", "c", "d", "e")
    Dim Werte() As Variant: Werte = VBA.Array("1", "2", "3", "4", "5")
    Dim lastRow As Long
    Dim i As Long, j As Long
    
    ' 获取数据最后一行,避免遍历无意义的空行
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row
    
    For i = 1 To lastRow
        ' 执行A、C空且B非空的判断
        If Len(Trim(Range("A" & i).Value)) = 0 And Len(Trim(Range("C" & i).Value)) = 0 And Len(Trim(Range("B" & i).Value)) > 0 Then
            ' 遍历Faelle数组查找匹配项
            For j = LBound(Faelle) To UBound(Faelle)
                If Range("B" & i).Value = Faelle(j) Then
                    Range("D" & i).Value = Werte(j)
                    Exit For ' 找到匹配就退出循环,提升运行效率
                End If
            Next j
        End If
    Next i
End Sub

方式二:用Application.Match快速匹配(更简洁)

Sub AssignDValue_Match()
    Dim Faelle() As Variant: Faelle = VBA.Array("a", "b", "c", "d", "e")
    Dim Werte() As Variant: Werte = VBA.Array("1", "2", "3", "4", "5")
    Dim lastRow As Long
    Dim i As Long, matchIndex As Variant
    
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row
    
    For i = 1 To lastRow
        If Len(Trim(Range("A" & i).Value)) = 0 And Len(Trim(Range("C" & i).Value)) = 0 And Len(Trim(Range("B" & i).Value)) > 0 Then
            ' 用Match定位B列值在Faelle数组中的位置
            matchIndex = Application.Match(Range("B" & i).Value, Faelle, 0)
            ' 检查是否找到有效匹配,避免报错
            If Not IsError(matchIndex) Then
                Range("D" & i).Value = Werte(matchIndex - 1) ' 注意数组是0基索引,Match返回1基索引,需减1
            End If
        End If
    Next i
End Sub

关于你提到的Kol数组

你声明的Kol = VBA.Array(1,2,3)如果是想灵活指定A、B、C列的列号,可以保留并替换代码里的列引用:比如把Range("A" & i)改成Cells(i, Kol(0)),Range("B" & i)改成Cells(i, Kol(1)),这样后续要调整列的话,直接修改Kol数组即可,不用改动多处代码。

效果验证

运行代码后,示例数据的第2行B列b会匹配到Werte数组的2,第4行B列e会匹配到5,和你给出的示例预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:03:18