我怎样才能写出螺旋形的代码?

How can I write code that makes a spiral?

我刚开始在 Excel VBA 学习编程,但遇到了问题。 我想用一个程序画一个螺旋线,但是一个解决不了。 我只想使用 fordo untildo 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

谢谢!

我想不出你需要这个的任何实际原因,但话虽如此,我经常浪费时间处理奇怪的任务 "just to see if I can."


访问 VBA 个圈子

最近 螺旋 是我在 SQL 玩的一个自我分配的挑战,虽然它起源于 circle in Access VBA from another useless project of mine:

这教会了我很多概念,包括如何在网格上画圆

画圆圈的过程几乎与在时钟上画指针的过程相同。如果我不绘制时钟指针的整条线,而是只绘制它的尖端(又名半径),一直到 360°,那么我有一个圆圈。


SQL圈

那个快十倍!

然后有一天我想知道将圆代码转换为 SQL Server 有多难,利用 Stack Exchange Data Explorer ( SEDE)。图表是在网格上绘制的,所以它是相同的概念。

这是几个结果之一(同样,都是无用的):

单击运行查询,然后在计算完成后单击图形 选项卡。 (您还需要使用您的 Stack Exchange ID 登录,或执行验证码。)您可以在用户提示中使用各种常量(在 SQL 下方)。


SQL 螺旋

然后在某个时候我想知道 spirals
(...但我应该是时候开始生活了?Naaaa,哈哈)

螺旋只是一个修改过的圆,除了半径会随着你绕着圆周前进而减小(或增加)——而且你不会停在 360°——而是继续前进,并以稳定的速度不断改变半径。

再次单击运行查询,然后在计算完成后单击图表选项卡。 (您还需要使用您的 Stack Exchange ID 登录,或执行验证码。)您可以在用户提示中使用各种常量(在 SQL 下方)。


在Excel

中螺旋上升

我今天不会再在螺旋上浪费时间,但如果我要在 Excel 工作表单元格中绘制一个,我会将工作表上所有单元格的大小调整为一个小方格(也许 width=1,height=10),然后我会从 SQL 示例中借用代码,将其改编为 Excel(这不需要太多工作)。

Access VBA 示例可能更难以适应,因为有很多控件的编程操作正在进行(无法在运行时完成)。

或者,可以在 Excel 中使用控件(即线条)而不是您目前尝试的网格方法来复制 Access 示例。


更多信息:

基于此线程 (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

不确定这是否是您正在寻找的东西,因为您没有指定您想要实现的确切输出。