【问题标题】:How can I write code that makes a spiral?我怎样才能写出螺旋形的代码?
【发布时间】:2018-09-04 07:43:28
【问题描述】:

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

谢谢!

【问题讨论】:

  • 取决于,你想得到多精确?

标签: vba excel spiral


【解决方案1】:

我想不出你需要这个的任何实际原因,但话虽如此,我经常浪费时间处理奇怪的任务,“只是为了看看我能不能做。” ?


访问 VBA 圈子

最近,spiral 是我在 SQL 中玩的一个自我分配的挑战,尽管它起源于 Access 中的 circle VBA来自我另一个无用的项目:

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

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


SQL 圈

快说那个十倍!

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

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

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


SQL 螺旋

然后在某个时候,我想知道螺旋
(......但也许应该是我获得生命的时候了?Naaaa,大声笑)

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

再次点击Run Query,然后在计算完成后点击Graph标签。 (您还需要使用您的 Stack Exchange ID 登录,或者进行验证码。)您可以在用户提示(在 SQL 下方)中使用各种常量。


Excel 中的螺旋形

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

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

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


更多信息:

【讨论】:

  • @DarrenBartrup-Cook - 在研究提供的链接后,我了解到您引用的值实际上是平均片刻的持续时间.我现在将通过说“我马上点击添加评论来平衡这个平均值。”
  • @DarrenBartrup-Cook - 啊,宇宙再次平衡了。
  • 我只是想练习如何在循环算法中使用循环的方法。我的一个朋友写了一个不到 13 行的代码,所以它看起来是一个很好的逻辑任务。
【解决方案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

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

【讨论】:

  • 哇,谢谢!这对我真的很有帮助。现在,我看到了嵌入式循环是如何工作的。 :)
  • 没问题!很高兴我能提供帮助 :) 如果您认为它解决了您的问题,请考虑将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多