2013-03-14 135 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

相關問題