如果满足条件,我希望复制并粘贴某些行。如果单元格为空,则跳到下一行。
下面的代码不会跳过空白单元格,而是将 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/