List Excel-将值列表转换为范围

List Excel-将值列表转换为范围,list,excel,range,vba,List,Excel,Range,Vba,您能让我知道在Excel中是否可以执行以下操作吗 我有一个数字列表,即: 1 2 3 4 6 7 8 9 11 14 16 17 18 我希望这些数字的格式如下: 1-4, 6-9, 11, 14, 16-18 如果有可能或者您有任何问题,请告诉我 多谢各位 M我们的想法是在数字之间循环,每个新数字要么扩展当前范围,要么开始一个新范围。一种可能的实施方式如下: Sub GroupInRanges(): Dim S As Range, R As Range Dim i As L

您能让我知道在Excel中是否可以执行以下操作吗

我有一个数字列表,即:

1
2
3
4
6
7
8
9
11
14
16
17
18
我希望这些数字的格式如下:

1-4, 6-9, 11, 14, 16-18
如果有可能或者您有任何问题,请告诉我

多谢各位


M

我们的想法是在数字之间循环,每个新数字要么扩展当前范围,要么开始一个新范围。一种可能的实施方式如下:

Sub GroupInRanges():
    Dim S As Range, R As Range
    Dim i As Long, j As Long, n As Long
    Dim num As Long, startNum As Long, endNum As Long

    Set S = Application.InputBox("Select range containing numbers", Type:=8)
    Set R = Application.InputBox("Select first cell of output range", Type:=8)
    n = S.Cells.Count

    startNum = S.Cells(1).Value
    endNum = startNum
    For i = 1 To n
        num = S.Cells(i).Value
        If num <= endNum + 1 Then
            'extend current number range
            endNum = num
        Else
            'process the just-completed data range
            R.Offset(j).Value = IIf(startNum < endNum, startNum & "-" & endNum, endNum)
            j = j + 1
            startNum = num 'starts a new number range
            endNum = startNum
        End If
    Next i

    'process final range
    R.Offset(j).Value = IIf(startNum < endNum, startNum & "-" & endNum, endNum)
End Sub
子组范围()
调暗S为范围,R为范围
暗i为长,j为长,n为长
Dim num尽可能长,startNum尽可能长,endNum尽可能长
设置S=Application.InputBox(“选择包含数字的范围”,类型:=8)
设置R=Application.InputBox(“选择输出范围的第一个单元格”,类型:=8)
n=S.Cells.Count
startNum=S.单元格(1).值
endNum=startNum
对于i=1到n
num=S.单元格(i).值

如果您想要的输出没有可识别的模式,那么我将说“不”,这是不可能的。当然,如果你解释一下模式会有帮助的话。模式是检查数字是否有序。如果缺少编号,则将创建新范围。例如123467911将创建1-4,6-7,9,11。好的,我现在明白了。那么,您希望输出在一个单元格中吗?每个连续分组一个单元格。我们不是读心术的人,所以试着把你的问题当成别人来读。哦,对不起。我希望每个范围都在单独的单元格中。感谢您您是否正在寻找VBA解决方案(几乎微不足道)或电子表格公式方法(虽然可行但相当困难)?还有,你试过什么?Stack Overflow主要是一个帮助人们解决代码中遇到的问题的站点,而不是一个按照规范编写代码的免费编码服务。