Excel VBA宏:比较列单元格匹配后写入新列故障求助
VBA两列内容比对写入功能修复方案
问题根因
- 原代码中
StrComp函数比对的是单元格地址字符串(如"A1"、"C1"这类地址文本),而非单元格内存储的实际业务内容,判断条件永远无法命中,因此不会执行写入操作。
修正后可运行代码
Sub Compare() Dim i As Integer Dim j As Integer Dim RowNumberData As Long Dim RowNumberConstant As Long Dim DataVal As String Dim ConstantVal As String Dim DataRange2 As String Dim ConstantRange2 As String ' 关闭屏幕刷新提升运行效率,避免界面闪烁 Application.ScreenUpdating = False RowNumberData = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row RowNumberConstant = Sheet2.Cells(Rows.Count, 3).End(xlUp).Row For i = 1 To RowNumberConstant ' 读取C列当前行实际内容用于比对 ConstantVal = Sheet2.Range("C" & i).Value ConstantRange2 = "D" & i For j = 1 To RowNumberData ' 读取A列当前行实际内容用于比对 DataVal = Sheet2.Range("A" & j).Value DataRange2 = "B" & j ' 比对单元格实际内容而非地址 If StrComp(DataVal, ConstantVal, vbTextCompare) = 0 Then Sheet2.Range(ConstantRange2).Value = Sheet2.Range(DataRange2).Value ' 匹配到目标后直接跳出内层循环,减少无效遍历 Exit For End If Next j Next i ' 恢复屏幕刷新 Application.ScreenUpdating = True End Sub
可选优化方案
- 数据量超过1000行时,可先将两列数据全部读入VBA数组后再做比对,逐单元格读取的性能远低于数组操作。
- 可添加匹配结果计数逻辑,便于确认最终匹配成功的条数。
内容的提问来源于stack exchange,提问作者lsmetpitt
相关产品推荐
相关产品推荐

