【发布时间】:2016-04-10 15:42:34
【问题描述】:
我是在 Excel 中使用 VBA 的新手。我什至不能 100% 确定如何正确插入模块,所以这将是一个很大的帮助。
我已经设置了一个工作表,可以将 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","")
这是我的问题。我知道如何识别重复项,如果我愿意,我可以突出显示它们。即使平局,我似乎也无法让一个单元格准确地告诉我谁赢了。
即;如果参赛者 #7 获胜 --- 单元格会说“参赛者 #7 获胜” 如果参赛者 #7 和 #10 获胜 --- 单元格应该说参赛者 #7 和参赛者 #10 并列。
是否有可以为我执行此操作的命令或 VBA 模块?我尝试了下面找到的 VBA 模块,但它只返回#NAME?不管我做什么。
要么此代码有效,但我没有正确插入模块,要么此模块不适用于我的情况,我需要一些新的东西。
帮助我哦,在线领域的伟大卓越圣贤。
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
【问题讨论】:
-
你需要在VBA中做吗?可以通过公式来完成....
-
不必在 VBA 中完成。直到现在,我还没有找到一种在不使用 VBA 的情况下在单个单元格中执行此操作的方法。
-
我的参赛者在 A1:C11 中,B 和 C 是他们的预测。实际结果在 E2 & F2
-
H2 到 H11,你有数组公式 =IFERROR(SMALL(IF((($B$2:$B$11=$E$2)*($C$2:$C$11=$F) $2)),ROW($B$2:$B$11)-1),ROWS($B$2:$B3)),"")
-
I2 到 I11,你有正常的公式 =IFERROR(INDEX($A$2:$A$11,H2,1),"")
标签: excel vba find duplicates