如何使用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)非常易于安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除UDF:
- 如上所示调出VBE窗口
- 清除代码
- 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必须启用这个工作!