没有错误,但对于,如果陈述不正常工作

下面的代码执行,但是:

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,如果是这样,那么继续前进到下一个参数,并检查是否我的C列单元格= rng2如果是正确的,然后采取该行我的B列和在校样标签上设置单元格“C3”等于B和i的值。 然后转到下一个我; 如果发现另一个符合上述两个条件的B,则将单元格c3.offset(1)=设置为该值。 这不幸的是不适合我。 任何人都有任何build议:)

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

在这里输入图像说明

在这里输入图像说明

  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") Set lastcell = wb.Sheets("Proof").Range("C3" & Rows.Count).End(xlUp).Offset(1) 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 lastcell = .Range("B" & i).Value End If End If Next i End With End Sub 

每次将值添加到列表的末尾时,都需要find下一个空单元格。

 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 。 Rubberduck是VBA IDE的COM加载项,可帮助您debugging和优化代码。 对我来说最重要的是通过格式化我的代码为我节省了大量的时间。