Генерация таблицы переменных из введенных значений - PullRequest
0 голосов
/ 01 июня 2018

У меня есть начальный угол (34.905943), конечный угол (120.7377) и радиус (8274.4).Я хочу построить график с использованием VBA, который принимает начальный угол, добавить в VBA число, чтобы сделать ячейку под ним 35 (по существу, иметь округленное значение в ячейке ниже), а для каждой ячейки до 35 добавить 0,1, пока120,7, и возьмите разницу, чтобы сделать конечный угол 120,7377 ..... пример желаемой выходной таблицы ниже:

34,905943
35
35,1
35,2
.
.
.
120.6
120.7
120.7377

Sub Starting_Angle()

Range("A6").Copy 'This is calculated via the x and y coordinates in A3 and B3 respectively using =DEGREES(ATAN(A3/B3)) [the staring angle]
Range("A14").PasteSpecial Paste:=xlPasteValues ' insert the starting angle


Range("A12") = (Range("B9") - Range("A9")) / 0.1 ' find the number of iterations of angle +0.1 that are needed

Dim i As Integer

For i = 1 To Range("A12")

If Range(Cells(i + 14, 1)) < Range("B9") Then

Range("Q1").Copy
Range("A14", Cells(i + 15, 1)).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
Continue
Next
End If


End Sub

Мне также удалось округлить значения вне VBA, используя потолок, а затем вычестьчтобы получить разницу, а затем добавить это, чтобы получить желаемое значение 35. Однако, если бы я мог побеспокоить вас сделать это в VBA, это было бы супер!

Мой код, вероятно, не очень хорош, потому что я все ещеновичок в этом ... я заранее извиняюсь.

PS, я не слишком уверен, как сформулировать вопрос, так что, если вы уже знаете, что ответ на этот вопрос, пожалуйста, оставьте меняссылка, а не клокh голосов вниз:)

Спасибо,
Джейк

1 Ответ

0 голосов
/ 01 июня 2018

Я бы не стал делать это с циклом - Excel уже идеально подходит для этого, если вы просто поиграете с некоторыми своими формулами.В VBA ваш код будет выглядеть следующим образом (с комментариями для объяснения каждого шага):

Sub Starting_Angle()

    ' Insert starting angle into A14:
    Range("A14").Formula = "=A6"

    ' Round A14 up to the nearest 0.1, but also take into account that the starting angle may already be a multiple of 0.1:
    Range("A15").Formula = "=IF(A14 <> CEILING(A14,0.1),MIN(CEILING(A14,0.1),$D$6),A14+0.1)"

    ' Add 0.1 to each corresponding cell below until you reach the value in cell D6, then, the last value needs to equal D6. After that, just leave blanks:
    Range("A16:A10000").FormulaR1C1 = "=IFERROR(IF(R[-1]C=R6C4,"""",MIN(R[-1]C+0.1,R6C4)),"""")"

    ' Convert all the formulas into values:
    Range("A14:A10000").Value = Range("A14:A10000").Value

End Sub

Обратите внимание, что в моей средней формуле используется обозначение R1C1.Это просто облегчает обращение к ячейке над каждой ячейкой.Чтобы увидеть, как это выглядит в обычном Excel, поставьте точку останова сразу после этой строки, а затем посмотрите на свой лист Excel.Или, в противном случае, просто закомментируйте строку, которая преобразует формулы в значения.

Надеюсь, что помогает / делает трюк!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...