Excel Vba:如何将数字范围转换为数字序列
我必须将单元格中的数字范围转换为列中的数字序列,如下所示:Excel Vba:如何将数字范围转换为数字序列,excel,vba,Excel,Vba,我必须将单元格中的数字范围转换为列中的数字序列,如下所示: 10&-2&&-5&-8 10 12 13 14 15 18 我对此一无所知。请帮忙给我一些想法。 非常感谢。假设四部分字符串的解决方案 假设您有一个始终由四个部分组成的固定模式,并且字符串由“-”分隔,我使用Split函数和用户定义的helper函数推导了以下逻辑: (i) 第一个数字(=字符串“10&”中的绝对10) (ii)序列的起始编号(=从增量2到第一个编号=10+2=12) (iii)序列的结束编号(=第一个编号的增
10&-2&&-5&-8
10
12
13
14
15
18
我对此一无所知。请帮忙给我一些想法。
非常感谢。假设四部分字符串的解决方案 假设您有一个始终由四个部分组成的固定模式,并且字符串由
“-”
分隔,我使用Split
函数和用户定义的helper函数推导了以下逻辑:
- (i) 第一个数字(=字符串“10&”中的绝对10)
- (ii)序列的起始编号(=从增量2到第一个编号=10+2=12)
- (iii)序列的结束编号(=第一个编号的增量5=10+5=15)
- (iv)最后一个数字(=增加8到第一个数字=10+8=18)
Sub WriteSequence()
Dim s As String, i As Integer, ii As Integer
Dim first As Long, last As Long, start As Long
Dim vParts, v ' variant
' string example
s = "10&-2&&-5&-8"
' tokenize string parts
vParts = Split(s, "-") ' split at delimiter "-"
' get main numbers
first = getNumber(vParts(0)) ' get first number
start = getNumber(vParts(1)) + first ' calculate start number (from)
ends = getNumber(vParts(2)) + first ' calculate ends numnber (to)
last = getNumber(vParts(3)) + first ' calculate last number
' write to array
ReDim v(0 To last - first + 1)
v(0) = first
For i = 1 To ends - start + 1
v(i) = start + i - 1
Next i
v(i) = last
' write back to sheet
ThisWorkbook.Worksheets("Sheet1").[A2].Resize(i + 1, 1) = WorksheetFunction.Transpose(v)
End Sub
辅助功能
Function getNumber(ByVal s As String) As Long
' Purpose: return a number from a string ending with "&" or "&&"
getNumber = Val(Split(s, "&")(0))
End Function
尝试编辑您的示例。。。目前还不清楚转换应该如何进行。还有:到目前为止你尝试了什么?stackoverflow用于特定的编码问题,而不是自由职业者服务。符号代表什么?为什么会错过11、16和17?为什么在18岁结束?为什么???对不起,我将描述有关我的问题的更多细节:我想转换数字范围,如10&-2&&-5&-8=10&12&&15&18=10&12&13&14&15&18。“&&”符号表示序列号列表,开始号在左侧,结束号在右侧。谢谢。发布了一个解决方案,使用
Split
函数假设四个部分的固定模式,并试图破解其中不寻常的逻辑。