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

Excel VBA:当VLOOKUP引用的M列单元格为空时终止Do循环

VBA循环终止问题修正

原代码的几个问题

  • 拼写错误:Wroksheets 应为 Worksheets
  • 循环条件逻辑错误:原条件判断的是M列最后一个非空单元格的行号是否为空,完全没法在遇到空白单元格时终止循环,正确逻辑是检查当前行的M列单元格内容是否为空
  • 使用Select和ActiveCell既降低执行效率,又容易因界面操作触发错误

修正后的代码

Dim ws As Worksheet
Dim currentRow As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")
currentRow = 7 ' 从第7行开始执行

Do While ws.Range("M" & currentRow).Value <> ""
    ' 直接给C列对应行写入公式,无需选中单元格
    ws.Range("C" & currentRow).FormulaR1C1 = _
        "=VLOOKUP(RC[10],'excel.xlsx'!Table46[[column1]:[column7]],7,FALSE)"
    currentRow = currentRow + 1 ' 行号自增,处理下一行
Loop

补充优化方案

如果M列中间可能存在空白单元格,但后续还有需要处理的数据,用For循环遍历更稳妥:

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")
' 获取M列最后一个非空单元格的行号
lastRow = ws.Cells(ws.Rows.Count, "M").End(xlUp).Row

' 从第7行遍历到M列最后一行
For i = 7 To lastRow
    ' 仅当M列当前行非空时,才给C列写入公式
    If ws.Range("M" & i).Value <> "" Then
        ws.Range("C" & i).FormulaR1C1 = _
            "=VLOOKUP(RC[10],'excel.xlsx'!Table46[[column1]:[column7]],7,FALSE)"
    End If
Next i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:28:25