对于excel宏中的每个循环,vba跳转备用行

对于excel宏中的每个循环,vba跳转备用行,excel,visual-studio-macros,vba,Excel,Visual Studio Macros,Vba,我有下面的vba代码。表5中a5列至a20列的行为: a5=瑞典 a6=西班牙 a7=俄罗斯 a8=意大利 a9=德国 a10=芬兰 a11=挪威 a12=瑞士 a13=法国 a14=比利时 Set fillcolumnrange = Sheet5.Range("A5:A20") i = 1 For Each Row In fillcolumnrange.Rows If Not Sheet5.Range("A" & i + 4) = "" Then MsgBox Row(i)

我有下面的vba代码。表5中a5列至a20列的行为:

a5=瑞典

a6=西班牙

a7=俄罗斯

a8=意大利

a9=德国

a10=芬兰

a11=挪威

a12=瑞士

a13=法国

a14=比利时

Set fillcolumnrange = Sheet5.Range("A5:A20")
i = 1
For Each Row In fillcolumnrange.Rows
 If Not Sheet5.Range("A" & i + 4) = "" Then
    MsgBox Row(i)
 End If
 i = i + 1
Next Row
但此代码只提示其他值,即

瑞典

俄罗斯

德国

挪威

法国


有人能帮我找出代码中的错误吗?

您正在循环范围内的行,并在循环中推进变量
i
。 您可以引用正在循环的每个变量

试试这个

Set fillcolumnrange = Sheet1.Range("A5:A20")
For Each cell In fillcolumnrange.Cells
 If Not cell = "" Then
    MsgBox cell
 End If
Next cell

你有一个不同类型的循环混合

要么照瑞克说的做

或者使用
i

Set fillcolumnrange = Sheet5.Range("A5:A20")
For i = 1 To fillcolumnrange.Rows.Count
    If Not Sheet5.Range("A" & i + 4) = "" Then
       MsgBox Sheet5.Cells(i + 4, 1)
    End If
Next i
或者可能是一个
do循环

Set fillcolumnrange = Sheet5.Range("A5:A20")
i = 1
do until i = fillcolumnrange.Rows.Count + 4
 If Not Sheet5.Range("A" & i + 4) = "" Then
    MsgBox Sheet5.Cells(i + 4, 1)
 End If
 i=i+1
Loop

EDIT现在已测试并运行正常)

基于Rick的答案,以下是每个循环的
简短版本:

For Each cell in fillcolumnrange.Cells If len(cell) <> 0 Then MsgBox cell Next 对于fillcolumnrange.Cells中的每个单元格 如果len(cell)为0,则MsgBox cell 下一个
好极了,你比我强多了在“i=1到fillcolumnrange.Rows”行上显示类型不匹配