增量单元:VBA逻辑算法

时间:2018-02-17 12:21:43

标签: excel vba excel-vba

我正在尝试用数字填充从A3到A100的单元格,如图所示。每三个单元格,单元格值增加1位数。除了将VBA片段作为答案,这将是非常好的,我真的很感激,如果有人能够一步一步地解释构建代码背后的逻辑。为了将这些知识应用于未来和更复杂的工作中,我需要理解为了实现这一目标。

A3 ---> 1

A4 ---> 1

A5 ---> 1

A6 ---> 2

A7 ---> 2

A8 ---> 2

A9 ---> 3

A10 - > 3

A11 - > 3

A12 - > 4

A13 - > 4

A14 - > 4

(...)

4 个答案:

答案 0 :(得分:4)

手动,在 A3 中输入:

=ROUNDUP(ROWS($1:1)/3,0)

并复制下来。

使用 VBA

Sub qwerty()
    Range("A3:A100").Formula = "=ROUNDUP(ROWS($1:1)/3,0)"
End Sub

如果您不想在最终结果中使用公式:

Sub poiuyt()
    With Range("A3:A100")
        .Formula = "=ROUNDUP(ROWS($1:1)/3,0)"
        .Value = .Value
    End With
End Sub

答案 1 :(得分:2)

通过数据字段阵列和灵活行设置的VBA方法

仅显示使用数据字段数组的另一种可行方法,并允许基于@CalumDa定义甚至 各个开始和结束行 修改后的公式(假设您始终在前三行中使用 1,1,1 开始):

<强>代码

Option Explicit

Sub FlexibleRange()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("MySheet")  ' << change to your sheet name
Dim start As Long, last As Long, i As Long                        ' declare variables
start = 3: last = 100                                             ' << change to your individual rows
Dim v: ReDim v(start To last, 1 To 1)                             ' variant datafield array, counter
For i = start To last: v(i, 1) = Int((i - start) / 3) + 1: Next i ' calculate values
ws.Range("A" & start & ":A" & last) = v                           ' write numbers to column A
End Sub

答案 2 :(得分:1)

加入

A3 = 1
A4 = 1
A5 = 1
A6 = A3 + 1
A7 = A4 + 1
A8 = A5 + 1

然后将A6复制到A8到A100

答案 3 :(得分:0)

为什么你需要在这里使用VBA?您可以在工作表上使用以下公式。它不依赖于上面的单元格,所以它会给你正确的答案,无论你放在哪一行:

=INT((ROW()-3)/3)+1

如果你真的想要VBA,那就没什么好解释的了。它只是在您需要的单元格中放置相同的公式:

Public Sub FillColumnA()
    ThisWorkbook.Worksheets("Sheet1").Range("A3:A100").Formula = "=INT((ROW()-3)/3)+1"
End Sub