Как я могу написать код, который делает спираль? - PullRequest
0 голосов
/ 04 сентября 2018

Я только начал изучать программирование в 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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Основываясь на некоторых ответах из этой темы ( Цикл по спирали ), мне удалось прийти с этим решением

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

Не уверен, что это то, что вы ищете, поскольку вы не указали точный результат, который хотите достичь.

0 голосов
/ 04 сентября 2018

Я не могу придумать ни одной практической причины, по которой вам это нужно, но это говорит о том, что я часто трачу время на то, чтобы возиться со странными заданиями "просто посмотреть, смогу ли я" ?


Доступ к VBA Circles

Недавно спираль была самостоятельной задачей, с которой я играл в SQL , хотя она возникла с кружком в Доступ VBA из другого моего бесполезного проекта:

Это научило меня нескольким понятиям, включая , как рисовать круг на сетке .

image

Рисование круга - это почти то же самое, что рисование стрелок на этих часах. Если вместо того, чтобы рисовать всю линию стрелки часов, я вместо этого нарисую только наконечник ее (иначе, радиус), все вокруг, 360 °, то у меня есть круг.


Круг SQL

Скажите , что в десять раз быстрее!

Затем однажды я подумал, как трудно будет преобразовать код круга в SQL Server , используя графическую функцию Stack Exchange Data Explorer (SEDE). График рисуется на сетке, так что это та же концепция.

Вот один из нескольких результатов (опять же, все бесполезно):

Нажмите Запустить запрос , а затем, когда он завершит вычисление, перейдите на вкладку График . (Вам также нужно будет либо войти в систему со своим Stack Exchange ID, либо выполнить капчу.) Существуют различные константы, с которыми вы можете играть в пользовательских приглашениях (ниже SQL).

image


Спираль SQL

Затем в какой-то момент я задумался о спиралях .
(... но, наверное, мне пора было получить жизнь? Наааа, смеется)

Спираль - это просто модифицированный круг за исключением того, что радиус уменьшается (или увеличивается) по мере того, как вы продвигаетесь по окружности - и вы не останавливаетесь на 360 ° - вместо этого просто продолжайте идти и идти, и постоянно меняя радиус с постоянной скоростью.

Опять же, нажмите Запустить запрос , а затем, когда он завершит вычисление, перейдите на вкладку График . (Вам также нужно будет либо войти в систему со своим Stack Exchange ID, либо выполнить капчу.) Существуют различные константы, с которыми вы можете играть в пользовательских приглашениях (ниже SQL).

image


Спираль в Excel

Сегодня я не собираюсь тратить больше времени на спирали, но если бы я собирался нарисовать одну в ячейках рабочего листа Excel, я бы изменил размеры всех ячеек на рабочем листе до крошечной квадратной сетки (возможно, ширина = 1, высота = 10), а затем я позаимствовал бы код из примера SQL, адаптировав его к Excel (что не займет много времени).

Пример Access VBA может быть более запутанным для адаптации, так как происходит много программных манипуляций с элементами управления (что невозможно сделать во время выполнения).

Или пример Access может быть продублирован в Excel с использованием элементов управления (т. Е. Линий) вместо метода сетки, который вы пробовали до сих пор.


Дополнительная информация:

...