我期待复制和粘贴某些行,如果条件得到满足。如果单元格为空,则跳到下一行。
下面的代码没有跳过空白单元格,而是将Sheet 1中的所有内容复制并粘贴到DataTable工作表。不确定为什么If 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
2条答案
按热度按时间ilmyapht1#
**(1)**你的代码缺少一个
End If
语句(关闭最后一个If
),所以它不会编译。**(2)**在写入
CellCol.Offset(0, -2)
时,您将始终复制整个CellCol
-Range(“C2:C50”)。换句话说:如果至少有一个单元格不为空,则复制整个区域。如果30个单元格不为空,则该区域将复制30次,但这没有什么区别。你(可能,我不知道你的确切逻辑)需要做的是使用
cell
:**(3)**永远不会更改目标单元格。在第一次复制之后,您将不得不移动到下一行(否则每个复制命令都将覆盖前一行)。举个例子
xxslljrj2#
有条件复制