Excel VBA遍历列以将非空白复制并粘贴到其他3列?
Posted
技术标签:
【中文标题】Excel VBA遍历列以将非空白复制并粘贴到其他3列?【英文标题】:Excel VBA Loop through Column to Copy and Paste Non Blanks to 3 other Columns? 【发布时间】:2019-05-29 17:22:30 【问题描述】:我是 Excel VBA 新手,遇到了障碍。当我运行它时我没有收到任何错误,我什至不确定从哪里开始......
我想搜索 C 列,如果存在非空白值,则将该值复制到同一工作表的 (D、G、I) 列。我会在第 4 行开始搜索。
我已尝试单步执行代码,我很确定我的错误是 currVal = ws.Cells(i, "c")。当我逐步完成时,Excel 表上没有任何反应(没有复制或粘贴单元格)。
非常感谢任何帮助!我整个上午都在看这个。
Sub Copy()
Dim lastC As Integer
Dim i As Integer
Dim j As Integer
Dim currVal As String
Dim ws As Worksheet
Set ws = ActiveSheet
lastC = ws.Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To lastC
currVal = ws.Cells(i, "c")
If ws.Cells(i, 1).Value <> "" Then
currVal = ws.Cells(i, "D")
currVal = ws.Cells(i, "G")
currVal = ws.Cells(i, "I")
End If
Next i
End Sub
实际结果是什么都没有发生(至少我可以看到)并且没有错误给我一个开始寻找的地方!
预期结果会将其复制到另外 3 个列中。结果是一个实际的公式。这个公式是我需要复制的。
5/27/2019 9:39 --- 价值
='15_2019-02_003.CSV'!$A$2 -- 公式
一旦从原始 CSV 文件中提取值,我已经解决了公式更新和删除对 CSV 文件的引用的问题。这段代码的目的只是搜索空白和复制/粘贴。Picture of Excel WS
【问题讨论】:
您正在将这些单元格中的值分配给变量...我认为您应该反过来做,即:ws.Cells(i, "D").value = currVal
这个lastC = ws.Cells(Rows.Count, 1).End(xlUp).Row
,如果你不符合Rows.Count
的条件,它会自动成为ActiveSheet.Rows.Count
...在这种情况下可能没有任何区别,但请记住,它应该成为lastC = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
哦,感谢您的快速回复。当我改变它时,宏运行!是的,第一次运行。但是现在,它删除了 C 列中的内容,并且没有复制任何内容?
你也交换了currVal = ws.Cells(i, "c")
吗?很好......只是您想要将值写回单元格的其他 3 个,它应该是 cell = value
,而不是 value = cell
。
你是救生员!是的,这正是我做错的!非常感谢你的帮助! ;)
【参考方案1】:
添加到 cmets,这就是我编写特定代码的方式,也许它会有所帮助:
Sub Copy()
Dim ws As Worksheet: Set ws = ActiveSheet
Dim lastC As Long: lastC = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim R As Long 'I like to use R (rows) & C (cols), just because makes it more readable (for me)
For R = 4 To lastC
With ws
If .Cells(R, "A").Value <> "" Then
.Cells(R, "D") = .Cells(R, "C").Value
.Cells(R, "G") = .Cells(R, "C").Value
.Cells(R, "I") = .Cells(R, "C").Value
End If
End With
Next R
End Sub
PS:.Cells
引用我更喜欢数字而不是字母,但在这种情况下使用字母是可以理解的。仅用于最佳实践 - 出于可读性考虑,不应混合使用它们。
【讨论】:
如果您需要粘贴公式?有没有一种简单的方法来 xlpaste.formulas?而且我真的很喜欢 R 的行,更有意义!感谢您为此提供的所有帮助。 您可以将range.Value
用于值,range.formula
用于公式等。以上是关于Excel VBA遍历列以将非空白复制并粘贴到其他3列?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Excel VBA 实现复制 粘贴 和保存,并自动运行VBA