如果存在重复值的VBA代码

时间:2019-07-11 15:08:52

标签: excel vba

我正在处理一个Excel问题,我认为这将基于重复项。基本上,如果找到重复的值(“ A:A”),则以某种方式将它们分组为变量,并且仅当(“ B:B”)中存在至少1个负数时才填充匹配的行。同样的情况也适用于非重复项,只有在B列中存在负数时,它们才应填充,但我认为可以通过公式轻松完成

我尝试了一些操作,但是主要问题是将重复项标识为自己的变量。当我创建一个功能完全不突出显示的重复项的函数时,这将适用于所有重复项,而不管其单独的文本如何。如果加起来,这会简单得多,但事实并非如此。下面是我要去的例子

Problem:

IDs        Trades
US9128     -500
US9128      750
EU9133      900
GD2104     -300
GD2104      150
FG5454      200

Expected:

IDs        Trades
US9128     -500
US9128      750
GD2104     -300
GD2104      150

打开其他途径解决此问题

1 个答案:

答案 0 :(得分:1)

假设您的数据在列(A:B)中,从表格行(1)开始  试试这个宏

Option Explicit
Sub test_me()
Dim obj As Object
Dim x, k%
Dim R%, C%
 R = 2: C = 4
Dim lr%: lr = Cells(Rows.Count, 1).End(3).Row
Dim i%, j%
Range("d2").CurrentRegion.ClearContents
Set obj = CreateObject("System.Collections.SortedList")
 For i = 2 To lr
     obj.Add Cells(i, 2).Value, Cells(i, 1).Value
        For j = i + 1 To lr
         If Cells(j, 1) = Cells(i, 1) Then
          obj.Add Cells(j, 2).Value, Cells(j, 1).Value
         End If
        Next j
   x = obj.Count
   If x = 1 Then GoTo NEXT_I
    With Cells(R, C)
     .Value = obj.GetByIndex(0): .Offset(, 1) = obj.Getkey(0)
     .Offset(1) = obj.GetByIndex(x - 1): .Offset(1, 1) = obj.Getkey(x - 1)
    End With
    R = R + 2
NEXT_I:
   obj.Clear
 Next i
 Set obj = Nothing
End Sub