我在 Excel 中有一个数字列表:
1 2 3 6 9 10 11 15 18
我想要一个公式来列出相差 1 的范围,所以:1-3 6 9-11 15 18
有人能帮帮我吗?非常感谢
答案1
我很确定这不可能通过基本公式实现。不过,我以前也遇到过这种需求,我写了一个工作表函数:
Public Function ConcatInts(target As Range) As String
Dim s As String
Dim i As Integer
Dim n0 As Long
Dim n1 As Long
Dim n2 As Long
Dim flag As Boolean
n0 = 0
n1 = target.Cells(1).Value
n2 = n1
flag = False
For i = 2 To target.Cells.Count
If IsNumeric(target.Cells(i).Value) Then
n2 = target.Cells(i).Value
If n2 = n1 + 1 Then
If Not flag Then
n0 = n1
s = s & n1 & "-"
flag = True
End If
ElseIf n2 <> n1 Then
If n1 = n0 + 1 And right(s, 1) = "-" Then
s = left(s, Len(s) - 1) & " "
End If
s = s & n1 & " "
flag = False
End If
n1 = n2
End If
Next
If n1 = n0 + 1 And right(s, 1) = "-" Then
s = left(s, Len(s) - 1) & " "
End If
s = s & n1
ConcatInts = s
End Function
要使用此功能,您必须按 ALT+F11 打开 VBA 编辑器。然后从导航窗格中右键单击工作簿并选择插入->模块:
然后只需将代码复制粘贴到模块中即可。
现在你可以像调用常规函数一样调用它:
=ConcatInts(A1:I1)
请注意,此函数会跳过包含文本的单元格,自动将浮点数转换为整数,并丢弃重复项。它还要求对数字进行排序。
不要忘记将您的工作簿保存为启用宏的工作簿(XLSM)。