VBA循环,查找唯一值,分配给变量,匹配另一个变量

时间:2016-09-22 18:26:42

标签: vba loops duplicates

A列包含名称。 B列包含值。列A中的每个名称在列B中都有许多值。我想确保列A中的每个唯一名称都包含值" 1600460116"在B.如果A列中的名称没有值" 1600460116",那么我需要突出显示它。

到目前为止,我在" 1600460116"的值时突出显示了A列和B列。出现:

    For i = 2 To sh4lRow
        If InStr((sh4.Cells(i, dealID)), "1600460116") > 0 Then
            sh4.Cells(i, dealID).Interior.ColorIndex = 3
            sh4.Cells(i, ioNameB).Interior.ColorIndex = 3
            Else: sh4.Cells(i, dealID).Interior.ColorIndex = 2
        End If
    Next i

(注意:ioName B是A列,dealID是B列)

我认为我需要遍历每个循环的名称并将唯一的名称放入变量中。然后我想我需要循环突出显示的列B值并将这些唯一的A名称放入另一个变量中。然后我需要找到列表不匹配的位置。

有人可以帮我完成这段代码吗?

以下是我的excel文件:excel here

1 个答案:

答案 0 :(得分:0)

好的 - 这里有几点,我在新专栏中使用了oldschool EXCEL FORMULA来创建组合colA和colB的字符串 - 新col是变量x,你必须为其设置一个值工作表上的任何空列(之后将删除)。通过这个新的col x,我在新专栏中创造了一个新的范围,即第2行到第2阶段。

一旦该字符串concat位于新列中,它将遍历colA中的名称并检查名称+ 1600460116是否存在于新列中的任何位置。如果没有,则突出显示黑名称(颜色2)。

此后它会从新列范围中删除任何公式。希望这是有道理的!

Dim x As Integer
Dim newRange As Range

With sh4
Set newRange = .Range(Cells(2, x).Address & ":" & Cells(sh4lRow, x).Address)
    newRange.Formula = ("=INDIRECT(ADDRESS(ROW()," & ioNameB & "))&INDIRECT(ADDRESS(ROW()," & dealID & "))")
    For i = 2 To sh4lRow
        If Application.WorksheetFunction.CountIf(newRange, .Cells(i, 1).Value & "*1600460116*") = 0 Then
            .Cells(i, ioNameB).Interior.Color = 2
        End If
    Next i
    newRange.ClearContents
End With

我使用这种方法而不是循环遍历每一行的所有行,因为它更快了!