我一直在寻找一种方法来完成标题所说的内容并找到了 跟随线程: Excel: Listing Numbers In Between 2 Numbers
但我的情况有点不同:有一个单元格会在哪里 输入一些用逗号和/或连字符分隔的整数,制作 多个间隔(非常类似于'页面范围'字段 许多打印对话框)。
例如:1-3,9-11,17,19,21-22,25
我需要在另一个单元格中返回结果,但每个单元格都要返回 在行上分隔的数字,如下所示:
1
2
3
9
10
11
17
19
21
22
25
我可以使用excel本机函数执行此操作,但只能使用一个时间间隔 (例如:1-9)。除此之外,公式不起作用。
有没有办法在VBA中完成所有这些?
有人可以指点一个方向吗?
非常感谢任何帮助。
此致
[更新]
我已经使用了几个星期的代码,但我意识到我需要避免使用零,重复的数字以及按降序排列的数字。
e.g。
0 下,1,3-的 10,8 下,12,14,的 16,16- 下,22,的 27,24 -30,36,的 42,39
因此,我需要一个#VALUE!如果键入的数字不是按升序排列,或者如果找到零或重复的数字,则返回错误消息。
我已经处理过代码并且已经解决了上述问题仅针对类型化的区间(x-y), 但我无法找到逗号分隔的离散数字的解决方案。
非常感谢任何帮助。
到目前为止的代码:
Function RANGEX(strInput As String) As String
Dim intCurrent As Integer
Dim outputArray() As Variant
Dim intCount As Integer
intCount = 1
For Each i In Split(strInput, ",")
ReDim Preserve outputArray(1 To intCount)
If InStr(i, "-") > 0 Then
If CInt(Split(i, "-")(0)) > 0 And CInt(Split(i, "-")(0)) < CInt(Split(i, "-")(1)) Then
For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1))
intCurrent = x
ReDim Preserve outputArray(1 To intCount)
outputArray(intCount) = intCurrent
intCount = intCount + 1
Next x
Else
RANGEX = CVErr(xlErrValue)
End If
Else
ReDim Preserve outputArray(1 To intCount)
intCurrent = CInt(i)
outputArray(intCount) = intCurrent
intCount = intCount + 1
End If
Next i
RANGEX = Join(outputArray, ",")
End Function
答案 0 :(得分:0)
回答你的问题:是的,这是可能的。
下面是工作代码的示例。理想情况下,你会抽出一些重复的部分(调整输出数组的大小并添加下一个元素),但由于你的问题并不是针对任何具体的问题,所以这里只是“只是”。工作 - 指出你正确的方向。将您提供的内容放入单元格A1,并将所需的输出写入单元格B1:
Sub Testing()
Dim strInput As String
Dim strOutput As String
Dim intCurrent As Integer
Dim outputArray() As Variant
Dim intCount As Integer
intCount = 1
strInput = ActiveSheet.Cells(1, 1)
For Each i In Split(strInput, ",")
ReDim Preserve outputArray(1 To intCount)
If InStr(i, "-") > 0 Then
For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1))
intCurrent = x
ReDim Preserve outputArray(1 To intCount)
outputArray(intCount) = intCurrent
intCount = intCount + 1
Next x
Else
ReDim Preserve outputArray(1 To intCount)
intCurrent = CInt(i)
outputArray(intCount) = intCurrent
intCount = intCount + 1
End If
Next i
strOutput = Join(outputArray, vbCrLf)
ActiveSheet.Cells(1, 2) = strOutput
End Sub
除此之外,还对输入做了一些假设(分隔符是&#39;,&#39;)。
当然,您可以将其转换为函数,以便能够直接在Excel中将其用作公式。