将单元格中的值范围转换为逗号分隔列表

有没有一个公式,我可以在单元格B1看A1,并创build一个基于逗号的列表?

所以下面,A1是我可以input的东西。 B1是一个公式。 这可能吗? 我会让A1始终遵循与XXX-XXX范围相同的格式。

+-------+-----------+----------------------+ | TABLE | A (Input) | B (Result) | +-------+-----------+----------------------+ | 1 | 1-10 | 1,2,3,4,5,6,7,8,9,10 | +-------+-----------+----------------------+ 

把下面的代码放在一个常规的VBA模块中,然后你可以使用(例如):

 =NumRange(A1) 

在B1

 Function NumRange(v) Dim arr, x As Long, rv As String, sep As String If InStr(v, "-") Then arr = Split(v, "-") arr(0) = Trim(arr(0)) arr(1) = Trim(arr(1)) If IsNumeric(arr(0)) And IsNumeric(arr(1)) Then For x = CLng(arr(0)) To CLng(arr(1)) rv = rv & sep & x sep = "," Next x End If End If NumRange = rv End Function 

编辑 – 处理多个范围

 Function NumRange(v) Dim arrC, arr, x As Long, rv As String, sep As String, e arrC = Split(v, ",") rv = "" For Each e In arrC If InStr(e, "-") Then arr = Split(e, "-") arr(0) = Trim(arr(0)) arr(1) = Trim(arr(1)) If IsNumeric(arr(0)) And IsNumeric(arr(1)) Then For x = CLng(arr(0)) To CLng(arr(1)) rv = rv & sep & x sep = "," Next x End If ElseIf IsNumeric(e) Then rv = rv & sep & CLng(e) sep = "," End If Next e NumRange = rv End Function 

另一种UDF方法

B1 =Spliced(A1)

 Function Spliced(strIn As String) As String X = Split(strIn, "-") Spliced = Join(Application.Transpose(Evaluate("=ROW(A" & X(0) & ":A" & X(1) & ")")), ",") End Function