如果声明vba – 如何跳过一个单元格,如果它有一个值

我编辑了我原来的post,并给了你更多的细节。 基本上我有这样的代码:

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编码。 任何build议将不胜感激。

你不需要循环的值来find最后一行,你可以简单地从下往上来。

取代这个:

 **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)

。结束(XLup)告诉它直到数据,就像Excel中的CTRL-UP一样

这告诉我们最后一行包含数据,我们不想粘贴在这里,因为你会覆盖你的最后一行,所以:

.offset(1,0)告诉它离开它的位置一行零列。

这已经算出你需要粘贴的地址,然后我们粘贴专用。

希望有所帮助

要真正看到这个工作如何进入到VB编辑器中的立即窗口使用CTRL-G并粘贴下面的代码:

 ?Cells(Rows.Count, 2).address ?Cells(Rows.Count, 2).End(xlUp).address ?Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).address 

在每行之后按Enter键,您将看到每行添加的代码部分如何更改结果

如果你的意思是你只是想改变空的单元格,你可以使用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 

要跳过值为 Texttypes的单元格,请使用IsText

 If Not Application.IsText(cell) Then ' Do Something End If 

要仅更改仅包含数字的 ,请使用IsNumeric

 If IsNumeric(cell) Then ' Do something End If