我已编辑原始帖子并为您提供更多详细信息。基本上我有这个代码:
For x = 1 To 1000
If track.Cells(x, 1) = Date Then
If track.Cells(x, 2) = "EU" Then
If track.Cells(x, 3) = "ABCDE" Then
ST.Range("ABCDE").Copy
EU.Cells(41, 2).PasteSpecial
Call ActivateSheet
track.Range(Cells(x, 4), Cells(x, 9)).Copy
**For i = 42 To 1000
If EU.Cells(42 + i, 2) Then
EU.Cells(42 + 1, 2).PasteSpecial
End If
Next i**
End If
End If
End If Next x
我对代码的这一特定部分遇到了问题:
For i = 42 To 1000
If EU.Cells(42 + i, 2) Then
EU.Cells(42 + 1, 2).PasteSpecial
End If
Next i
这基本上做的是从同一工作簿上的另一个工作表复制一系列单元格,它应该将它放在另一个工作表上。现在,我遇到问题的代码会发生什么,我希望它粘贴到下面的行后粘贴第一行。还有其他方法可以达到这个目的吗?我只是开始在VBA编码中自学。任何建议都将不胜感激。
答案 0 :(得分:1)
你不需要循环这些值来找到底行,你可以一步到底从上到下。
替换这个:
**For i = 42 To 1000
If EU.Cells(42 + i, 2) Then
EU.Cells(42 + 1, 2).PasteSpecial
End If
Next i**
有了这个:
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial
工作原理:
单元格(rows.count,2)是工作表和第2列中的最后一行(现在为B1048576或过去为B65536)
.End(XLup)告诉它上升到数据,就像在Excel中的CTRL-UP一样
这告诉我们包含数据的最后一行,我们不想在此处粘贴,因为您将覆盖最后一行,所以:
.offset(1,0)告诉它从它所在的位置开始一行和零列。
这已经确定了你需要粘贴的地址,然后我们粘贴了。
希望有所帮助
要实际查看其工作原理,请使用CTRL-G转到VB编辑器中的即时窗口并粘贴以下代码:
?Cells(Rows.Count, 2).address
?Cells(Rows.Count, 2).End(xlUp).address
?Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).address
在每一行之后按Enter键,您将看到每行添加的代码部分如何改变结果
答案 1 :(得分:0)
如果您的意思是您只想更改为空的单元格,则可以使用IsEmpty()
,例如:
For Each cell In rng
If IsEmpty(cell) Then 'To alter cells containing value use If Not IsEmpty...
' Do something
End If
Next
或者,如果单元格值包含空格的可能性,您可以使用
If trim(cell & vbnullstring) = vbnullstring Then
' Do something
End If
要跳过值类型为 文字 的单元格,请使用IsText
If Not Application.IsText(cell) Then
' Do Something
End If
仅更改值 仅包含数字使用IsNumeric
If IsNumeric(cell) Then
' Do something
End If