我正在尝试用数字填充从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
(...)
答案 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