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