vba - 如何获取序列中的第一个和最后一个数字
问题描述
我正在使用 VBA 尝试以分隔的数字序列获取第一个和最后一个数字。
数据仅显示为逗号分隔的数字序列。它们总是按数字升序排列。
所以这方面的一个例子可能是:
1,2,3,5,7,8,9
只需要序列的第一个和最后一个,序列定义为比前一个数字多一个的数字,在这种情况下有两个序列:
1,2,3
和7,8,9
。5 不在序列中,因为它前后被不止一个分隔(缺少 4 和 6)。
在这两种情况下,我需要每个序列的第一个和最后一个数字,即1 & 3
第一个序列和7 & 9
第二个序列。
我想知道正则表达式是否适合这一点,或者将它们放入某个集合中以便能够更轻松地前后导航是否会更好?
不知道从哪里开始——有什么想法吗?
非常感谢。
解决方案
最简单的方法可能是使用Split
:
NumberSequence = "1,2,3,5,7,8,9"
ValueList = Split(NumberSequence, ",")
然后拉取 ValueList 数组中第一个和最后一个索引的值。
您的问题描述中的复杂之处在于识别数字序列中何时“缺失”数字,但Split
也有助于解决此问题。将数字读入数组后,很容易遍历它们并确定“间隙”在哪里。
这说明了该方法:
Sub SampleProject()
GetMinAndMax "1,2,3,5,7,8,9"
End Sub
Sub GetMinAndMax(NumberSequence As String)
ValueList = Split(NumberSequence, ",")
MinValue = CInt(ValueList(0))
For i = 1 To UBound(ValueList)
If CInt(ValueList(i)) > CInt(ValueList(i - 1)) + 1 Then
MaxValue = CInt(ValueList(i - 1))
'Ignore single numbers ("5" in your example)
If Not MinValue = MaxValue Then MsgBox MinValue & " - " & MaxValue
MinValue = CInt(ValueList(i))
ElseIf i = UBound(ValueList) Then
MaxValue = CInt(ValueList(UBound(ValueList)))
MsgBox MinValue & " - " & MaxValue
End If
Next
End Sub
推荐阅读
- android - Firebase-MLkit 条形码扫描仪不产生任何结果
- python - 使用 pandas 将 ndarray 值转换为整个数据帧的数值
- php - 在一台机器上将 XAMPP 连接到 microsoft sql server management studio 2012
- opencv - gomobile bind -target=ios golang.org/x/mobile/example/bind/... libc++ 错误
- 3d - 从立体图片计算深度值高于预期
- css - 为菜单 KendoReact 设置类名
- php - 将日期时间字符串转换为数组php
- jquery - JQuery AJAX 调用未到达 Flask 视图
- google-chrome-extension - XMLHttpRequest 发送请求两次
- reactjs - 在 react-redux 中同步查询参数和状态变量