我目前有一个Excel数据集,显示在不同时间销售的产品以及销售人员如何指定所售商品的产品类别。
Product# Product Class
10001 Hardware
20002 Software
30003 Misc.
10001 Hardware
10001 Software
20002 Software
10001 Hardware
30003 Misc.
您会注意到,对于产品#10001(应归类为"硬件"),销售人员错误地将其中一个销售额指定为"软件。"
因此,如果我按产品#10001过滤,我将获得2个不同的产品类。 我试图找出哪个产品#有超过1个产品类别,可用于约30,000种不同的产品,以便它们可以修复。
如何查看数据以指明哪些产品编号需要修复为只有1个产品类别?
我只期待存在多个类别指定问题的少数情况,因此一旦我找出哪个产品#有问题,就可以手动修复。
谢谢!
答案 0 :(得分:1)
您可以在单元格=IF(COUNTIF($A$3:$A$1000,A3)-COUNTIFS($A$3:$A$1000,A3,$B$3:$B$1000,B3)>0,"Wrong","OK")
中使用此公式C3
。根据需要调整范围并将公式拖到底部。
答案 1 :(得分:1)
您可以使用称为dictionary的对象。字典具有键和对应的值。实现密钥的存储方式,以便快速查明字典中是否存在特定密钥,这有助于检查重复的产品代码。
为简单起见(因为我对Excel中的VBA经验不多),我假设要检查的数据位于Sheet(1)的第1列和第2列中:
Option Explicit
' Add reference to get Dictionary: http://www.techbookreport.com/tutorials/vba_dictionary.html
' Excel VBA- Finding the last column with data: https://stackoverflow.com/a/11927387
Sub FindDuplicates()
Dim dict As Dictionary
Set dict = New Dictionary
Dim ws As Worksheet
Set ws = Sheets(1)
Dim rLastCell As Range
Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Dim key As String
Dim val As String
Dim dupes As String
Dim i As Long
' use maxFinds to limit the number of duplicates found
Dim maxFinds As Integer
maxFinds = 32
Dim nFound As Integer
nFound = 0
For i = 1 To rLastCell.Row
key = Cells(i, 1).Value
val = Cells(i, 2).Value
If dict.Exists(key) Then
If dict(key) <> val Then
dupes = dupes & "Row: " & i & " Class: " & val & vbCrLf
nFound = nFound + 1
End If
Else
dict.Add key, val
End If
If nFound = maxFinds Then
Exit For
End If
Next
If nFound = 0 Then
MsgBox ("No duplicates found.")
Else
MsgBox (dupes)
End If
End Sub
字典对象不是内置于Excel中的,因此您需要通过&#34;工具&#34;添加对Microsoft Scripting Runtime的引用。菜单 - &gt; &#34;引用...&#34;
我创建了一个包含50,000行和大量重复项的测试文件,这就是为什么代码最终会设置限制找到重复项的数量,因此您可以设置maxFinds = 10
并完成这些操作,然后再次运行宏以找到另外十个,依此类推。此外,如果有多于32个,那么他们无论如何都不适合在消息框中。
它假定第一次出现&#34;产品类&#34; (或上面代码示例中第2列中的值)是正确的。
示例输出:
答案 2 :(得分:0)
您可以使用此数组公式(单击 Ctrl + Shift + 输入)以找出需要处理的数组:
tail
来自=IF(IFERROR(VLOOKUP(A2,$A$1:A1,1,0),0)>0,IF(ISTEXT(VLOOKUP(A2&B2,$A$1:A1&$B$1:B1,1,0)),"","Dup"),"")
的公式并向下拖动。
然后只需使用 Dup 字样进行过滤。这应该适合你。