楼主 kevinchengcw |
逆时针反向累加之VBA解法讲解
题意:从中心开始,围绕中心点逆针旋转,步进为1进行累加,得到如上图结果
我们先来看一下可找到的规律
从1开始,单元格连续增长范围在同一方向上呈递增的趋势,而相对于中心点1的位移也呈同样趋势,这样我们就找到了规律,可以将增长情况分成四段,设每段的相对中心的行列偏移量为N,则每循环一圈则N的值加1,偏移范围为-N到N之间,现在我们只需要分成四段来写右上左下四个方向的增长情况即可达到目的。
第一步:取得中心点位置坐标,计算出中心点处坐标的行列的最小值,以确定循环次数 第二步:分成四段来分别完成四段区域在循环增长时的取值并写入相应单元格 第三步:美化程序结果
- Sub test()
- Dim Rng As Range
- Dim A, B, C, D, M, N, I, mRange As Integer
- If [a1] = "" Then
- MsgBox "请先在A1单元格里输入起点单元格坐标", vbOKOnly, ""
- Exit Sub
- End If
- Set Rng = Range([a1].Value)
- M = 1
- I = 1
- mRange = WorksheetFunction.Min(Rng.Column, Rng.Row) * 2 * (WorksheetFunction.Min(Rng.Column, Rng.Row) * 2 - 1)
- Rng = M
- Rng.Interior.Color = vbYellow
- M = M + 1
- Rng.Offset(0, 1) = M
- Rng.Offset(0, 1).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
- Do While I < Rng.Column And I < Rng.Row
- For A = Rng.Offset(-I, I).Column To Rng.Offset(-I, -I + 1).Column Step -1
- M = M + 1
- Cells(Rng.Row - I, A) = M
- Cells(Rng.Row - I, A).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
- Next A
- For B = Rng.Offset(-I, -I).Row To Rng.Offset(I - 1, -I).Row
- M = M + 1
- Cells(B, Rng.Column - I) = M
- Cells(B, Rng.Column - I).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
- Next B
- For C = Rng.Offset(I, -I).Column To Rng.Offset(I, I).Column
- M = M + 1
- Cells(Rng.Row + I, C) = M
- Cells(Rng.Row + I, C).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
- Next C
- I = I + 1
- For D = Rng.Offset(I - 1, I).Row To Rng.Offset(-I + 1, I).Row Step -1
- M = M + 1
- Cells(D, Rng.Column + I) = M
- Cells(D, Rng.Column + I).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
- Next D
- Loop
- End Sub
逆时针反向累加之VBA解法07版.rar 逆时针反向累加之VBA解法.rar 逆时针反向累加之VBA解法讲解word版.rar |