如何使用VBAfind重复的单元格地址

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

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

B3 =RANDBETWEEN(C6,F6) 

我有13名选手。 每个人都可以猜到一个数字。 目标是最接近随机数字。 (猜测x和y之间的数字。最近赢得“奖品”)

参赛者列在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","") 

这是我的问题 。 我知道如何识别重复,如果我愿意,我可以突出显示它们。 我似乎无法find一个办法,即使有一个领带,一个单元告诉我谁赢了。

即; 如果参赛者#7获胜—单元格会说“参赛者#7获胜”如果参赛者#7和#10获胜—单元格应该说出参赛者#7和参赛者#10 Tie。

有一个命令或VBA模块可以为我做这个? 我尝试了下面的VBA模块,但是它只返回#NAME? 不pipe我做什么。

这个代码工作,我没有正确插入模块,或者这个模块不适合我的情况,我需要新的东西。

帮我哦在线领域伟大的Excel贤哲。

我的Excel工作表的图像 这是我更新的工作表

 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 

下面的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. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

 =ListWinners(A1:A100,B1:B100) 

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

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

macros必须启用这个工作!