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
相关产品推荐
相关产品推荐

