将Excel或Google电子表格的所有组合相加
我需要创建一个电子表格,在那里我将输入几个(17)不同的数字,并在它们之间有所有可能的总和组合。例如1、2、3、4……:将Excel或Google电子表格的所有组合相加,excel,math,google-sheets,Excel,Math,Google Sheets,我需要创建一个电子表格,在那里我将输入几个(17)不同的数字,并在它们之间有所有可能的总和组合。例如1、2、3、4……: 1+2 1+3 1+4 2+3 2+4 3+4 ..... 如果我也能知道组合来自哪两个数字,那就太好了。如果A2:A18有17个数字 B1(标题): B2: 这将给出一个17*17的所有不同组合总和表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5
1+2
1+3
1+4
2+3
2+4
3+4
.....
如果我也能知道组合来自哪两个数字,那就太好了。如果A2:A18有17个数字 B1(标题): B2: 这将给出一个17*17的所有不同组合总和表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
如果A2:A18有17个数字 B1(标题): B2: 这将给出一个17*17的所有不同组合总和表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 这是用于使用VBA的Excel 在A1到Q1中列出17个值。然后运行此宏:
Option Explicit
Sub ListSubsets()
Dim Items(1 To 17) As Variant
Dim CodeVector() As Integer
Dim i As Long, kk As Long
Dim lower As Long, upper As Long
Dim NewSub As String
Dim done As Boolean
Dim OddStep As Boolean
kk = 3
OddStep = True
lower = LBound(Items)
upper = UBound(Items)
For i = lower To upper
Items(i) = Cells(1, i)
Next i
ReDim CodeVector(lower To upper) 'it starts all 0
Application.ScreenUpdating = False
Do Until done
'Add a new subset according to current contents
'of CodeVector
NewSub = ""
For i = lower To upper
If CodeVector(i) = 1 Then
If NewSub = "" Then
NewSub = "'=" & Items(i)
Else
NewSub = NewSub & "+" & Items(i)
End If
End If
Next i
If NewSub = "" Then NewSub = "{}" 'empty set
Cells(kk, 2) = NewSub
Cells(kk, 3).Formula = Mid(NewSub, 2)
kk = kk + 1
'now update code vector
If OddStep Then
'just flip first bit
CodeVector(lower) = 1 - CodeVector(lower)
Else
'first locate first 1
i = lower
Do While CodeVector(i) <> 1
i = i + 1
Loop
'done if i = upper:
If i = upper Then
done = True
Else
'if not done then flip the *next* bit:
i = i + 1
CodeVector(i) = 1 - CodeVector(i)
End If
End If
OddStep = Not OddStep 'toggles between even and odd steps
Loop
Application.ScreenUpdating = True
End Sub
选项显式
子列表子集()
尺寸标注项目(1至17)作为变型
Dim CodeVector()作为整数
我和你一样长,kk和你一样长
昏暗的下半身长,上半身长
作为字符串的Dim NewSub
Dim作为布尔值完成
变步长为布尔值
kk=3
OddStep=True
下限=磅(项目)
上限=UBound(项目)
对于i=从低到高
项目(i)=单元格(1,i)
接下来我
ReDim CodeVector(从低到高)'它启动所有0
Application.ScreenUpdating=False
干到做完
'根据当前内容添加新子集
码向量的性质
NewSub=“”
对于i=从低到高
如果码向量(i)=1,则
如果NewSub=“”,则
NewSub=“”=”&项目(i)
其他的
NewSub=NewSub&“+”&项目(i)
如果结束
如果结束
接下来我
如果NewSub=“”,则NewSub=“{}”为空集
单元(kk,2)=NewSub
单元格(kk,3)。公式=Mid(NewSub,2)
kk=kk+1
'现在更新代码向量
如果是这样的话
“只需翻转第一位
CodeVector(下)=1-CodeVector(下)
其他的
'首先查找第一个1
i=较低
Do While码向量(i)1
i=i+1
环
'如果i=上限,则完成:
如果i=上限,则
完成=正确
其他的
'如果未完成,则翻转*下一个*位:
i=i+1
码向量(i)=1-码向量(i)
如果结束
如果结束
OddStep=Not OddStep'在偶数步和奇数步之间切换
环
Application.ScreenUpdating=True
端接头
组合将从B4向下显示,相关总和将显示在D列中:
改编自。注: 这在我的旧笔记本电脑上运行大约需要4分钟。这是使用VBA的Excel 在A1到Q1中列出17个值。然后运行此宏:
Option Explicit
Sub ListSubsets()
Dim Items(1 To 17) As Variant
Dim CodeVector() As Integer
Dim i As Long, kk As Long
Dim lower As Long, upper As Long
Dim NewSub As String
Dim done As Boolean
Dim OddStep As Boolean
kk = 3
OddStep = True
lower = LBound(Items)
upper = UBound(Items)
For i = lower To upper
Items(i) = Cells(1, i)
Next i
ReDim CodeVector(lower To upper) 'it starts all 0
Application.ScreenUpdating = False
Do Until done
'Add a new subset according to current contents
'of CodeVector
NewSub = ""
For i = lower To upper
If CodeVector(i) = 1 Then
If NewSub = "" Then
NewSub = "'=" & Items(i)
Else
NewSub = NewSub & "+" & Items(i)
End If
End If
Next i
If NewSub = "" Then NewSub = "{}" 'empty set
Cells(kk, 2) = NewSub
Cells(kk, 3).Formula = Mid(NewSub, 2)
kk = kk + 1
'now update code vector
If OddStep Then
'just flip first bit
CodeVector(lower) = 1 - CodeVector(lower)
Else
'first locate first 1
i = lower
Do While CodeVector(i) <> 1
i = i + 1
Loop
'done if i = upper:
If i = upper Then
done = True
Else
'if not done then flip the *next* bit:
i = i + 1
CodeVector(i) = 1 - CodeVector(i)
End If
End If
OddStep = Not OddStep 'toggles between even and odd steps
Loop
Application.ScreenUpdating = True
End Sub
选项显式
子列表子集()
尺寸标注项目(1至17)作为变型
Dim CodeVector()作为整数
我和你一样长,kk和你一样长
昏暗的下半身长,上半身长
作为字符串的Dim NewSub
Dim作为布尔值完成
变步长为布尔值
kk=3
OddStep=True
下限=磅(项目)
上限=UBound(项目)
对于i=从低到高
项目(i)=单元格(1,i)
接下来我
ReDim CodeVector(从低到高)'它启动所有0
Application.ScreenUpdating=False
干到做完
'根据当前内容添加新子集
码向量的性质
Sub PairsOnly()
Dim Items(1 To 17) As Variant
Dim i As Long, j As Long, k As Long
Dim lower As Long, upper As Long
lower = LBound(Items)
upper = UBound(Items)
k = 2
For i = lower To upper
Items(i) = Cells(1, i)
Next i
For i = lower To upper - 1
For j = i + 1 To upper
Cells(k, 1) = Items(i) & "," & Items(j)
Cells(k, 2) = Items(i) + Items(j)
k = k + 1
Next j
Next i
End Sub