2013-03-14 104 views
0

我将以示例开始我的问题,否则将很难解释。循环列时忽略其他单元格的值VBA EXCEL

  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为好。希望你明白我的目标。 希望有人能帮助。

+0

'A1'中'word''test'与'other'之间有什么样的字符?有空格或换行符吗? – 2013-03-14 16:37:07

+0

数据是导入的,我想这是一个ALT输入 – user2156096 2013-03-14 21:14:23

回答

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 

根据你提供的数据看来它工作正常。我希望这是你所期待的,因为了解你的需求有点复杂。

+0

确实很完美!谢谢! – user2156096 2013-03-15 08:07:34

相关问题