编辑 - 如果语句vba - 如果有一个值,如何跳过单元格

时间:2015-06-26 03:16:51

标签: excel vba excel-vba if-statement skip

我已编辑原始帖子并为您提供更多详细信息。基本上我有这个代码:

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编码中自学。任何建议都将不胜感激。

2 个答案:

答案 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