【问题标题】:VBA Loop through, Find unique values, assign to variable, match to another variableVBA循环,查找唯一值,分配给变量,匹配另一个变量
【发布时间】:2017-01-31 11:05:57
【问题描述】:

A 列包含名称。 B 列包含值。 A列中的每个名称在B列中都有许多值。我想确保A列中的每个唯一名称在B中都包含“1600460116”的值。如果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

【问题讨论】:

  • 为什么不使用条件格式?
  • 不确定您所说的“B 列中有许多值”是什么意思 - 您的意思是 A 中的条目有重复的行,每个条目在 B 中都有不同的值,还是您的意思是有一行A 中的特定条目在 B 列的 SAME 单元格中有许多不同的值?
  • 是的,很抱歉没有澄清。条目 A 有重复的行,每行在 B 中都有不同的值

标签: vba loops duplicates


【解决方案1】:

好的 - 这里有几点,我在新列中使用了一个老式的 EXCEL 公式来创建组合 colA 和 colB 的字符串 - 新的 col 是变量 x,您必须在任何空值中设置一个值工作表上的列(之后将被删除)。有了这个新的 col x,我创建了一个新的范围,即 row2 到 lastrow 在新列中。

一旦字符串 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

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

【讨论】:

  • 我知道会发生什么。它循环,如果有 0 个“1600460116”值(无论哪个名称),那么所有内容都会突出显示。否则,如果 B 列中至少有 1 个值“1600460116”,则不会突出显示任何内容。
  • 是否需要为 ioNameB 中的每个唯一值添加“for each”?
  • 您使用的是这个新答案中的代码吗?我刚刚测试过它,它工作正常。我第一次提供的旧版本有一个错误,但上面的这个对我来说没问题!
  • 是的,我正在使用上面的代码。名称(A 列)是否有下划线?
  • 我在原始问题中放置了一个链接,以了解我的 excel 文件的外观。我使用上面的代码来查看它是否会突出显示任何没有“1600460116”的名称。我还尝试添加星号 ("1600460116") 以尝试查找包含该值但在 dealID 列中具有其他值的单元格(例如 [{"ABC":"1600460116","price" :“0.0”}])。两者都不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 2023-04-05
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多