ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 逆时针反向累加之VBA解法讲解

逆时针反向累加之VBA解法讲解

作者:绿色风 分类: 时间:2022-08-18 浏览:77
楼主
kevinchengcw
逆时针反向累加之VBA解法讲解


题意:从中心开始,围绕中心点逆针旋转,步进为1进行累加,得到如上图结果

 
我们先来看一下可找到的规律

 
1开始,单元格连续增长范围在同一方向上呈递增的趋势,而相对于中心点1的位移也呈同样趋势,这样我们就找到了规律,可以将增长情况分成四段,设每段的相对中心的行列偏移量为N,则每循环一圈则N的值加1,偏移范围为-NN之间,现在我们只需要分成四段来写右上左下四个方向的增长情况即可达到目的。

第一步:取得中心点位置坐标,计算出中心点处坐标的行列的最小值,以确定循环次数
第二步:分成四段来分别完成四段区域在循环增长时的取值并写入相应单元格
第三步:美化程序结果

  1. Sub test()
  2. Dim Rng As Range
  3. Dim A, B, C, D, M, N, I, mRange As Integer
  4. If [a1] = "" Then
  5.     MsgBox "请先在A1单元格里输入起点单元格坐标", vbOKOnly, ""
  6.     Exit Sub
  7. End If
  8. Set Rng = Range([a1].Value)
  9. M = 1
  10. I = 1
  11. mRange = WorksheetFunction.Min(Rng.Column, Rng.Row) * 2 * (WorksheetFunction.Min(Rng.Column, Rng.Row) * 2 - 1)
  12. Rng = M
  13. Rng.Interior.Color = vbYellow
  14. M = M + 1
  15. Rng.Offset(0, 1) = M
  16. Rng.Offset(0, 1).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
  17. Do While I < Rng.Column And I < Rng.Row
  18.     For A = Rng.Offset(-I, I).Column To Rng.Offset(-I, -I + 1).Column Step -1
  19.         M = M + 1
  20.         Cells(Rng.Row - I, A) = M
  21.         Cells(Rng.Row - I, A).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
  22.     Next A
  23.     For B = Rng.Offset(-I, -I).Row To Rng.Offset(I - 1, -I).Row
  24.         M = M + 1
  25.         Cells(B, Rng.Column - I) = M
  26.         Cells(B, Rng.Column - I).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
  27.     Next B
  28.     For C = Rng.Offset(I, -I).Column To Rng.Offset(I, I).Column
  29.         M = M + 1
  30.         Cells(Rng.Row + I, C) = M
  31.         Cells(Rng.Row + I, C).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
  32.     Next C
  33.     I = I + 1
  34.     For D = Rng.Offset(I - 1, I).Row To Rng.Offset(-I + 1, I).Row Step -1
  35.         M = M + 1
  36.         Cells(D, Rng.Column + I) = M
  37.         Cells(D, Rng.Column + I).Interior.Color = RGB(255 - Int(M / mRange * 255), Int(M / mRange * 255), Int(M / mRange * 255))
  38.     Next D
  39. Loop
  40. End Sub

逆时针反向累加之VBA解法07版.rar
逆时针反向累加之VBA解法.rar
逆时针反向累加之VBA解法讲解word版.rar
2楼
xyf2210
好东西
3楼
纵鹤擒龙水中月
学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap