25、关于组合和数组应用的较好结合! 代码思路是,先列出所有的组合,然后对每一个组合的“和值”和列位置进行比较,符合条件就按条件确认其在数组中的位置,最后给单元格赋值!代码:
Private Sub CommandButton1_Click()
Dim arr1() As String '最终需要生成的数组,定义成字符串型
Dim i%, j%, k%, t1%, t2%, t% '全部定义成整型
Dim arr As Variant
Application.ScreenUpdating = False '关闭屏幕更新,防止闪屏及加快代码运行速度
arr = Range("b1:d1") '生成一个数据,记录b1、c1、d1的值
ReDim arr1(0 To 27, 1 To 3) As String '这个字符串数组,正好与B3:d30的大小一致,便于赋值
For i = 0 To 9
For j = i To 9
For k = j To 9 '做三个循环,排列出所有的组合
t1 = i + j + k '计算和值,这个值同时也是它在数组里的行位置
t = IIf(i = j, 1, 0) + IIf(i = k, 1, 0) + IIf(j = k, 1, 0) '计算相同的个数
t2 = Switch(t = 0, 3, t = 3, 1, t = 1, 2) '如果t等于0,说明三个都不相同,在数组中对应第三列
't=3,说明三个数相同,对应数组的第一列,t=1,说明两个数相同,对应第二列
If InStr(1, arr(1, t2), i) > 0 And InStr(1, arr(1, t2), j) > 0 _
And InStr(1, arr(1, t2), k) > 0 Then '判断i、j、k是否都在t2对应的数组arr里出现
arr1(t1, t2) = arr1(t1, t2) & IIf(arr1(t1, t2) = "", "", " ") & (i & j & k) '如果都出现就给最终要的数组赋值,中间以空格隔开
End If
Next
Next
Next
Range("b3").Resize(28, 3) = arr1 '给单元格赋值,数组的大小正好与单元格大小一致
Range("b3").Activate '激活B3单元格
Application.ScreenUpdating = True
End Sub
XtVJKZF0.rar
(13.78 KB, 下载次数: 254)
|