|
1学分
最大连出的代码
最大连出:返回第7行.
就是从第9行 至 E列不为空的最后一行;比如:H9:H6825,这个范围内,出现连续不为空的值(值的范围是0-9个位数),连续最多的就返回出来.
有另一个情况,就是比如:H9:H834,如果H834的上面直到H834出现连续不为空的值已经超过了其它的最多连续的值,那么就依旧显示其它的最多连续的值(如13). 就像H列,直到H834行连续出现了17次,那么除此之外最多只连续出现了13次,那么依旧显示13次,直到有空值出现.
这个代码用快速的数组啊,字典之类方法怎么写啊?还有一次填入"断断,1-100"这101个表格中的H:K列.(因为太大,所以这里就显示出了(断断和1,2这三个表).
请老师帮忙看看.因为公式太慢了,所以想用VBA.
Sub test()
Dim arr, brr(), arrTable(), i%, j%, n%, max%, irow%, k%, rng As Range
ReDim arrTable(0 To 2)
For i = 1 To UBound(arrTable)
arrTable(i) = CStr(i)
Next i
arrTable(0) = "断断"
For k = 0 To UBound(arrTable)
With Worksheets(arrTable(k))
Set rng = .Range("e:e").Find("*", , xlValues, , , xlPrevious)
If Not rng Is Nothing Then irow = rng.Row
If irow < 9 Then GoTo noData
arr = .Range("h9:k" & irow).Value
ReDim brr(1 To 2, 1 To UBound(arr, 2))
For j = 1 To UBound(arr, 2)
max = 0
n = 0
For i = 1 To UBound(arr)
If Len(arr(i, j)) Then
n = n + 1
Else
If n > max Then max = n
n = 0
End If
Next i
brr(1, j) = max
brr(2, j) = n
Next j
.Range("h7").Resize(2, UBound(brr, 2)) = brr
End With
noData:
Next k
End Sub
|
最佳答案
查看完整内容
Sub test()
Dim arr, brr(), arrTable(), i%, j%, n%, max%, irow%, k%, rng As Range
ReDim arrTable(0 To 2)
For i = 1 To UBound(arrTable)
arrTable(i) = CStr(i)
Next i
arrTable(0) = "断断"
For k = 0 To UBound(arrTable)
With Worksheets(arrTable(k))
Set rng = .Range("e:e").Find("*", , xlValues, , , xlPrevious)
If Not rng Is Nothing ...
|