VBA Excel - 如何根据另一个单元格的值自动填写excel中的系列?

时间:2016-04-29 01:22:51

标签: excel vba excel-vba

我在excel电子表格中有两列。 '距离'和'承载'。如下图所示,第一个距离值为 58.23 ,第一个距离的方位值为 -43.45 ,如图1所示。

Image 1

我想将距离分成一个米,如1,2,3,4 ... 58(因此58米被分成58个相等的部分)在一列(距离1)并填写下一列值为-43.45(Bearing1)从1到58,如图2所示。我想在新的表格中生成它。

Image 2

在第一行之后,代码应该转到下一个距离行(即20.70)并重复步骤1,但应将其添加到之前的1到58个单元格中。即58,59,60并用 -42.48 填充bearing1列值,依此类推。如图3所示。

Image 3

我是VBA的新手,如果有人可以帮助我,我会非常乐于助人:)

1 个答案:

答案 0 :(得分:0)

一些行计数器和单一类型变量以及一些循环都可以。

由于您不熟悉VBA,因此不会考虑性能优化。希望下面未经测试的代码会让你喜欢做VBA编程。代码应该自我解释目的。询问是否不理解。

这里假设数据按照屏幕截图列在A列和B列上。输出数据将来自D2和E2。

Option Explicit

Sub FillDistanceBearing()
    Dim lRowOutput As Long ' Row to start storing data
    Dim lDistance As Long ' Incremental Distance
    Dim lLoop1 As Long, lLoop2 As Long ' Row counters for Loops
    Dim gDistance As Single, gBearing As Single ' Variables to store the points

    lRowOutput = 2 ' Row to start storing the series at some column
    lDistance = 0 ' Start from zero

    ' #1 - Loop the main data
    lLoop1 = 2 ' For A2
    Do Until IsEmpty(Range(lLoop1, "A"))
        ' Store the Distance|Bearing values into variables
        gDistance = Range(lLoop1, "A").Value
        gBearing = Range(lLoop1, "B").Value
        ' #2 - Loop the distance from 1 to the integer value of the distance
        For lLoop2 = 1 To Int(gDistance)
            lDistance = lDistance + 1 ' Increment distance
            ' Store the values in Columns D and E for Distance1, Bearing1
            Range(lRowOutput, "D").Value = lDistance
            Range(lRowOutput, "E").Value = gBearing
            lRowOutput = lRowOutput + 1 ' Move to next row for storing output
        Next
        lLoop1 = lLoop1 + 1 ' Move to next data row
    Loop

End Sub