Vba 从输入值生成变量表

Vba 从输入值生成变量表,vba,excel,for-loop,Vba,Excel,For Loop,我有一个起始角(34.905943)、结束角(120.7377)和半径(8274.4)。我想用VBA做一个图,它取起始角,让VBA加上一个数字,使下面的单元格变成35(基本上是下面单元格中的向上舍入值),对于35以下的每个单元格,加上0.1,直到120.7,然后取差值,使结束角变成120.7377。。。。。下面是所需输出表的示例: 34.9059433535.135.2120.6120.7120.7377 Sub Starting_Angle() Range("A6").Copy 'This

我有一个起始角(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
Sub-start_-Angle()
范围(“A6”)。复制“这是通过A3和B3中的x和y坐标分别使用=度(ATAN(A3/B3))[凝视角度]计算得出的
范围(“A14”)。粘贴特殊粘贴:=xlPasteValues'插入起始角度
范围(“A12”)=(范围(“B9”)-范围(“A9”))/0.1'查找所需的角度+0.1的迭代次数
作为整数的Dim i
对于i=1至范围(“A12”)
如果范围(单元格(i+14,1))小于范围(“B9”),则
范围(“Q1”)。副本
范围(“A14”,单元格(i+15,1))。粘贴特殊粘贴:=xlPasteValues,操作:=xlAdd
继续
下一个
如果结束
端接头
我还能够使用上限对VBA之外的值进行四舍五入,然后减去以获得差值,然后将其相加以获得所需的35。不过,如果我能麻烦你在VBA中实现这一点,那就太棒了

我的代码可能不是很好,因为我仍然是这方面的初学者。。。我事先道歉

另一方面,我不太确定该如何表达这个问题,所以如果你知道已经有一篇帖子回答了这个问题,请给我留下一个链接,而不是一堆反对票:)

谢谢,

杰克

我不会用循环来做这件事——如果你只是玩弄一下你的一些公式,Excel已经非常适合了。在VBA中,您的代码如下所示(注释以解释每个步骤):

Sub-start_-Angle()
'将起始角度插入A14:
范围(“A14”)。公式=“=A6”
'将A14四舍五入至最接近的0.1,但也要考虑到起始角可能已经是0.1的倍数:
范围(“A15”)。公式=“=如果(A14上限(A14,0.1),最小值(上限(A14,0.1),$D$6),A14+0.1)”
'将0.1添加到下面的每个对应单元格,直到达到单元格D6中的值,然后,最后一个值需要等于D6。之后,只需留空:
范围(“A16:A10000”)。公式1C1=“=IFERROR(如果(R[-1]C=R6C4)”,最小值(R[-1]C+0.1,R6C4)),”
'将所有公式转换为值:
范围(“A14:A10000”)。值=范围(“A14:A10000”)。值
端接头
请注意,我的中间公式使用了
R1C1
符号。这样就很容易引用每个单元格上方的单元格。要查看它在普通excel中的外观,请在该行后面加一个断点,然后查看excel工作表。否则,只需注释掉将公式转换为值的行即可


希望这能帮上忙

只是想了解一下,你能回顾一下你在哪些单元格中有哪些值吗?在何处存储宏将使用的值34.905、120.7377等。另外,您是想继续存储所有的额外数据,还是只想将数据输出到A14以下的范围?请解释更多…嗨@JohnBustos,初始值存储如下:分别为顶部x、y A3、B3,底部x、y D3、E3。起始角A6,结束角D6。起点角上限A9,两者之差,A10,表A14的起点。。。。。。A3和B3中存储的值分别为4733.7和6784.1。D3和E3:4096.3,-6888.6。简单地说,你想要A14=A6;A15将A14四舍五入至最接近的0.1(除非A14已经是0.1的倍数);保持A列向下增长0.1,直到达到数字Yes@JohnBustos就是这样:)完美!!谢谢:)很高兴它成功了-我编辑了一些我的评论,试图解释更多的“为什么”-希望它也有助于你的一般理解。如果角度从270到22.19527呢?我需要一些能持续到359.9,0,然后持续到22.19529的东西。我这样做是为了将它循环回0,但是它不会在22.19527停止。。。它一直运行,直到达到2000个单元格范围(“K16:K2000”)。公式1C1=“=IFERROR(如果(R[-1]C=359.9”,“0”,“MIN(R[-1]C+0.1359.9)),“0”)”处理这一问题的最简单方法是添加一个“辅助列”,该列在需要时将角度规格化为360以上(使用
D6
的第一个简单检查,但是,即使这样也不能解决正在发生的超过一个完整革命的解决方案……你必须更具体地回答你的问题/标准,以了解你想要达到的复杂程度
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