|
楼主 |
发表于 2018-6-18 21:13
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Sub 冷码()
Dim brr(), sr()
tms = Timer
n = [c2]'
m = Cells(n, 2).End(3).Row - 4 老师:我让C2维持原状,把数据源改为A列,计算列改为B列,没有改动m = Cells(n, 2).End(3).Row - 4 里边的2
If m < 5 Then m = n - 4 ,为什么得出的结果仍然正确?
' [C5].Resize(m) = ""
ar = [B5].Resize(m)
ReDim sr(1 To m, 1 To 1)
ReDim brr(0 To 2)
For I = 1 To m
t = ar(I, 1): t1 = Left(t, 1)
brr(t1) = brr(t1) + 1: If brr(t1) = 1 Then k1 = k1 + 1
If k1 = 2 Then k1 = I: Exit For
Next
s1 = 3 - Left(ar(1, 1), 1) - Left(ar(k1, 1), 1)
ReDim brr(0 To 2)
For I = 1 To m
t = ar(I, 1): t2 = Right(t, 1)
brr(t2) = brr(t2) + 1: If brr(t2) = 1 Then k2 = k2 + 1
If k2 = 2 Then k2 = I: Exit For
Next
s2 = 3 - Right(ar(1, 1), 1) - Right(ar(k2, 1), 1)
s = s1 & s2
If k1 > k2 Then k0 = k1 Else k0 = k2
For I = k0 To m
t = ar(I - 1, 1): t11 = Left(t, 1): t12 = Right(t, 1)
t = ar(I, 1): t21 = Left(t, 1): t22 = Right(t, 1)
On Error GoTo JS
If t11 = t21 Then s1 = Left(s, 1) Else s1 = 3 - t11 - t21
If t12 = t22 Then s2 = Right(s, 1) Else s2 = 3 - t12 - t22
s = s1 & s2
sr(I, 1) = s
Next
JS:
[C5].Resize(m) = sr
MsgBox Format(Timer - tms, "0.000s")
End Sub |
|