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

VBA实现工作表单元格值匹配时,如何保持当前循环单元格直到条件满足?

问题与解决:匹配两个工作表单元格值

需求

检查工作表s4中的每个单元格是否与工作表s1中的某个单元格值相同。

最初尝试的问题与代码

最初想用For Each循环实现,期望匹配条件不满足时,阻止Next c将c跳转到下一个单元格,直到条件成立。但通过MsgBox c.Value & "hiiiii"测试发现,c始终会自动跳转到下一个单元格,无法实现预期逻辑。

最初的VBA代码:

Dim s1 As Worksheet
Dim s2 As Worksheet
Dim s3 As Worksheet
Dim s4 As Worksheet

Set s1 = ThisWorkbook.Sheets("test1")
Set s2 = ThisWorkbook.Sheets("test2")
Set s3 = ThisWorkbook.Sheets("test3")
Set s4 = ThisWorkbook.Sheets("test4")

Dim l As Integer

l = 8

lastrow = s4.Range("J" & s4.Rows.count).End(xlUp).row

Set rd = s4.Range("J2:J" & lastrow)
Set rf = s1.Range("A" & l)

For Each c In rd
    MsgBox c.Value & "hiiiii"
    If rf.Value = "" Then: Exit For
    If c.Value = rf.Value Then
        s1.Range("B" & l).Value = c.Offset(, -1)
        l = 8
        Set rf = s1.Range("A" & l)
    Else
        l = l + 1
        Set rf = s1.Range("A" & l)
        Set c = c.Offset(-1, 0)
    End If
Next c

优化后的解决方案:嵌套For循环

后续调整代码结构,采用嵌套For循环实现了需求,优化后的代码如下:

Dim l As Integer
Dim i As Integer

lastrow = s4.Range("J" & s4.Rows.count).End(xlUp).row
LastRow2 = s1.Range("A" & s1.Rows.count).End(xlUp).row

l = 8
i = 8

Set rd = s4.Range("J2:J" & lastrow)
Set rf = s1.Range("A" & i)

For Each c In rd
    If c.Value <> rf.Value Then
        For i = 8 To LastRow2
            Set rf = s1.Range("A" & i)
            If rf.Value = c.Value Then
                rf.Offset(, 1).Value = c.Offset(, -1)
            End If
        Next i
    Else
        rf.Offset(, 1).Value = c.Offset(, -1)
    End If
Next c

End Sub

感谢Cyril提供的其他循环方式建议。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:41:00