循环列时忽略其他单元格的值VBA EXCEL
问题描述:
我将以示例开始我的问题,否则将很难解释。循环列时忽略其他单元格的值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为好。希望你明白我的目标。 希望有人能帮助。
答
我的建议如下:
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
'A1'中'word''test'与'other'之间有什么样的字符?有空格或换行符吗? – 2013-03-14 16:37:07
数据是导入的,我想这是一个ALT输入 – user2156096 2013-03-14 21:14:23