用范围替换序列号

che*_*hen 1 excel vba excel-formula

如何在单元格中找到序列号,并用范围替换它们?
例如:

改变:

1?3?5?15?16?17?25?28?29?31...

到:

1,3,5,15-17,25,28-29,31...

数字已经排序,即按升序排列。

谢谢。

bre*_*tdj 5

一个有趣的问题,我想在不循环检查顺序构建的序列(需要先排序)的情况下查看

这个功能

  1. 强制字符串到范围地址
  2. 用于Union将连续的行组合在一起
  3. 操作字符串以删除列标识符

在此处输入图片说明

不需要循环,更短的版本!

Function NumOut(strIn As String) As String
Dim rng1 As Range  
Set rng1 = Range("A" & Join(Split(Application.Trim([a1]), ", "), ",A"))
'force the range into areas rather than cells
Set rng1 = Union(rng1, rng1)
NumOut = Replace(Replace(Replace(rng1.Address, "$A$", vbNullstring), ": ", "-"), ",", ", ")
End Function
Run Code Online (Sandbox Code Playgroud)