You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA循环列引用跨工作表复制的代码修正求助

修正VBA代码中单元格引用的问题

嘿,我来帮你搞定这个单元格引用的问题!你遇到的核心问题是直接用Worksheets("CSV").c无法正确指向目标单元格,因为VBA不能直接把变量c拼接在工作表对象后面来引用单元格。我们可以通过获取c的行号和列号,精准定位CSV工作表中对应的位置。

关键行修正

把Set a = Worksheets("CSV").c改成下面这行:

Set a = Worksheets("CSV").Cells(c.Row, c.Column)

c.Row会获取当前循环单元格的行号,c.Column获取列号,Cells(row, column)就能准确指向CSV工作表中与c同位置的单元格了。

完整修正后的代码

Sub et()
 Dim c As Range
 Dim a As Range
 Worksheets("CSV2").Select
 '//loop it
 For Each c In Range(Range("E2"), Range("E2").End(xlDown))
 Set a = Worksheets("CSV").Cells(c.Row, c.Column) '// 已修正:通过行/列号定位同位置单元格
 '// 希望从a直接复制到c,保持现有代码格式
 If c.Value > 0 And c.Value < 3 Then '// 这里顺便修正:原代码的&是字符串连接符,逻辑判断要用And
 Sheets("CSV").Select
 a.Copy'// 复制CSV工作表的对应单元格
 Sheets("CSV2").Select
 c.PasteSpecial Paste:=xlPasteValues'// 粘贴到CSV2工作表的对应单元格
 End If
 Next
 Worksheets("RETURN").Select
End Sub

额外小提示

顺便帮你修正了一个逻辑细节:原代码里的If c.Value > 0 & c.Value < 3中的&是字符串连接符,判断多个条件应该用And,不然会导致条件判断逻辑出错哦。

如果想让代码更高效,其实可以去掉所有Select操作,直接通过工作表对象引用单元格(避免频繁切换工作表的开销),优化后的代码如下:

Sub et_optimized()
 Dim c As Range
 Dim a As Range
 With Worksheets("CSV2")
 For Each c In .Range(.Range("E2"), .Range("E2").End(xlDown))
 Set a = Worksheets("CSV").Cells(c.Row, c.Column)
 If c.Value > 0 And c.Value < 3 Then
 c.Value = a.Value '// 直接赋值,比复制粘贴更高效
 End If
 Next
 End With
 Worksheets("RETURN").Select
End Sub

内容的提问来源于stack exchange,提问作者Brian D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:55:03