Excel VBA技术问询:B列匹配特定文本后如何正确写入L列对应行
解决Excel VBA匹配行对应写入L列的问题
嘿,我来帮你搞定这个问题!你的代码现在没法在匹配行的L列写入对应内容,核心问题是每次匹配都固定操作L2单元格,或者注释的AutoFill会填充整列,所以没法对应到匹配的行。
原代码问题分析
- 当
Cells(i, "B")匹配到"string_1"时,你始终选择L2单元格写入内容,所以不管多少行匹配,只有L2会被修改 - 注释的
AutoFill代码会把L2到最后一行都填充成相同内容,没法实现"匹配行对应写入"的需求
修正后的代码
Sub teste() Application.ScreenUpdating = False ' 关闭屏幕更新,提升运行速度 Dim lastRow As Long lastRow = Cells(Rows.Count, "B").End(xlUp).Row ' 获取B列最后一行行号 For i = lastRow To 1 Step -1 ' 从最后一行往上循环 If Cells(i, "B").Value = "string_1" Then ' 直接给当前匹配行的L列写入内容,不用Select/ActiveCell Cells(i, "L").Value = "some_text_1" End If Next i Application.ScreenUpdating = True ' 恢复屏幕更新 End Sub
关键修改点说明
- 去掉Select和ActiveCell:VBA里尽量避免使用
Select和ActiveCell,直接通过单元格引用操作,既高效又能避免选择错误的单元格 - 动态指定目标单元格:用
Cells(i, "L")来定位当前循环行的L列单元格,这样哪一行的B列匹配成功,就给哪一行的L列写入内容 - 恢复屏幕更新:最后记得打开
Application.ScreenUpdating = True,不然Excel界面会一直处于不更新的状态
如果需要匹配多个不同的文本并写入不同内容,可以扩展条件判断,比如:
If Cells(i, "B").Value = "string_1" Then Cells(i, "L").Value = "some_text_1" ElseIf Cells(i, "B").Value = "string_2" Then Cells(i, "L").Value = "some_text_2" End If
内容的提问来源于stack exchange,提问作者dapovoa
相关产品推荐
相关产品推荐

