如何使用VBA查找重复项的单元格地址

时间:2016-01-06 14:01:58

标签: excel vba find duplicates

我在excel中使用VBA是全新的。我甚至不能100%确定如何正确插入模块,所以这将是一个很大的帮助。

我已经设置了一个随机化1到100之间数字的工作表。

B3  =RANDBETWEEN(C6,F6)

我有13名参赛者。每个人都猜到一个数字。目标是最接近随机数。 (猜猜x和y之间的数字。最近的胜利“The Prize”)

参赛者列于A9:B21。 (即“参赛者#1”)

他们的猜测列在C9:C21中。

随机数和猜测之间的差异列在D9:D21

D9:D21  =IF(C9>$B$3,C9-$B$3,IF($B$3>C9,$B$3-C9,0))

细胞F9:F21让你知道谁赢了,不计算任何小于1和超过100的猜测。

F9:F21  =IF(C9<1,,IF(C9>100,,IF(D9=MIN($D$9:$D$21),A9&" Wins",)))

不幸的是,每当我尝试在单元格C6或F6中引用而不是1或100时,我只得到0的结果。

在F8中,如果出现平局,我会弹出一个通知。仍不确定此代码是否是执行此操作的最佳方式。

F8  =IF(COUNTIF(F9:F21,"*")>1,"Tie Breaker Needed","")

这是我的问题。我知道如何识别重复项,如果我愿意,我可以突出显示它们。我似乎无法找到一种方法让一个单元格告诉我确切谁赢了,即使有一个平局。

即;如果参赛者#7胜出--- Cell会说“参赛者#7胜利”      如果参赛者#7&amp; #10胜利--- Cell应该说是参赛者#7&amp;参赛者#10领带。

是否有可以为我执行此操作的命令或VBA模块?我在下面找到了我发现的VBA模块,但它只返回#NAME?不管我做什么。

这个代码是有效的,我没有正确插入模块,或者这个模块对我的情况不起作用,我需要新的东西。

帮助我哦,在线王国的伟大Excel贤者。

Image of My Excel Worksheet Here's my Updated worksheet

Option Explicit

Function LookupCSVResults(lookupValue As Integer, lookupRange As Range, resultsRange As Range) As String

    Dim s As String 'Results placeholder
    Dim sTmp As String  'Cell value placeholder
    Dim r As Long   'Row
    Dim c As Long   'Column
    Const strDelimiter = "|||"  'Makes InStr more robust

    s = strDelimiter
    For r = 1 To lookupRange.Rows.Count
        For c = 1 To lookupRange.Columns.Count
            If lookupRange.Cells(r, c).Value = lookupValue Then
                'I know it's weird to use offset but it works even if the two ranges
                'are of different sizes and it's the same way that SUMIF works
                sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
                If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                    s = s & sTmp & strDelimiter
                End If
            End If
        Next
    Next

    'Now make it look like CSV
    s = Replace(s, strDelimiter, ",")
    If Left(s, 1) = "," Then s = Mid(s, 2)
    If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

    LookupCSVResults = s 'Return the function

End Function

1 个答案:

答案 0 :(得分:1)

以下 UDF()

如何?
Option Explicit

Public Function ListWinners(people As Range, deltas As Range) As String
   Dim wf As WorksheetFunction
   Dim i As Long, delta As Long, msg As String
   Dim WinningValue As Long
   Set wf = Application.WorksheetFunction
   ListWinners = ""
   msg = " wins"
   WinningValue = wf.Min(deltas)
   For i = 1 To deltas.Rows.Count
      If deltas(i) = WinningValue Then
         If ListWinners = "" Then
            ListWinners = people(i)
         Else
            ListWinners = ListWinners & " & " & people(i)
            msg = " tie"
         End If
      End If
   Next i
   ListWinners = ListWinners & msg
End Function

在您发布的示例中,请使用它:

=ListWinners(A9:A21,C9:C21)

单个单元格中显示获胜者列表。

修改#1:

用户定义函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      =ListWinners(A1:A100,B1:B100)
      

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      有关UDF的详细信息,请参阅:

      http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

      必须启用宏才能使其生效!