通过自定义宏比较列中的每个单元格(unhandy for loop)

时间:2016-02-17 16:57:07

标签: excel excel-vba vba

我目前正在尝试将列中的每个单元格相互比较,以便找到重复项。我写下面的代码,我知道它可能通过默认的Excel函数,但我想写一个宏与上述功能。当我运行我的代码时Excel当前没有响应,我的猜测是我运行一个带有14K单元格的双循环进行比较,每个循环产生14.000 * 14.000循环,这有点不方便。任何帮助将不胜感激:)。

Sub findidentical()

Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim ColumnG As Integer

x = 0
ColumnG = Application.WorksheetFunction.CountA(Range("G:G"))
'ColumnG is 14K cells long'
For i = 2 To ColumnG
    For j = 1 + 1 To ColumnG
        If Cells(i, 7).Value = Cells(j, 7).Value Then
            x = x + 1 & Cells(i, 7).Font.Bold = True & Cells(j, 7).Font.Bold = True
        End If
    Next j
Next i

Range("L25").Text = "Amount of duplicates"
Range("L26").Value = x

End Sub

1 个答案:

答案 0 :(得分:0)

试试这个:

Sub findidentical()

Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim ColumnG As Integer

x = 0
ColumnG = Application.WorksheetFunction.CountA(Range("G:G"))
'ColumnG is 14K cells long'
For i = 2 To ColumnG
    For j = i + 1 To ColumnG
        If Cells(i, 7).Value = Cells(j, 7).Value Then
            x = x + 1
            Cells(i, 7).Font.Bold = True
            Cells(j, 7).Font.Bold = True
        End If
    Next j
Next i

Range("L25").Text = "Amount of duplicates"
Range("L26").Value = x

End Sub

首先,您需要将if语句中的每个命令作为其自己的行,或者将它们与:而不是&分开。 &是字符串连接而不是命令分隔符。

第二,没有理由在2处启动Loop j它已经与上面的所有内容进行了比较。所以从i+1

开始吧