这个不用VBA那就太难了
给一段代码试试吧
Sub AA()
Dim r As Integer, c As Integer, i As Integer
r = 2
c = 3
Cells(2, 3) = Cells(2, 1)
For i = 3 To Cells(65536, 1).End(xlUp).Row - 1
If c = 4 Then
c = 3
r = r + 1
Cells(r, c) = Cells(i - 1, 1)
ElseIf Cells(i, 1) > Cells(i - 1, 1) + 1 + 0.001 Then
c = 4
Cells(r, c) = Cells(i - 1, 1)
End If
Next
Cells(r, 4) = Cells(i, 1)
End Sub
运行前:
运行代码:
运行后:
完全可以用公式解决。需要额外加两列作为辅助。
先看看上图,再看我的公式:
B2公式为:=IFERROR(IF(A2=A1+1,"",A2),A2)
按回车键结束公式。
C2公式为:=IFERROR(IF(A2=A3-1,"",A2),A2)
按回车键结束公式。
D2公式为:=INDEX(B:B,SMALL(IF(B:B<>"",ROW($1:$65536),4^8),ROW(A2)))&""
【注意】:这里要同时按 SHIFT+CTRL+回车键 结束公式。
E2公式为:=INDEX(C:C,SMALL(IF(C:C<>"",ROW($1:$65536),4^8),ROW(A2)))&""
【注意】:这里要同时按 SHIFT+CTRL+回车键 结束公式。
最后,同时选中B2 C2 D2 E2单元格,下拉,一起往下填充四列的公式就行了。
1>鼠标单击序号1的单元格,输入1。
2>将鼠标箭头移至该单元格右下角的小黑方块上,鼠标变成黑色十字,双击后可以看到序号自动向下复制填充
注:(中间如果没有间隔,就是说如果该列全部是空白单元格,会一直填充到最下边,所以如果中间需要中断可以提前在需要终端的地方随便输入个什么字符)
3>剩下要做的就是在自动填充的最下边一个单元格右下角的自动填充选项上单击鼠标左键选“填充序列”即可。
有些词不达意,也不知道是不是你想要的。。。
函数复杂
直接用代码完成
Sub 分段()
Dim i As Long, j As Long
Dim iRow As Long, lastRow
iRow = Range("B65536").End(xlUp).Row
Range("D2:D" & iRow) = "=C2-B2+1"
lastRow = 2
For i = 2 To iRow
For j = 1 To Cells(i, "D").Value
Cells(lastRow, "A") = Cells(i, "B") + j - 1
lastRow = lastRow + 1
Next j
Next i
Columns("d") = ""
End Sub
分端没有一个标准么???需要有分段标准才可以。
理解你的意思了,在excel里面只能做到这样的情况。我的范例里面一共分为三段。
1-4,6,8-9