Excel 没有bug,但For、If语句工作不正常

Excel 没有bug,但For、If语句工作不正常,excel,vba,Excel,Vba,执行下面的代码,但不执行以下命令: For i = 2 To lRow If .Range("A" & i).Value = rng1 Then If .Range("C" & i).Value = rng2 Then lastcell = .Range("B" & i).Value End If End If Next i 似乎没有按我的意思做。我的意图是,如果单元格A&I的值=比如说rng1

执行下面的代码,但不执行以下命令:

For i = 2 To lRow

    If .Range("A" & i).Value = rng1 Then
        If .Range("C" & i).Value = rng2 Then
            lastcell = .Range("B" & i).Value
        End If
    End If

Next i
似乎没有按我的意思做。我的意图是,如果单元格A&I的值=比如说rng1,如果这是真的,那么转到下一个参数,检查I的C列单元格是否=rng2如果这是正确的,那么取该行I的B列,并将证明选项卡上的单元格“C3”设置为等于B&I的值。然后进入下一个我;如果它找到另一个符合上述两个条件的B,则将单元格c3.offset(1)=设置为该i的值。不幸的是,这对我不起作用。有什么建议吗:)

这是我运行代码时的样子:


每次向列表末尾添加值时,都需要查找下一个空单元格

Sub Extract_Bank_Amount()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng1 As Range, rng2 As Range, lastcell As Range
    Dim lRow As Long, i As Long

    Set wb = ActiveWorkbook
    Set ws = wb.Sheets("Bank Statement")

    Set rng1 = wb.Sheets("Payroll Journal").Range("B1")
    Set rng2 = wb.Sheets("Payroll Journal").Range("B3")

    wb.Sheets("Bank Statement").Activate

    With ws

        lRow = .Range("B" & .Rows.Count).End(xlUp).Row

        For i = 2 To lRow

            If .Range("A" & i).Value = rng1 Then
                If .Range("C" & i).Value = rng2 Then

                    With wb.Sheets("Proof")
                        .Range("C" & .Rows.Count).End(xlUp).Offset(1).Value = .Range("B" & i).Value
                    End With

                End If
            End If
        Next i
    End With
End Sub

我会给“工资日记账”上的范围指定有意义的名称,然后使用它们定义的名称来引用它们

wb.Sheets("Payroll Journal").Range("B1").Name = "PayrollB1"
wb.Sheets("Payroll Journal").Range("B3").Name = "PayrollB3"
这将使你们摆脱很多绒毛

Sub Extract_Bank_Amount2()

    Dim cell As Range
    With Worksheets("Bank Statement")

        For Each cell In .Range("B" & .Rows.Count).End(xlUp)

            If cell.Offset(0, -1).Value = Range("PayrollB1").Value Then
                If cell.Offset(0, 1).Value = Range("PayrollB3").Value Then

                    With wb.Sheets("Proof")
                        .Range("C" & .Rows.Count).End(xlUp).Offset(1).Value = cell.Value
                    End With

                End If
            End If
        Next
    End With

End Sub

你也应该下载。Rubberduck是VBA IDE的COM插件,它将帮助您调试和优化代码。对我来说,最重要的是,它为我格式化代码,节省了我大量的时间。

不为我工作
并没有描述这个问题。因此,甚至无法猜测您的代码做了哪些您不希望它做的事情。
Sub Extract_Bank_Amount2()

    Dim cell As Range
    With Worksheets("Bank Statement")

        For Each cell In .Range("B" & .Rows.Count).End(xlUp)

            If cell.Offset(0, -1).Value = Range("PayrollB1").Value Then
                If cell.Offset(0, 1).Value = Range("PayrollB3").Value Then

                    With wb.Sheets("Proof")
                        .Range("C" & .Rows.Count).End(xlUp).Offset(1).Value = cell.Value
                    End With

                End If
            End If
        Next
    End With

End Sub