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
相关产品推荐
相关产品推荐

