Дан массив чисел:Простейший способ для преобразования списка номеров в читаемую строку в VBA
[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 .. он должен только присоединяться к смежным номерам –
О, я получил вашу мысль. Проверьте мой ответ ниже. –