excel - 有条件复制粘贴

标签 excel vba if-statement copy paste

如果满足条件,我希望复制并粘贴某些行。如果单元格为空,则跳到下一行。

下面的代码不会跳过空白单元格,而是将 Sheet1 中的所有内容复制并粘贴到 DataTable 工作表中。不确定为什么 如果 Status <> ""没有过滤掉空格。

Sub copypaste()
Dim Cell As Range
Dim CellCol As Range
Dim PasteCell As Range
Dim PasteCellAmount As Range
Dim DataTable As Worksheet

Set DataTable = Worksheets("Data")
Set CellCol = Sheet1.Range("C2:C50")

For Each Cell In CellCol
    'paste cells into blank row
    If DataTable.Range("A2") = "" Then
       Set PasteCell = DataTable.Range("A2")
       Set PasteCellAmount = DataTable.Range("C2")
    Else
       Set PasteCell = DataTable.Range("A2").Offset(1, 0)
       Set PasteCellAmount = DataTable.Range("C2").Offset(1, 0)
    End If
    
    'copy cell in Column A and C in the row with value
    If Cell <> "" Then 
    CellCol.Offset(0, -2).Copy PasteCell
    CellCol.Offset(0, 0).Copy PasteCellAmount
    
    Next cell

End sub

最佳答案

(1) 您的代码缺少 End If 语句(用于关闭最后一个 If),因此无法编译。

(2) 当您编写 CellCol.Offset(0, -2) 时,您将始终复制整个 CellCol-Range ( “C2:C50”)。换句话说:如果至少一个单元格不为空,则复制整个范围。如果 30 个单元格不为空,则该范围将复制 30 次,但这没有什么区别。
您(可能,我不知道您的确切逻辑)需要做的是使用 cell:

cell.Offset(0, -2).Copy PasteCell
cell.Offset(0, 0).Copy PasteCellAmount

(3) 您永远不会更改目标单元格。在第一个复制之后,您必须移动到下一行(否则每个复制命令都会覆盖前一个)。例如

cell.Offset(0, -2).Copy PasteCell
cell.Offset(0, 0).Copy PasteCellAmount
Set PasteCell = PasteCell.Offset(1, 0)
Set PasteCellAmount = PasteCellAmount.Offset(1, 0)

关于excel - 有条件复制粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76199791/

相关文章:

excel - 通过外部引用(链接)将数据更新到另一个工作簿中的表

excel - XLSXWriter 和 Excel "=FILTER()"功能?

excel - 如何在VB脚本中设置延迟让Excel更新数据

c++ - 在 if 语句中声明类变量

excel - 打开具有完整网络名称的文件会更改工作表名称

vba - 在表单中调用子程序

excel - VBA:如何从右键单击上下文菜单中禁用某些选项

excel - 不断收到运行时错误 '5' VBA,这是什么问题?

php - 警告 : filesize function failing to operate

java - 如何从我的 validator 类中消除所有 "if"语句