|
回复 751楼 草根糖 的帖子
这个程序编的不错,语句写的很简练,思维却比较深,破解别人好代码的同时,对自己也是一种提高。
Sub test()
Dim arr, brr(5, 9), i As Long, j As Long, k As Long
arr = [a2].Resize(5, 40) '把A2:AN6区域数值赋给数组arr,这样arr为一个40行5列的二维数组
For j = 3 To 40 ’j为arr列标,从第3列到第40列循环
If j Mod 10 <> 1 Then ’当列标值不等于10的整数倍加1,即数据表中图案被设为浅绿色的字段列时,执行以下语句,为数据表中浅绿色的字段列时,直接跳到下一列
For i = 1 To 5 ,i为行标,在j列内i从1到5循环,如:当j=3时,arr(i,j)在上表中遍历C1:C6每一个单元格
If Len(arr(i, j)) Then ’如果如上行所说的单元格不为空,执行下面语句,为空直接跳到j列下一个单元格
k = 11 - arr(i, 10 * ((j - 1) \ 10) + 1) ’表中数据分四个区域10 * ((j - 1) \ 10) + 1取得数字所属区域的首列(字段所在列)的列标,arr(i, 10 * ((j - 1) \ 10) + 1)即为arr(i,j)所属的字段,11减之即为结果数组brr的行标。同样,如果字段为101,100,99,98,97,96,就得用101去减。
brr(k, arr(i, j)) = brr(k, arr(i, j)) + 1 ’k为结果数组的行标,arr(i,j)为数据表中的值同时为结果数组的列标,其值在二维循环的过程中只要出现一次,结果数组中相应的值就增加1(起始为0),这样就得到了arr(i,j)这个数出现的次数
End If
Next
End If
Next
[d10].Resize(6, 10) = brr ’结果输出到D10:M15区域
End Sub |
|