Excel-VBA比较列数据

时间:2011-07-01 21:48:40

标签: excel excel-vba vba

我是Excel VBA的新手,我需要编写代码来完成一项简单的任务。我需要逐行比较两个不同列中的值,看看差异是否超过50.如果是这样,我需要突出显示整行。

我用其他语言编程,所以我对它的工作方式有基本的了解,但我不知道如何导航单元格/查看单元格内的内容。我尝试了这个,但它没有成功(它只会突出显示每一行)。我简化它来比较值是否相等,但无济于事(仍然突出显示所有内容)任何人都可以给我一些帮助吗?

Dim strF0_col As Integer, sF0_col As Integer
Dim myRow, counter As Integer
Dim rEnd As Integer

Sub compare_F0()
    rEnd = 100
    strF0_col = 307
    sF0_col = 317
    counter = 0

    For myRow = 2 To rEnd Step 1
        Application.StatusBar = counter & "rows highlighted."
        If (Cells(myRow, strF0_col).Value = Cells(myRow, sF0_col).Value) Then
            Cells(myRow, strF0_col).EntireRow.Interior.ColorIndex = 28
        End If
    Next myRow
End Sub

提前致谢

2 个答案:

答案 0 :(得分:2)

有没有理由不使用条件格式,正如@Doug Glancy建议的那样?

这对我来说非常好。

如果您想拍摄,请执行以下操作...

  • 选择整行
  • 打开条件格式菜单(取决于您的Excel版本。无论如何......)
  • 添加规则=$KU2>$LE2+50
  • 设置您想要的格式(可能填写黄色?)
  • 确认
  • 将格式复制到其他行

请注意,行索引(在本例中为2)不能包含$符号。

希望它有所帮助。

答案 1 :(得分:0)

您可能不想突出显示空白的行?

如果是,请使用

If Cells(myRow, strF0_col).Value <> "" And _
   Cells(myRow, strF0_col).Value = Cells(myRow, sF0_col).Value Then

另外,访问像这样的单元格值非常慢。如果你只处理100行然后它足够快,但是如果这个数字增长那么你会发现它减慢到一个痛苦的程度。

将范围值复制到变量数组然后循环它会快得多。搜索SO [Excel] "Variant Array"有许多答案显示如何执行此操作并解释其帮助

的原因