使用VBA求解未知数之和的数组个数
1、程序解题思路:
在之前的《使用VBA求解六个未知数之和》经验里面可知,I1是一个固定值,而这回的i7可以看作是21~183之间的变量,而这个变量就不需要手动输入,在它的外边套入一个For结构的语句即可。
2、打开Excel表格,点击菜单栏上面的【开发工具】,【Visual Basic】,或者使用【Alt+F11】组合键打开VBA编辑器。

3、在VBA编辑器的菜单栏上面点击【插入】,【模块】。

4、在代码窗口里面输入以下程序:
Sub QiuJieGeShu()
Dim m, i1, i2, i3, i4, i5, i6, i7 As Long
Application.ScreenUpdating = False '关闭Excel表格屏幕刷新,提高运行速度
On Error Resume Next '忽略运行过程中出现的错误
Set mysheet1 = ThisWorkbook.Worksheets("Sheet1") '工作表定义
mysheet1.Range("A:F").Clear '清空A:F列
For i7 = 21 To 183
m = 0 '每次执行时,均把m的初始值设为0
For i1 = 1 To 28 '第一个数值只能到第28个位置,即:33-6+1
For i2 = 1 To 29 '第二个数值只能到第29个位置,即:33-6+2
For i3 = 1 To 30 '第三个数值只能到第30个位置,即:33-6+3
For i4 = 1 To 31 '第三个数值只能到第31个位置,即:33-6+4
For i5 = 1 To 32 '第三个数值只能到第32个位置,即:33-6+5
For i6 = 1 To 33 '第三个数值只能到第33个位置,即:33-6+6
If i2 > i1 Then '选择的单元格需要大于i1
If i3 > i2 Then '选择的单元格需要大于i2
If i4 > i3 Then '选择的单元格需要大于i3
If i5 > i4 Then '选择的单元格需要大于i4
If i6 > i5 Then '选择的单元格需要大于i5
If i1 + i2 + i3 + i4 + i5 + i6 = i7 Then
'如果相加的值与i7单元格里面的值相等,则执行
m = m + 1 '累计满足条件的个数
End If
End If
End If
End If
End If
End If
Next
Next
Next
Next
Next
Next
mysheet1.Cells(i7 - 19, 1) = i7 '将i7的值填入第1列(i7-19)行的单元格
mysheet1.Cells(i7 - 19, 2) = m '将m的值填入第2列(i7-19)行的单元格
Next
Application.ScreenUpdating = True '恢复Excel表格结果显示
End Sub

5、在程序里边,主要是对For循环结构嵌套的使用。简单的例子如下:
For i = 1 To 3
For j = 1 To 3
Next
Next
在第一个For执行一次,第二个For要执行三次;到第一个For执行一次,第二个For要执行三次;再到第一个For执行一次,第二个For要执行三次。循环执行结束,再执行后面的程序。
6、点击VBA编辑器菜单栏里面的“运行”图标,或者按下F5键运行程序。(预计需要等待三个多小时的时间,所以在电脑空闲的时候再运行)

7、经过漫长的等待之后,计算的结果终于出来了。经过计算总个数对比,与33个数里面选出6个数不重复的组合是一致的,C=(33*32*31*30*29*28)/(6*5*4*3*2*1)=1107568。
