我刚刚开始学习在Excel VBA中进行编程,但遇到了问题。
我想用程序绘制螺旋线,但是不能很好地解决它。
我只想使用for
和do until
和do while
个周期。
这是我的代码:
Sub spiral()
For i = 1 To 16
xmm = xmm - 1
ymm = ymm - 1
Do Until xp = i
xp = xp + 1
Cells(5 + xp, 5) = i
Loop
Do Until yp = i
yp = yp + 1
Cells(5 + xp, 5 + yp) = i + 1
Loop
Do Until xm > xp
xm = xm + 1
Cells(5 + xp + i * xmm, 5 + yp) = i + 2
Loop
Do Until ym > yp
ym = ym + 1
Cells(5 + xp + xmm, 5 + yp + i * ymm) = i + 3
Loop
Next i
End Sub
谢谢!
答案 0 :(得分:3)
我想不出你需要这个的任何实际原因,但是那就是说,我经常在浪费时间去处理一些奇怪的任务,“只是看我是否可以。”
最近,螺旋形是我在 SQL 中玩过的一项自我分配的挑战,尽管它起源于 Access中的圆圈 VBA 来自我的另一个无用项目:
这教会了我许多概念,包括如何在网格上绘制圆。
绘制圆圈几乎与在该时钟上绘制指针相同。如果不是只画时钟的整条线,而是只画了它的 tip (即半径),一直到360°,那我就有一个圆。
说那十倍快!
有一天,我想知道利用Stack Exchange Data Explorer(SEDE)的图形功能将圆形代码转换为 SQL Server 有多困难。图是在网格上绘制的,所以它是相同的概念。
以下是几种结果之一(再次都是无效的):
单击运行查询,然后在完成计算后,单击 Graph 标签。 (您还需要使用您的Stack Exchange ID登录或进行验证码。)在用户提示下(SQL下方)可以使用各种常量。
然后在某个时候我想知道螺旋。
(...但可能应该是我该死的时候了?Naaaa,哈哈)
螺旋线只是一个修改过的圆,只是半径随着您沿圆周的前进而减小(或增大)-并且您不会在360°处停下来-而是继续前进,并以稳定的速度不断改变半径。
再次,单击运行查询,然后在完成计算后,单击 Graph 标签。 (您还需要使用您的Stack Exchange ID登录或进行验证码。)在用户提示下(SQL下方)可以使用各种常量。
我今天不会在螺旋上浪费更多的时间,但是如果我要在Excel工作表单元格中绘制一个,我会将工作表上的所有单元格调整为一个很小的正方形网格(也许width = 1,height = 10),然后我将从SQL示例中借用代码,将其改编为Excel(这不会花费很多工作)。
Access VBA示例可能更难以适应,因为正在进行许多控件的编程操作(无法在运行时完成)。
或者,可以在Excel中使用控件(即线条)代替您迄今为止尝试的网格方法来复制Access示例。
答案 1 :(得分:2)
基于此线程(Looping in a spiral)的一些答案,我设法提供了该解决方案
Sub spiral()
x = 0
y = 0
d = 1
m = 1
i = 1
j = 1
Do While i < 6
Do While 2 * x * d < m
Cells(x + 5, y + 5).Value = j
x = x + d
j = j + 1
Loop
Do While 2 * y * d < m
Cells(x + 5, y + 5).Value = j
y = y + d
j = j + 1
Loop
d = -1 * d
m = m + 1
i = i + 1
Loop
End Sub
不确定您是否正在寻找它,因为您没有指定要实现的确切输出。