Excel:如何列出一系列间隔的数字?
我一直在寻找一种方式做什么标题说,只是发现 后续线程: Excel: Listing Numbers In Between 2 NumbersExcel:如何列出一系列间隔的数字?
但是我的情况有点不同:存在这样的情况会 输入一些整数单元以逗号和/或连字符分隔,使得多个间隔(与在 许多打印对话框中找到的'页面范围'字段非常相似)。
例如:1-3,9-11,17,19,21-22,25
而我需要的结果到另一个小区,但与上线分开,如下面各 数目被返回:
我可以做到这一点使用Excel本地函数,但仅在一个间隔 (例如:1-9)。除此之外,公式不起作用。
有没有办法在VBA中完成所有这些?
难道有人请指点一下吗?
任何帮助,非常感谢。
问候
[更新]
我已经使用的代码了几个星期,但只是意识到我需要避免以降序零,重复的数字,也号码。
例如
,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
要回答你的问题:是的,这是可能的。
下面是一个工作代码的例子。理想情况下,你会抽出一些重复的部分(重新调整输出数组的大小并添加下一个元素),但由于你的问题不是关于任何特定的东西,所以这是'正义'的作用 - 指向你正确的方向。把你提供到单元格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
在此之上,某些假设,做出关于输入(分隔符是“”)。
当然,您可以将其转换为函数,以便能够直接在Excel中将其用作公式。
嘿@pwwolff。非常感谢您让我走向正确的方向! 我将它转换为函数,但结果不再分隔行中的数字。你可以帮帮我吗?我会回答我发布新代码的问题。 –
嘿@pwwolff。你钉了它! 'Wrap Text'就是答案!再次谢谢你! –
@PeterWhite太棒了 - 如果能解决你的问题,你能接受我的答案吗? – pwwolff
嘿,这听起来像你正在投入一个完整的编码练习,而不是一个特定的问题:你可以举一些你在VBA中试过的例子吗? – neophlegm
@neophlegm嗨对不起 –
Hi @neophlegm。对不起。我想我无法用任何人都能理解的方式解释我的问题。无论如何,我正在尝试制作一个记录文件,其他用户可能会要求对某些文件进行一些更改(已编号)。因此,如果有人想对几个文档进行相同的更改,那么具有该间隔的单元格将与我使用excel的本机函数创建的引擎一起工作。唯一缺少的是VBA函数能够完成标题所说的内容。 –