所以这是我数据的一个例子:
回答 1. 1
回答 2. 阿拉伯数字
回答 3. 5
回答 4. 7
回答 5. 8
回答 6. 9
回答 7. 10
我想做的是选择一个范围(例如,从 A2 到有数据的行的末尾(,如果序列中的下一个数字不等于前一个数字 + 1,则插入一行。将该数字(上一个数字 +1(填充到刚刚创建的行中,然后跳转到下一行并重新计算。这将一直持续到程序遇到空值。
这就是我想象的伪
Range = select range in column
For range when value is not null
If A3 <> value in A2 +1
Insert row below A2
Insert value into new A2 (should Now be blank) as sum of A2 + 1
Then go to next row
Go back to blank check for loop
Else
Go to next row
Go back to blank check
End for
我不完全确定我是否错过了什么,但我对 VBA 中的循环很糟糕,因为自从我上次使用它以来已经很多年了。 抱歉格式化,在手机上这样做了
提前感谢!
你通过代码的逻辑相当合理,但如果你打算编程更多,练习实际语法永远不会有什么坏处。我已经更改了它,以便它检查单元格是否为空,我假设这就是您所说的 Null,但如果您实际上是指 NULL,那么您可以将isempty
更改为isnull
.我已经允许你选择一个范围,但不是真的。它要求您单步执行代码并将maxrow
更改为要查看的最后一行。请记住,如果代码之间缺少数字,则最多只能查找 100 个值,包括宏放置的值。
如果希望用户能够让用户更轻松地输入最后一行号,请考虑使用InputBox
Option Explicit
Sub numberfiller()
Dim i As Long
Dim maxrow As Long
i = 2
maxrow = 100
With ThisWorkbook.Worksheets(1)
While Not IsEmpty(.Range("A" & i).Value) And i < maxrow
If Not .Range("A" & i).Value = .Range("A" & i - 1).Value + 1 Then
.Range("A" & i).EntireRow.Insert shift:=xlDown
.Range("A" & i).Value = .Range("A" & i - 1).Value + 1
Else
i = i + 1
End If
Wend
End With
End Sub