我有一个起始角度(34.905943),结束角度(120.7377)和半径(8274.4)。我想使用VBA制作一个图表,该VBA采用起始角度,让VBA添加一个数字以使其下面的单元格35(在下面的单元格中基本上具有向上舍入的值),并且对于35以下的每个单元格,添加0.1,直到120.7,并取差值使结束角度为120.7377 .....下面所需输出表的一个例子:
34.905943
35
35.1
35.2
。
。
。
120.6
120.7
120.7377 < BR />
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中使用超级!
我的代码可能不太好,因为我还是初学者...我提前道歉。
P.S,我不太确定如何提出这个问题,所以如果已经有一个你知道的帖子回答了这个问题请给我一个链接,而不是一堆下来的投票:)
谢谢,
杰克
答案 0 :(得分:1)
我不会用循环来做这件事 - 如果您只是玩一些公式,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表。或者,否则,只需注释掉将公式转换为值的行。
希望有助于/做到这一点!