VBA如何实现判断列值大于0时将一列数据粘贴到另一列
VBA代码调整方案
原代码问题
你原有代码的核心错误是不能直接对Range("E6:E14")多单元格区域做整体值判断,多单元格区域的Value属性返回的是数组,无法直接和0做比较,同时你原有逻辑是符合条件就复制整个F列区域到G列,没有做行对应匹配。
调整后代码(新手易理解版)
用逐行遍历的逻辑,逐行判断E列值,符合条件就把对应行F列的值赋值到G列,不用剪贴板复制粘贴,运行效率更高,也不会影响你剪贴板原有内容:
Sub Carry() Dim i As Integer ' 遍历第6行到第14行 For i = 6 To 14 ' 判断当前行E列值是否大于0 If Cells(i, "E").Value > 0 Then ' 直接赋值,等价于粘贴值 Cells(i, "G").Value = Cells(i, "F").Value End If Next i End Sub
如果你需要同时复制F列的单元格格式,可以把赋值语句换成:
Cells(i, "F").Copy Destination:=Cells(i, "G")
高效版代码(适用于数据量更大的场景)
把数据读入数组处理,避免频繁操作单元格,运行速度更快:
Sub CarryFast() Dim arrE, arrF, arrG, i As Integer ' 读取对应区域数据到数组 arrE = Range("E6:E14").Value arrF = Range("F6:F14").Value ReDim arrG(1 To UBound(arrE), 1 To 1) ' 遍历数组处理逻辑 For i = 1 To UBound(arrE) If arrE(i, 1) > 0 Then arrG(i, 1) = arrF(i, 1) End If Next i ' 一次性输出结果到G列 Range("G6:G14").Value = arrG End Sub
内容的提问来源于stack exchange,提问作者Peter David
相关产品推荐
相关产品推荐

