嵌套和嵌套if

时间:2017-08-22 10:01:29

标签: excel vba excel-vba

我试图一起实现嵌套for和嵌套if语句。我在下面有以下专栏。它需要查看列,如果范围在500-1000之间,它应该给出推荐a(即在另一列中写入推荐)如果它超过1000,它应该在响应列中给出另一个推荐。

Income Recommendation
550        a
1200       b
750        a
1400       b
600        a


Dim i As Integer
Dim j As Integer


    For i = 2 To Range(i, 1).End(xlDown).Row

        If Cells(i, 1).Value > 1000 Then

        Cells(i, 10).Value = "b"

        i = i + 1

        Else
            If Cells(i, 1).Value < 1000 Then
                If Cells(i, 1).Valie > 500 Then
                Cells(i, 10).Value = "a"
                End If
                End If
        i = i + 1
        End If
    Next i
End Sub

2 个答案:

答案 0 :(得分:4)

有几个错误:

  1. 在设置i循环的起始值和结束值时,不要依赖For具有值 - 很有可能0 Range(i, 1)在计算0时。 (编辑:经过测试并确认在计算结束值时它仍为Range(0, 1)。)使用i = i + 1会产生1004错误。

  2. 不要在循环内递增循环计数器(即不要Step 2) - 它几乎肯定会混淆事物。如果您真的只想处理每一秒,请在For声明中使用.Valie

  3. .Value应为Integer

  4. 不要对行使用Integer数据类型 - 这些天Excel可以处理1048576行,这超过了Range(1, 1)可以处理的行。

  5. Range语法无效。将两个参数传递给Cells属性时,它们需要是单元格引用。传递行和列是使用 Range(1, 1) 属性时使用的行。 (因此Cells(1, 1)需要Range("A1") Dim i As Long For i = 2 To Cells(1, "A").End(xlDown).Row If Cells(i, "A").Value > 1000 Then Cells(i, "J").Value = "b" ElseIf Cells(i, "A").Value > 500 Then Cells(i, "J").Value = "a" Else Cells(i, "J").Value = "" End If Next i End Sub 。)

  6. 重构代码会给出:

    $.post()

答案 1 :(得分:3)

你可以使用Select Case

这样做
Public Sub TestMe()    

    Dim i As Long
    Dim j As Long

    With ActiveSheet
        For i = 2 To .Cells(1, 1).End(xlDown).Row    
            Select Case True    
                Case .Cells(i, 1) > 1000
                    .Cells(i, 10) = "b"    
                Case .Cells(i, 1) < 1000 And .Cells(i, 1) > 500
                    .Cells(i, 10).value = "a"    
            End Select
        Next i
    End With
End Sub

它更明显,更容易理解。另外,请确保您参考工作表(在本例中为with ActiveSheet),以避免将来出现参考问题。