|
楼主 |
发表于 2021-2-21 01:37
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
按指定条件排列.zip
(1.67 MB, 下载次数: 3)
老师:如上图所示:B1:B3是自定义函数CTXPL指定的三个参数,B5:B1004是区域数组公式 { =CTXPL(B1,B2,B3) 的计算结果。
为最大限度地拓展自定义函数CTXPL的计算功能,需要增加第四参数--指定排列的数据个数--根据运算规则,第四参数必须<=第三参数(如B列所示,第三参数指定为三位数的号码,最多只能用三个不同的数字组成)
第四参数的运算规则是:1.当指定为0或省略时,代码依旧执行原有的计算功能,仍然显示为B5:B1004的计算结果;2.当指定为1时,则显示为D5:D14【俗称豹子号或三同号】(全部为一个数字组成的号码)的计算结果;2.当指定为2时,则显示为E5:E274【俗称组选三直选或二同号】(全部为两个数字组成的号码-肯定有一个数字重复)的计算结果;3.当指定为3时,则显示为F5:F724【俗称组选六直选或三不同】(组成号码的各数字虽然排列顺序不同,但绝不存在重复)的计算结果.......
排列五与七星彩也遵循上面的运算规则,以此类推。
您看能不能在CTXPL代码的基础上,添加如上所述的第四参数?原代码如下:
'传统型排列
Function CTXPL(最小值, 最大值, 指定位数)
nmin = 最小值
nmax = 最大值
n = nmax - nmin + 1
m = 指定位数
arr = ArrPC(n, m, 4, nmin, 1)
If Application.Version = "11.0" Then '2003版本
N3 = Application.Caller.Rows.Count
Else
gsh = Application.ThisCell.Formula
Do While gsh = Application.ThisCell.Offset(N3, 0).Formula
If Application.ThisCell.Offset(N3, 0).Row = Rows.Count Then Exit Do
N3 = N3 + 1
Loop
End If
ReDim brr(1 To N3, 1 To 1)
If UBound(arr) > N3 Then k = N3 Else k = UBound(arr)
For i = 1 To k
For j = 1 To UBound(arr, 2)
brr(i, 1) = brr(i, 1) & arr(i, j)
Next j, i
For ii = i To N3
brr(ii, 1) = ""
Next
CTXPL = brr
End Function
|
-
|