0

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

         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 很好,你会比文本更好地理解代码。

如果一个值(在这个例子中:单词)也在其他行中,那么我们需要检查 C 列,并且如果 C 列中有一个值,我们在 C 列中找到了多个值(在这个例子中:字母),我们需要重新检查 A 列中的值是否也多次出现。

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

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

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 行和第 2 行返回:YES。希望你明白我的目标。希望有人可以提供帮助。

4

1 回答 1

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

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

于 2013-03-14T22:24:35.897 回答