如何比较同一行中两个不同列中的两个单元格同时向下循环列?

现在我的代码从L2开始,循环到列的最后一行。 如果单元格值小于“上一页”单元格的单元格的值,则该单元格将以40的ColorIndex高亮显示。效果很好。

我真正想要做的就是能够同时循环播放第二列(他们都会显然在同一行)。 从逻辑上讲,它应该是这样的:

如果单元格值(从L2开始)小于“上一页”单元格中单元格的值,并且AE2单元格值等于“#N / A”(注意:此时所有公式已被删除所以“#N / A”是一个string)然后突出显示颜色索引为40的L2单元。任何帮助表示赞赏。

Sub Comparing() Sheets("Output").Select Dim UsedRng As Range, LastRow As Long Dim x As Long Set UsedRng = ActiveSheet.UsedRange LastRow = UsedRng(UsedRng.Cells.Count).Row Range("L2").Select Do Until ActiveCell.Row = LastRow + 1 If ActiveCell.Value < Range("Previous!L2") Then ActiveCell.Interior.ColorIndex = 40 End If ActiveCell.Offset(1, 0).Select Loop End Sub 

编辑:感谢您的答复。 调整之后得到的代码工作如下:

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _ Application.WorksheetFunction.IsNA(wsOut.Cells(r, "AE").Value) Then wsOut.Cells(r, "L").EntireRow.Delete End If Next End Sub 

在重构你的代码之后,这个改变变得简单了(只是对If语句稍作修改):

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(r, "L").Value And _ wsOut.Cells(r, "AE").Value = "#N/A" Then wsOut.Cells(r, "L").Interior.ColorIndex = 40 End If Next End Sub 

如果Previous!L2意味着特指第2行,而不是指向正在处理的行,那么在该点中对r的引用应该改为2

此外,如果列AE中的单元格包含#N/A的错误值,而不是一个"#N/A"string(您可以告诉试图在Excel中执行=LEN(AE2) – 如果它返回=LEN(AE2) #N/A然后AE2包含一个错误值,但如果它返回4那么AE2包含一个string值),您可以使用IsError来testing。

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _ IsError(wsOut.Cells(r, "AE")) Then wsOut.Cells(r, "L").Interior.ColorIndex = 40 End If Next End Sub 

如果我正确理解你的目标,你可能想试试这个:

 Option Explicit Sub Comparing() Dim cell As Range Dim prevVal As Double prevVal = Worksheets("Previous").Range("L2") With Worksheets("Output1") For Each cell In .Range("AE2:AE" & .Cells(.Rows.count, "L").End(xlUp).row).SpecialCells(xlCellTypeConstants, xlErrors).Offset(, -19) If cell.Value < prevVal Then cell.Interior.ColorIndex = 40 Next cell End With End Sub