如何使用LEFT函数提取单元格区域字符子集并粘贴到另一列?
你可以直接通过批量填充公式或者数组处理的方式实现整列提取,不需要逐单元格循环也能高效运行:
方法1:批量填充公式(代码最简,适合中小数据量)
直接给W列整列写入提取前4位的公式,还可以按需转成值避免后续和A列联动变动,代码如下:
Sub CleanData() Dim lastRow As Long ' 获取A列最后一行有数据的行号,避免处理空行浪费性能 lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 保留原有排序逻辑 Range("A:A").Sort Key1:=Range("A:A"), Order1:=xlDescending, Header:=xlYes Range("W1").Value = "Receipt Number" ' 给W2到最后一行批量写入提取公式 Range("W2:W" & lastRow).Formula = "=LEFT(A2,4)" ' 可选:不需要和A列联动的话,添加下面这行把公式转成纯数值 Range("W2:W" & lastRow).Value = Range("W2:W" & lastRow).Value End Sub
方法2:数组处理(适合万行以上大数据量,运行速度更快)
如果你的CSV数据量很大,用数组一次性读写会比填充公式效率高很多:
Sub CleanData() Dim lastRow As Long, i As Long Dim arrA As Variant, arrW As Variant lastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("A:A").Sort Key1:=Range("A:A"), Order1:=xlDescending, Header:=xlYes Range("W1").Value = "Receipt Number" ' 把A列数据读入数组 arrA = Range("A2:A" & lastRow).Value ' 初始化结果数组 ReDim arrW(1 To UBound(arrA), 1 To 1) ' 遍历数组提取前4位 For i = 1 To UBound(arrA) arrW(i, 1) = Left(arrA(i, 1), 4) Next i ' 把结果一次性写入W列 Range("W2:W" & lastRow).Value = arrW End Sub
两种方法都会自动匹配A列的实际数据行数,不会处理多余空行,运行完成后就能直接在W列拿到所有收据ID的前4位编号。
内容的提问来源于stack exchange,提问作者Lucas Biggio
相关产品推荐
相关产品推荐

