【发布时间】:2016-09-07 21:35:39
【问题描述】:
给定一个数字数组:
[1,3,4,5,8,9,11]
在 VBA 中将该列表转换为可读字符串的最简单方法是什么,例如:
1、3-5、8-9、11
我可以将我的 VB.net 函数重写为 VBA,但它已经很冗长了,而且在 VBA 中会更长。
Public Shared Function GroupedNumbers(nums As List(Of Long))
If nums Is Nothing OrElse nums.Count = 0 Then Return "-"
If nums.Count = 1 Then Return nums(0)
Dim lNums = nums.Distinct().OrderBy(Function(m) m).ToList
Dim curPos As Long = 1
Dim lastNum As Long = lNums(0)
Dim i As Long = 0
Dim numStr As String = lNums(0)
Dim isGap As Boolean = False
Do Until i >= lNums.Count - 1
Do Until i >= lNums.Count - 1 OrElse lNums(i) + 1 <> lNums(i + 1)
i += 1
isGap = True
Loop
If isGap Then
numStr += "-" & lNums(i)
End If
If i <> lNums.Count - 1 Then
numStr += ", " & lNums(i + 1)
isGap = False
i += 1
End If
Loop
Return numStr
End Function
只是想知道在我为 VBA 重写之前是否有人有更好的方法?
【问题讨论】:
-
你确定你的输出吗?它的规则是什么?还是您的意思是输出为
1-3,4,5-8,9-11? -
是的,我确定,它不是 1-3,因为没有 2.. 它应该只连接相邻的数字
-
哦,我明白了。在下面检查我的答案。
标签: vba