我正在制作一张记分卡,上面有代表4种可能结果的列,例如:
每个工作人员在一个月内对这些评级进行5次评估。所以 1人可能 3成功, 2例异常, 0不成功, 0其他 >
因此每个结果的最大实例数为5,但实例总数不能超过5个。
我可以尝试输入所有组合(并弄错它们) - 是否有任何人都知道的函数/公式/ VBA会为我列出所有可能的结果组合?
e.g. 5000,4100,4010,4001,3200,3020,3002,3110,3011, etc...
答案 0 :(得分:1)
由于您的号码范围可以从0005
到5000
,因此您可以编写一个简单的循环来测试每个数字,以查看数字是否为5
:
Sub GetPermutations()
Dim i As Long
For i = 5 To 5000
If SumDigits(i) = 5 Then Debug.Print Format$(i, "0000")
Next
End Sub
Function SumDigits(s As Variant) As Long
Dim i As Long
For i = 1 To Len(s)
SumDigits = SumDigits + CLng(Mid$(s, i, 1))
Next
End Function
可替换地:
Dim w As Long, x As Long, y As Long, z As Long
For w = 0 To 5
For x = 0 To 5
For y = 0 To 5
For z = 0 To 5
If w + x + y + z = 5 Then Debug.Print w & x & y & z
Next
Next
Next
Next
答案 1 :(得分:0)
C#:
// numbering 1 to 4 - i.e.
// 1 sucessful, 2 unsucessful, 3 exception, 4 other
for(int i=1;i<4;i++)
{
for(int n=1;n<4;n++)
{
for(int d=1;d<4;d++)
{
for(int q=1;q<4;q++)
{
if(i+d+n+q<=5)
Console.WriteLine(i+n+d+q+", ");
}
}
}
}
编辑:刚看到你问过vba:
For number1 As Integer = 1 To 4 Step 1
For number2 As Integer = 1 To 4 Step 1
For number3 As Integer = 1 To 4 Step 1
For number4 As Integer = 1 To 4 Step 1
if(number1+number2+number3+number4<=5) Then
Debug.WriteLine(number1.ToString & number2.toString &number3.toString &number4.ToString & ",");
End If
Next number4
Next number3
Next number2
Next number1
我能想到的最简单的解决方案,虽然可能会更好。
答案 2 :(得分:0)
感谢大家的帮助 - 我设法使用一个建议组合,从数字1开始,自动填充到5000,然后&#34;文本到列&#34;,固定宽度以分隔数字,总和到5,过滤和嘿presto!似乎产生了正确数量的可能组合,最多可增加5个。
再次感谢您的帮助!