|
楼主 |
发表于 2013-4-1 22:59
|
显示全部楼层
liucqa 发表于 2013-4-1 19:08
如果是针对不求上进的初学者,那自然就不会被喷了
初学者和爱好者可不能就这么堕落了!
你之前在10楼点评说:
【Dim语句最大的作用是方便其他人能看懂程序,这一点无论对初学者还是老鸟来说,都十分重要。你不能指望别人从初学者那乱七八糟的代码中慢慢找变量在哪里(如果你还希望别人愿意看初学者的程序并给予帮助的话) 发表于 2013-1-30 13:06 】
那么参考一下这个新手求助帖:
http://club.excelhome.net/forum. ... p;page=1#pid6825975
4楼回帖代码,有dim语句
Sub mysub1()
Dim arr(), brr(1 To 16, 1 To 33) As Long
Range([l1], [AR16]).ClearContents
lastr = Range("a65535").End(xlUp).Row
arr = Range("A1:G" & lastr)
For i = 1 To lastr - 1
For j = 1 To 6
brr(arr(i, 7), arr(i, j)) = brr(arr(i, 7), arr(i, j)) + 1
Next
Next
Range("l1:AR16") = brr
End Sub
但新手说一下子看不懂……
对比我的回帖
Sub test()
tms = Timer
arr = [a1].CurrentRegion '原始数据写入VBA内存数组arr (这样速度快)
[l1:ar16] = "": brr = [l1:ar16] '清空结果区域,并读入数组brr (这样速度快)
For i = 1 To UBound(arr) 遍历原始数据各行
n = arr(i, 7) '以第7列值作为输出结果brr的行位置
For j = 1 To 6 '遍历检查第1-6列
k = arr(i, j) '获取原始数值作为输出结果brr的列位置
brr(n, k) = brr(n, k) + 1 '对应结果数组brr的行列交叉位置累计+1
Next
Next
[l1:ar16] = brr '输出结果brr到工作表
MsgBox Format(Timer - tms, "0.000s")
End Sub
虽然没有dim变量,但是做了比较充分的注释。
或许新手依然不能一下子看懂,
但到底哪一个代码更容易让人明白,应该是一个不争的事实。
|
|