循环列VBA EXCEL时忽略其他单元格值

时间:2013-03-14 15:00:26

标签: excel excel-vba vba

我将以一个例子开始我的问题,否则将难以解释。

         A        B        C           D         E (ID)
1      word              letter                  1
       test              blabla                  
       other          
2      word              letter                  2
                         number
3      test              true                    3
4      other             false                   4
5      word              letter       Yes        5
6      word              letter       Yes        6
7      test              letter                  7

目标是什么?

如果我试着用语言解释目标,那就很难理解;它也很难解释:)无论如何我还添加了我的代码,如果你对VBA很好,你会比文本更好地理解代码。

如果一个值(在这个例子中:word)也在其他行中,那么我们需要检查C列,如果在C列中有一个值,我们在C列中找到一个以上的值(在这个例子中:字母),我们需要重新检查,如果在A列中,该值也会出现一次以上。

所以我已经制作了一个SUB,它的工作原理! :)但如果单元格中有更多值,则不会。因此,在单元格中只有1个值的示例中,如第6行和第6行中所示。 7,D列返回:是

到目前为止,这是我的代码。

Sub duplicates()

Dim source As Range
Dim source2 As Range

For Each source In Range("A1", Range("A" & Rows.Count).End(xlUp))
 If source.Value <> "" Then
    For Each source2 In Range("A1", Range("A" & Rows.Count).End(xlUp))


    If source.Value = source2.Value And source.Offset(0, 4).Value <> source2.Offset (0, 4).Value Then

        If source.Offset(0, 2).Value = source2.Offset(0, 2).Value Then

         source.Offset(0, 3) = "Yes"
        End If
    End If
    Next source2
  End If
 Next source
End Sub

所以,我们应该回归:第1行和第1行是2也是。希望你了解我的目标。 希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

我的建议如下:

A)附加功能会检查作为数组传递给函数的每个单元格的每个元素:

Function AnyEqual(ColA, ColB) As Boolean

Dim itemA, itemB
For Each itemA In ColA
    For Each itemB In ColB
    If itemA = itemB Then
        AnyEqual = True
        Exit Function
    End If
    Next
Next

End Function

B)您的代码中进行了一些更改 - 将其放在For Each source2循环中,而不是内部代码:

If AnyEqual(Split(source, Chr(10)), Split(source2, Chr(10))) And _
    source.Offset(0, 4).Value <> source2.Offset(0, 4).Value Then

    If AnyEqual(Split(source.Offset(0, 2), Chr(10)), _
                   Split(source2.Offset(0, 2), Chr(10))) Then

        source.Offset(0, 3) = "Yes"
    End If
End If

根据您提供的数据,它似乎工作正常。我希望这是你所寻找的,因为理解你的需求有点复杂。