我如何使excel vba移动到for循环中的下一个单元格?

我在这里有一个macros的代码,它执行一些数据从一个工作表到另一个工作表。 现在这个代码做了我希望它做的90%。 问题是,如果它遇到一个没有任何东西的源单元格(因此Len(cellVal) = 0cellVal = ""它会覆盖目标单元格。

你会看到在第二个ElseIf块有一个评论。 现在它没有声明,但是如果语句的计算结果为true,即源单元格中没有任何内容,我希望Excel移动到下一个源单元格,而不修改目标单元格的内容。

任何关于如何完成的想法?

富兰克林

 For i = 7 To endPointFlash Dim cellVal As String cellVal = Cells(i, "G") If (Len(cellVal)) > 0 Then RawData.Activate ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then ' need to tell excel to do nothing and move to the next cell End If For j = 1 To endPointRaw If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then val2 = Mid(Cells(j, "A"), 1, Len(cellVal)) val3 = Cells(j, "D") Flash.Cells(i, "H").Value = val3 Exit For Else: Flash.Cells(i, "H").Value = 0 End If Next j Flash.Activate Next i 

要非常清楚和明确,我会写这个:

 Dim cellVal As String For i = 7 To endPointFlash cellVal = Flash.Cells(i, "G") If Len(cellVal) = 0 Then ' Do nothing. Else For j = 1 To endPointRaw If cellVal = Mid(RawData.Cells(j, "A"), 1, Len(cellVal)) Then val2 = Mid(RawData.Cells(j, "A"), 1, Len(cellVal)) val3 = RawData.Cells(j, "D") Flash.Cells(i, "H").Value = val3 Exit For Else Flash.Cells(i, "H").Value = 0 End If Next j End If Next i 

在这里读者很清楚,一个包含空string的单元格不应该导致任何操作。 在所有其他情况下执行以下操作。

另外我不会来回激活每张纸。 这样做会使代码变慢(并使屏幕闪烁)。 相反,我使用正确的工作表名称来识别每个对Cells调用 再次,这使得你得到的东西非常明确。

注意: cellVal = ""必然意味着Len(cellVal)) = 0 ,所以不需要在你的条件中写入。

喜欢这个:

 For i = 7 To endPointFlash Dim cellVal As String cellVal = Cells(i, "G") If (Len(cellVal)) > 0 Then RawData.Activate ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then ' need to tell excel to do nothing and move to the next cell Else For j = 1 To endPointRaw If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then val2 = Mid(Cells(j, "A"), 1, Len(cellVal)) val3 = Cells(j, "D") Flash.Cells(i, "H").Value = val3 Exit For Else: Flash.Cells(i, "H").Value = 0 End If Next j End If Flash.Activate Next i 

或者像这样:

 For i = 7 To endPointFlash Dim cellVal As String cellVal = Cells(i, "G") If (Len(cellVal)) > 0 Then RawData.Activate ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then ' need to tell excel to do nothing and move to the next cell Goto NextLoop End If For j = 1 To endPointRaw If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then val2 = Mid(Cells(j, "A"), 1, Len(cellVal)) val3 = Cells(j, "D") Flash.Cells(i, "H").Value = val3 Exit For Else: Flash.Cells(i, "H").Value = 0 End If Next j NextLoop: Flash.Activate Next i 

你可以试试这个(不知道你的Flash.Activate是否应该在单元格为空的时候执行 – 如果是这样的话,把它移到End If下面):

 Dim cellVal As String For i = 7 To endPointFlash cellVal = Cells(i, "G") If cellVal <> "" Then RawData.Activate For j = 1 To endPointRaw If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then val2 = Mid(Cells(j, "A"), 1, Len(cellVal)) val3 = Cells(j, "D") Flash.Cells(i, "H").Value = val3 Exit For Else Flash.Cells(i, "H").Value = 0 End If Next j Flash.Activate End If 'Else cell is empty: do nothing Next i