如何使excel vba移动到for循环中的下一个单元格?
我这里有一个宏的代码,它从一个工作表到另一个工作表进行一些数据拾取和放置。现在这段代码完成了我希望它完成的90%。问题是,如果它遇到一个没有任何内容的源单元格(因此如何使excel vba移动到for循环中的下一个单元格?,excel,vba,Excel,Vba,我这里有一个宏的代码,它从一个工作表到另一个工作表进行一些数据拾取和放置。现在这段代码完成了我希望它完成的90%。问题是,如果它遇到一个没有任何内容的源单元格(因此Len(cellVal)=0和cellVal=“”),它将覆盖目标单元格 您将看到,在第二个ElseIf块中有一条注释。现在它不进行任何签名,但如果该语句的计算结果为true,即源单元格中没有任何内容,则我希望Excel在不修改目标单元格内容的情况下移到下一个源单元格 关于如何实现这一点有什么想法吗 富兰克林 For i = 7 To
Len(cellVal)=0
和cellVal=“”
),它将覆盖目标单元格
您将看到,在第二个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
像这样:
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
为了非常清楚和明确,我将写下:
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
在这里,读者非常清楚,包含空字符串的单元格不应导致任何操作;在所有其他情况下,请执行以下操作
此外,我不会来回激活每个工作表。这样做会使您的代码速度变慢(并使屏幕闪烁)。相反,我会使用正确的工作表名称识别每个对单元格的调用。同样,这会使您非常清楚地知道从何处获取内容
注意:cellVal=”“
必然意味着Len(cellVal))=0
,因此无需在条件语句中同时写入这两个值 您可以尝试此操作(不确定当单元格为空时是否应执行Flash.Activate
,如果是,请将其移动到结束if
)下方:
Dim cellVal作为字符串
对于i=7到1的情况
cellVal=单元格(i,“G”)
如果cellVal“”那么
原始数据。激活
对于j=1到endPointRaw
如果cellVal=Mid(单元格(j,“A”),1,Len(cellVal)),则
val2=Mid(单元格(j,“A”),1,Len(单元格Val))
val3=单元(j,“D”)
闪光电池(i,“H”)。值=val3
退出
其他的
闪光电池(i,“H”)。值=0
如果结束
下一个j
闪光,激活
如果'Else'单元格为空,则结束:不执行任何操作
接下来我
+1建议使用Mid$
字符串函数而不是Mid
@assylias-谢谢,你说得很对,但是我试图避免重写他的代码,因为我无法理解他试图做什么。主要是他打算使用的床单。相反,我给了他正确的逻辑,忽略了条件和其他错误。我同意我有点懒。你似乎比我快了几分钟:-)
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